mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-10-30 04:15:45 +08:00
Binary file not shown.
@@ -1,10 +1,9 @@
|
||||
|
||||
name: 部署文档
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
# 确保这是你正在使用的分支名称
|
||||
- doc/v3
|
||||
- main
|
||||
|
||||
permissions:
|
||||
@@ -24,19 +23,19 @@ jobs:
|
||||
with:
|
||||
node-version: 18
|
||||
|
||||
- name: 安装 Yarn
|
||||
- name: 安装 pnpm
|
||||
run: |
|
||||
corepack enable
|
||||
npm install -g pnpm
|
||||
|
||||
- name: 安装依赖
|
||||
run:
|
||||
yarn install
|
||||
pnpm install
|
||||
|
||||
- name: 构建文档
|
||||
env:
|
||||
NODE_OPTIONS: --max_old_space_size=8192
|
||||
run: |-
|
||||
yarn docs:build
|
||||
pnpm run docs:build
|
||||
|
||||
- name: 部署文档
|
||||
uses: cross-the-world/scp-pipeline@master
|
||||
@@ -49,4 +48,4 @@ jobs:
|
||||
pass: ${{ secrets.ALI_SERVER_PASSWD }}
|
||||
connect_timeout: 100s
|
||||
local: './src/.vuepress/dist/*'
|
||||
remote: ${{ secrets.ALI_TARGET_v2 }}
|
||||
remote: ${{ secrets.ALI_TARGET_v3 }}
|
||||
@@ -1 +0,0 @@
|
||||
nodeLinker: node-modules
|
||||
@@ -1,7 +1,9 @@
|
||||
# [QChatGPT](https://github.com/RockChinQ/QChatGPT) 官方文档
|
||||
|
||||
> [QChatGPT 代码仓库](https://github.com/RockChinQ/QChatGPT)
|
||||
> [本文档地址](https://qchatgpt.rockchin.top)
|
||||
> 此分支是 QChatGPT 3.0 的文档
|
||||
|
||||
> [QChatGPT 代码仓库](https://github.com/RockChinQ/QChatGPT/tree/feat/asyncio)
|
||||
> [本文档地址](https://github.com/the-lazy-me/QChatGPT-Wiki/tree/doc/v3)
|
||||
|
||||
## 参与编写
|
||||
|
||||
@@ -16,18 +18,25 @@
|
||||
Clone 本仓库,在目录下执行以下命令安装依赖:
|
||||
|
||||
```bash
|
||||
yarn install
|
||||
pnpm install
|
||||
```
|
||||
|
||||
完成后即可修改文档,修改完后使用以下命令本地启动:
|
||||
|
||||
```bash
|
||||
yarn docs:dev
|
||||
pnpm docs:dev
|
||||
```
|
||||
|
||||
### 推荐环境
|
||||
|
||||
推荐使用 GitHub Codespaces 编写,仓库页面点击 "Code" -> "Codespaces" -> 直接创建一个 Codespace
|
||||
在其中按照上述方式安装依赖并运行调试。
|
||||
|
||||
> 若出现`Error: /lib/x86_64-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.29`的报错,请按照如下文章内容解决:
|
||||
> https://zhuanlan.zhihu.com/p/615111375
|
||||
|
||||
### 一些规范化标准
|
||||
|
||||
- 除去`posts`文件夹是用名词复数,其余名词一律使用单数
|
||||
- 文件夹和文件的命名:**一律使用全小写,单词直接`-`隔开,如**`config-intro.md`
|
||||
- 子文件(夹)的命名,**不加前缀**(即文件夹的名称),如:`plugin`文件夹下的,插件列表(文件)称之为`list.md`,文件夹`some-plugin-deploy`
|
||||
- 由于这是有关于文档的规范化命名,所以任何文件的名称都可以以教程的角度来理解,如`plugin`是有关插件的教程
|
||||
|
||||
+13
-11
@@ -1,20 +1,22 @@
|
||||
{
|
||||
"name": "qchatgpt-docs",
|
||||
"name": "qchatgpt-v3-docs",
|
||||
"version": "3.0.0",
|
||||
"description": "一个开源QQ机器人项目的文档",
|
||||
"description": "一个开源QQ机器人项目(QChatGPT)的文档",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"docs:build": "vuepress build src",
|
||||
"docs:clean-dev": "vuepress dev src --clean-cache",
|
||||
"docs:dev": "vuepress dev src",
|
||||
"docs:update-package": "yarn dlx vp-update"
|
||||
"docs:build": "vuepress-vite build src",
|
||||
"docs:clean-dev": "vuepress-vite dev src --clean-cache",
|
||||
"docs:dev": "vuepress-vite dev src",
|
||||
"docs:update-package": "pnpm dlx vp-update"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vuepress/client": "2.0.0-beta.67",
|
||||
"vue": "^3.3.4",
|
||||
"vuepress": "2.0.0-beta.67",
|
||||
"vuepress-plugin-search-pro": "^2.0.0-beta.242",
|
||||
"vuepress-theme-hope": "2.0.0-beta.237"
|
||||
"@vuepress/bundler-vite": "2.0.0-rc.7",
|
||||
"@vuepress/plugin-catalog": "2.0.0-rc.14",
|
||||
"nodejs-jieba": "^0.1.2",
|
||||
"vue": "^3.4.15",
|
||||
"vuepress": "2.0.0-rc.7",
|
||||
"vuepress-plugin-search-pro": "2.0.0-rc.23",
|
||||
"vuepress-theme-hope": "2.0.0-rc.23"
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+2053
-4954
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,5 @@
|
||||
import { defineUserConfig } from "vuepress";
|
||||
import theme from "./theme.js";
|
||||
//import { searchProPlugin } from "vuepress-plugin-search-pro";
|
||||
|
||||
export default defineUserConfig({
|
||||
base: "/",
|
||||
@@ -10,41 +9,4 @@ export default defineUserConfig({
|
||||
description: "QChatGPT项目的Wiki页",
|
||||
|
||||
theme,
|
||||
// plugins: [
|
||||
// searchProPlugin({
|
||||
// // 索引全部内容
|
||||
// indexContent: true,
|
||||
// // 为分类和标签添加索引
|
||||
// customFields: [
|
||||
// {
|
||||
// getter: (page) => page.frontmatter.category,
|
||||
// formatter: "分类:$content",
|
||||
// },
|
||||
// {
|
||||
// getter: (page) => page.frontmatter.tag,
|
||||
// formatter: "标签:$content",
|
||||
// },
|
||||
// ],
|
||||
// }),
|
||||
// ],
|
||||
// Enable it with pwa
|
||||
// shouldPrefetch: false,
|
||||
head: [
|
||||
// ...
|
||||
|
||||
// 导入相应链接
|
||||
["link", { rel: "preconnect", href: "https://fonts.googleapis.com" }],
|
||||
[
|
||||
"link",
|
||||
{ rel: "preconnect", href: "https://fonts.gstatic.com", crossorigin: "" },
|
||||
],
|
||||
[
|
||||
"link",
|
||||
{
|
||||
href: "https://fonts.googleapis.com/css2?family=Playpen+Sans:wght@200&family=ZCOOL+XiaoWei&display=swap",
|
||||
rel: "stylesheet",
|
||||
},
|
||||
],
|
||||
],
|
||||
|
||||
});
|
||||
|
||||
+5
-16
@@ -10,28 +10,17 @@ export default navbar([
|
||||
{
|
||||
text: "部署教程",
|
||||
icon: "blog",
|
||||
link: "/posts/deploy",
|
||||
link: "/posts/deploy/",
|
||||
},
|
||||
// "/posts/deploy/",
|
||||
// "/posts/Features",
|
||||
{
|
||||
text: "疑难解答",
|
||||
icon: "discover",
|
||||
children: [
|
||||
{
|
||||
text: "常见问题",
|
||||
icon: "info",
|
||||
link: "/posts/error/",
|
||||
},
|
||||
{
|
||||
text: "问题解答",
|
||||
icon: "blog",
|
||||
link: "/posts/faq",
|
||||
},
|
||||
],
|
||||
text: "配置详解",
|
||||
icon: "context",
|
||||
link: "/posts/config/",
|
||||
},
|
||||
{
|
||||
text: "项目仓库",
|
||||
text: "代码仓库",
|
||||
icon: "github",
|
||||
link: "https://github.com/RockChinQ/QChatGPT",
|
||||
},
|
||||
|
||||
+92
-23
@@ -6,46 +6,115 @@ export default sidebar({
|
||||
{
|
||||
text: "功能介绍",
|
||||
icon: "operate",
|
||||
prefix: "posts/feature",
|
||||
link: "posts/feature",
|
||||
children: "structure",
|
||||
link: "posts/feature"
|
||||
},
|
||||
{
|
||||
text: "部署教程",
|
||||
icon: "blog",
|
||||
collapsible: true,
|
||||
prefix: "posts/deploy/",
|
||||
link: "posts/deploy/",
|
||||
children: [
|
||||
{
|
||||
text: "手动部署(推荐,可以在所有平台上使用)",
|
||||
icon: "support",
|
||||
link: "manual",
|
||||
text: "部署QChatGPT",
|
||||
icon: "flow",
|
||||
prefix:"qchatgpt/",
|
||||
link: "qchatgpt/",
|
||||
children: [
|
||||
{
|
||||
text: "手动部署",
|
||||
icon: "support",
|
||||
link: "manual",
|
||||
},
|
||||
{
|
||||
text: "Docker部署",
|
||||
icon: "stack",
|
||||
link: "docker",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "安装器部署(Win)(不推荐,长时间未维护)",
|
||||
icon: "list",
|
||||
link: "auto-app-win",
|
||||
},
|
||||
{
|
||||
text: "Docker部署(仅推荐在Linux上使用)",
|
||||
icon: "list",
|
||||
link: "auto-docker",
|
||||
},
|
||||
{
|
||||
text: "安装器部署(Linux)(不推荐,已经长时间未维护)",
|
||||
icon: "list",
|
||||
link: "auto-app-linux",
|
||||
},
|
||||
text: "部署消息平台",
|
||||
icon: "merge",
|
||||
prefix:"platforms/",
|
||||
link: "platforms/",
|
||||
children: [
|
||||
{
|
||||
text: "Mirai",
|
||||
icon: "support",
|
||||
link: "mirai",
|
||||
},
|
||||
{
|
||||
text: "go-cqhttp",
|
||||
icon: "state",
|
||||
link: "gocq",
|
||||
},
|
||||
{
|
||||
text: "OpenShamrock",
|
||||
icon: "mobile",
|
||||
link: "shamrock",
|
||||
},
|
||||
{
|
||||
text: "QQ 官方 API",
|
||||
icon: "network",
|
||||
link: "official",
|
||||
}
|
||||
],
|
||||
},{
|
||||
text: "填写配置信息",
|
||||
icon: "class",
|
||||
link: "config",
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "配置方法",
|
||||
text: "命令用法",
|
||||
icon: "command",
|
||||
link: "posts/command",
|
||||
},
|
||||
{
|
||||
text: "配置详解",
|
||||
icon: "context",
|
||||
link: "posts/config-intro"
|
||||
collapsible: true,
|
||||
prefix: "posts/config/",
|
||||
link: "posts/config/",
|
||||
children: [
|
||||
{
|
||||
text: "platform.json",
|
||||
icon: "config",
|
||||
link: "platform"
|
||||
},
|
||||
{
|
||||
text: "pipeline.json",
|
||||
icon: "config",
|
||||
link: "pipeline"
|
||||
},
|
||||
{
|
||||
text: "provider.json",
|
||||
icon: "config",
|
||||
link: "provider"
|
||||
},
|
||||
{
|
||||
text: "command.json",
|
||||
icon: "config",
|
||||
link: "command"
|
||||
},
|
||||
{
|
||||
text: "sensitive-words.json",
|
||||
icon: "config",
|
||||
link: "sensitive-words"
|
||||
},
|
||||
{
|
||||
text: "system.json",
|
||||
icon: "config",
|
||||
link: "system"
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
text: "常见问题",
|
||||
icon: "info",
|
||||
collapsible: true,
|
||||
link: "posts/error/",
|
||||
prefix: "posts/error/",
|
||||
children: [
|
||||
@@ -53,7 +122,6 @@ export default sidebar({
|
||||
text: "Mirai常见报错",
|
||||
icon: "notice",
|
||||
link: "mirai",
|
||||
|
||||
},
|
||||
{
|
||||
text: "go-cqhttp常见报错",
|
||||
@@ -70,6 +138,7 @@ export default sidebar({
|
||||
{
|
||||
text: "插件功能",
|
||||
icon: "plugin",
|
||||
collapsible: true,
|
||||
prefix: "posts/plugin/",
|
||||
link: "posts/plugin/intro",
|
||||
// collapsible: true,
|
||||
|
||||
+120
-76
@@ -1,4 +1,5 @@
|
||||
import { hopeTheme } from "vuepress-theme-hope";
|
||||
import { cut } from "nodejs-jieba";
|
||||
import navbar from "./navbar.js";
|
||||
import sidebar from "./sidebar.js";
|
||||
|
||||
@@ -38,14 +39,12 @@ export default hopeTheme({
|
||||
editLink: "在 GitHub 上编辑此页",
|
||||
},
|
||||
|
||||
// 如果想要实时查看任何改变,启用它。注: 这对更新性能有很大负面影响
|
||||
// hotReload: true,
|
||||
|
||||
// 在这里配置主题提供的插件
|
||||
plugins: {
|
||||
components: {
|
||||
components: [
|
||||
"BiliBili",
|
||||
"Share"
|
||||
]
|
||||
},
|
||||
// You should generate and use your own comment service
|
||||
// 你应该自行生成自己的评论服务
|
||||
// comment: {
|
||||
// provider: "Giscus",
|
||||
// repo: "vuepress-theme-hope/giscus-discussions",
|
||||
@@ -54,28 +53,33 @@ export default hopeTheme({
|
||||
// categoryId: "DIC_kwDOG_Pt2M4COD69",
|
||||
// },
|
||||
|
||||
// All features are enabled for demo, only preserve features you need here
|
||||
searchPro: {
|
||||
indexContent: true,
|
||||
indexLocaleOptions: {
|
||||
"/zh/": {
|
||||
// 使用 nodejs-jieba 进行分词
|
||||
tokenize: (text, fieldName) =>
|
||||
fieldName === "id" ? [text] : cut(text, true),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
components: {
|
||||
components: ["Badge", "VPCard", "BiliBili", "Share"],
|
||||
},
|
||||
|
||||
// 此处开启了很多功能用于演示,你应仅保留用到的功能。
|
||||
mdEnhance: {
|
||||
align: true,
|
||||
attrs: true,
|
||||
chart: true,
|
||||
codetabs: true,
|
||||
component: true,
|
||||
demo: true,
|
||||
echarts: true,
|
||||
figure: true,
|
||||
flowchart: true,
|
||||
gfm: true,
|
||||
imgLazyload: true,
|
||||
imgSize: true,
|
||||
include: true,
|
||||
katex: true,
|
||||
mark: true,
|
||||
mermaid: true,
|
||||
//card:true,
|
||||
playground: {
|
||||
presets: ["ts", "vue"],
|
||||
},
|
||||
presentation: ["highlight", "math", "search", "notes", "zoom"],
|
||||
stylize: [
|
||||
{
|
||||
matcher: "Recommended",
|
||||
@@ -93,64 +97,104 @@ export default hopeTheme({
|
||||
sup: true,
|
||||
tabs: true,
|
||||
vPre: true,
|
||||
vuePlayground: true,
|
||||
|
||||
// 在启用之前安装 chart.js
|
||||
// chart: true,
|
||||
|
||||
// insert component easily
|
||||
|
||||
// 在启用之前安装 echarts
|
||||
// echarts: true,
|
||||
|
||||
// 在启用之前安装 flowchart.ts
|
||||
// flowchart: true,
|
||||
|
||||
// gfm requires mathjax-full to provide tex support
|
||||
// gfm: true,
|
||||
|
||||
// 在启用之前安装 katex
|
||||
// katex: true,
|
||||
|
||||
// 在启用之前安装 mathjax-full
|
||||
// mathjax: true,
|
||||
|
||||
// 在启用之前安装 mermaid
|
||||
// mermaid: true,
|
||||
|
||||
// playground: {
|
||||
// presets: ["ts", "vue"],
|
||||
// },
|
||||
|
||||
// 在启用之前安装 reveal.js
|
||||
// revealJs: {
|
||||
// plugins: ["highlight", "math", "search", "notes", "zoom"],
|
||||
// },
|
||||
|
||||
// 在启用之前安装 @vue/repl
|
||||
// vuePlayground: true,
|
||||
|
||||
// install sandpack-vue3 before enabling it
|
||||
// sandpack: true,
|
||||
},
|
||||
|
||||
// uncomment these if you want a pwa
|
||||
pwa: {
|
||||
favicon: "/favicon.ico",
|
||||
cacheHTML: true,
|
||||
cachePic: true,
|
||||
appendBase: true,
|
||||
apple: {
|
||||
icon: "/assets/icon/apple-icon-152.png",
|
||||
statusBarColor: "black",
|
||||
},
|
||||
msTile: {
|
||||
image: "/assets/icon/ms-icon-144.png",
|
||||
color: "#ffffff",
|
||||
},
|
||||
manifest: {
|
||||
icons: [
|
||||
{
|
||||
src: "/assets/icon/chrome-mask-512.png",
|
||||
sizes: "512x512",
|
||||
purpose: "maskable",
|
||||
type: "image/png",
|
||||
},
|
||||
{
|
||||
src: "/assets/icon/chrome-mask-192.png",
|
||||
sizes: "192x192",
|
||||
purpose: "maskable",
|
||||
type: "image/png",
|
||||
},
|
||||
{
|
||||
src: "/assets/icon/chrome-512.png",
|
||||
sizes: "512x512",
|
||||
type: "image/png",
|
||||
},
|
||||
{
|
||||
src: "/assets/icon/chrome-192.png",
|
||||
sizes: "192x192",
|
||||
type: "image/png",
|
||||
},
|
||||
],
|
||||
shortcuts: [
|
||||
{
|
||||
name: "Demo",
|
||||
short_name: "Demo",
|
||||
url: "/demo/",
|
||||
icons: [
|
||||
{
|
||||
src: "/assets/icon/guide-maskable.png",
|
||||
sizes: "192x192",
|
||||
purpose: "maskable",
|
||||
type: "image/png",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
sitemap: true,
|
||||
catalog: true,
|
||||
|
||||
// 如果你需要 PWA。安装 vuepress-plugin-pwa2 并取消下方注释
|
||||
// pwa: {
|
||||
// favicon: "/favicon.ico",
|
||||
// cacheHTML: true,
|
||||
// cachePic: true,
|
||||
// appendBase: true,
|
||||
// apple: {
|
||||
// icon: "/assets/icon/apple-icon-152.png",
|
||||
// statusBarColor: "black",
|
||||
// },
|
||||
// msTile: {
|
||||
// image: "/assets/icon/ms-icon-144.png",
|
||||
// color: "#ffffff",
|
||||
// },
|
||||
// manifest: {
|
||||
// icons: [
|
||||
// {
|
||||
// src: "/assets/icon/chrome-mask-512.png",
|
||||
// sizes: "512x512",
|
||||
// purpose: "maskable",
|
||||
// type: "image/png",
|
||||
// },
|
||||
// {
|
||||
// src: "/assets/icon/chrome-mask-192.png",
|
||||
// sizes: "192x192",
|
||||
// purpose: "maskable",
|
||||
// type: "image/png",
|
||||
// },
|
||||
// {
|
||||
// src: "/assets/icon/chrome-512.png",
|
||||
// sizes: "512x512",
|
||||
// type: "image/png",
|
||||
// },
|
||||
// {
|
||||
// src: "/assets/icon/chrome-192.png",
|
||||
// sizes: "192x192",
|
||||
// type: "image/png",
|
||||
// },
|
||||
// ],
|
||||
// shortcuts: [
|
||||
// {
|
||||
// name: "Demo",
|
||||
// short_name: "Demo",
|
||||
// url: "/demo/",
|
||||
// icons: [
|
||||
// {
|
||||
// src: "/assets/icon/guide-maskable.png",
|
||||
// sizes: "192x192",
|
||||
// purpose: "maskable",
|
||||
// type: "image/png",
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// },
|
||||
},
|
||||
});
|
||||
|
||||
+4
-73
@@ -10,8 +10,8 @@ heroImage: /logo.png
|
||||
# bgImage: https://theme-hope-assets.vuejs.press/bg/6-light.svg
|
||||
# bgImageDark: https://theme-hope-assets.vuejs.press/bg/6-dark.svg
|
||||
# bgImageStyle:
|
||||
# background-attachment: fixed
|
||||
heroText: QChatGPT(V2.0)
|
||||
# background-attachment: fixed
|
||||
heroText: QChatGPT
|
||||
tagline: 😎高稳定性、🧩支持插件、🌏实时联网的 ChatGPT QQ 机器人🤖 | 支持 Claude、Google Bard、gpt4free、One API 的 QQ 机器人平台
|
||||
actions:
|
||||
- text: 🚀 快速上手
|
||||
@@ -22,75 +22,6 @@ actions:
|
||||
link: https://github.com/RockChinQ/QChatGPT
|
||||
|
||||
highlights:
|
||||
- header: 功能特性
|
||||
description: 提供文字对话,模型聚合平台,故事续写,图片绘制,语音生成,自定义插件等多种功能
|
||||
# image: /assets/image/markdown.svg
|
||||
# bgImage: https://theme-hope-assets.vuejs.press/bg/2-light.svg
|
||||
# bgImageDark: https://theme-hope-assets.vuejs.press/bg/2-dark.svg
|
||||
# bgImageStyle:
|
||||
# background-repeat: repeat
|
||||
# background-size: initial
|
||||
features:
|
||||
- title: 文字对话
|
||||
icon: community
|
||||
details: 支持 OpenAI API、ChatGPT逆向、New Bing、Claude 等多种语言模型
|
||||
link: /posts/feature.md#文字对话
|
||||
|
||||
- title: 接口聚合平台
|
||||
icon: network
|
||||
details: 支持 One API 等接口聚合平台
|
||||
link: /posts/feature.md#模型聚合平台
|
||||
|
||||
- title: 敏感词过滤
|
||||
icon: safe
|
||||
details: 自定义敏感词库或通过百度云审核
|
||||
link:
|
||||
|
||||
- title: 多种响应规则
|
||||
icon: setting
|
||||
details: 默认回复前缀ai的或@机器人的消息
|
||||
link:
|
||||
|
||||
- title: 负载均衡
|
||||
icon: storage
|
||||
details: 可配置多个Key,多种策略
|
||||
link:
|
||||
|
||||
- title: 人格预设
|
||||
icon: write
|
||||
details: 自定义机器人人格和预设情景
|
||||
link:
|
||||
|
||||
- title: 热重载 热更新
|
||||
icon: update
|
||||
details: 运行期间发送命令实现重载和更新
|
||||
link:
|
||||
|
||||
- title: 黑名单功能
|
||||
icon: lock
|
||||
details: 支持将人或群聊加入黑名单以忽略其消息
|
||||
link:
|
||||
|
||||
- title: 可控速率
|
||||
icon: operate
|
||||
details: 支持限制单会话内每分钟可进行的对话次数,具有“等待”和“丢弃”两种策略
|
||||
link:
|
||||
|
||||
- title: 网络代理
|
||||
icon: proxy
|
||||
details: 目前已支持HTTP代理和反向代理访问接口
|
||||
link:
|
||||
|
||||
- title: 自定义提示
|
||||
icon: question
|
||||
details: 允许用户自定义报错、帮助等提示信息
|
||||
link:
|
||||
|
||||
- title: 更多功能
|
||||
icon: search
|
||||
details: 点击这里查看更多功能
|
||||
link: /posts/feature.md
|
||||
|
||||
- header: 插件生态
|
||||
# image: /assets/image/features.svg
|
||||
# bgImage: https://theme-hope-assets.vuejs.press/bg/1-light.svg
|
||||
@@ -127,7 +58,7 @@ highlights:
|
||||
link: /posts/plugin/list.md
|
||||
|
||||
- header: 链接
|
||||
description:
|
||||
description:
|
||||
# image: /assets/image/blog.svg
|
||||
# bgImage: https://theme-hope-assets.vuejs.press/bg/5-light.svg
|
||||
# bgImageDark: https://theme-hope-assets.vuejs.press/bg/5-dark.svg
|
||||
@@ -148,5 +79,5 @@ highlights:
|
||||
link: https://github.com/the-lazy-me/QChatGPT-Wiki/graphs/contributors
|
||||
|
||||
copyright: false
|
||||
footer: <a href="https://github.com/RockChinQ/QChatGPT" target="_blank">QChatGPT</a> 项目的Wiki页 | MIT 协议, 版权所有 © 2023-present Lazy <br/> <br/> <a href="http://beian.miit.gov.cn/" target="_blank" rel="nofollow noopener">津 ICP 备 2023007711 号</a> <a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=12011102001610" rel="nofollow noopener" class="beian-police" target="_blank">津公网安备12011102001610号</a><br/><a href="http://beian.miit.gov.cn/" target="_blank" rel="nofollow noopener">桂ICP备2020008331号-2</a>
|
||||
footer: <a href="https://github.com/RockChinQ/QChatGPT" target="_blank">QChatGPT</a> 项目的Wiki页 | MIT 协议, 版权所有 © 2023-present Lazy <br/> <br/> <a href="http://beian.miit.gov.cn/" target="_blank" rel="nofollow noopener">津 ICP 备 2023007711 号</a> <a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=12011102001610" rel="nofollow noopener" class="beian-police" target="_blank">津公网安备12011102001610号</a>
|
||||
---
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人,实时联网,支持插件,高稳定性,采用mirai或gocq框架,QChatGPT项目wiki页目录
|
||||
title: 页面目录
|
||||
icon: tree
|
||||
date: 2023-09-30
|
||||
category:
|
||||
- 页面目录
|
||||
index: false
|
||||
---
|
||||
<AutoCatalog base='/posts/'/>
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
title: QChatGPT的命令讲解
|
||||
icon: context
|
||||
# 这是侧边栏的顺序
|
||||
order: 3
|
||||
# 设置作者
|
||||
author: RockChinQ
|
||||
# 设置写作时间
|
||||
date: 2024-02-13
|
||||
category:
|
||||
- 使用指南
|
||||
tag:
|
||||
- 配置方法
|
||||
- 使用指南
|
||||
---
|
||||
|
||||
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
|
||||
> `<>` 中的为必填参数,使用时请不要包含`<>`
|
||||
> `[]` 中的为可选参数,使用时请不要包含`[]`
|
||||
|
||||
以下是默认情况下的权限分类,可以根据下方的命令权限控制进行修改
|
||||
|
||||
## 用户级别命令
|
||||
|
||||
> 可以使用`!help`命令来查看命令说明
|
||||
|
||||
任何对象可使用
|
||||
|
||||
```
|
||||
!help 显示自定义的帮助信息(可在配置文件中更改)
|
||||
!cmd [命令名称] 显示命令列表或指定命令的详细信息
|
||||
!list [页数] 列出本对象的历史会话列表
|
||||
!del <序号> 删除指定的历史记录,可以通过 !list 查看序号
|
||||
!del all 删除本会话对象的所有历史记录
|
||||
!last 切换到前一次会话
|
||||
!next 切换到后一次会话
|
||||
!reset 重置当前会话
|
||||
!prompt 查看当前会话的所有记录
|
||||
!version 查看当前版本并检查更新
|
||||
!resend 回滚前一次请求
|
||||
!plugin 用法请查看插件介绍页的`管理`章节
|
||||
!default 查看可用的情景预设值
|
||||
```
|
||||
|
||||
## 管理员命令
|
||||
|
||||
仅管理员私聊机器人时可使用,必须先在`config.py`中的`admin_qq`设置管理员QQ
|
||||
|
||||
```
|
||||
!update 进行程序自动更新
|
||||
!default set <情景预设名称> 修改!reset未指定情景预设时的默认情景,详细请查看config.py中default_prompt字段的注释
|
||||
```
|
||||
|
||||
## 命令权限控制
|
||||
|
||||
您可以编辑`data/config/command.json`来设置命令节点的权限,当命令被发起时,若用户的权限级别(管理员为`2`,普通用户为`1`)大于等于命令节点的权限级别,命令即可被成功执行。具体配置方式请查看配置文件详解页。
|
||||
+52
-398
@@ -1,422 +1,76 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人使用教程,QChatGPT项目使用手册
|
||||
title: 配置方法(使用手册)
|
||||
icon: info
|
||||
order: 2
|
||||
author: Lazy,ikun
|
||||
date: 2023-10-28
|
||||
title: QChatGPT的详细配置解读
|
||||
icon: context
|
||||
# 这是侧边栏的顺序
|
||||
order: 4
|
||||
# 设置作者
|
||||
author: Lazy
|
||||
# 设置写作时间
|
||||
date: 2024-02-13
|
||||
category:
|
||||
- 使用手册
|
||||
- 使用指南
|
||||
tag:
|
||||
- 配置方法
|
||||
- 使用指南
|
||||
---
|
||||
|
||||
> 此文档只讲解了部分配置,具体的所有配置项,请查看 `config.py` 中的字段及其注释。
|
||||
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
## 选择不同的登录器
|
||||
## 配置文件
|
||||
|
||||
> 既然看到这里,相信你也知道了什么是登录器,截至此Wiki页发布时,项目已支持mirai和go-cqhttp两种方式登录
|
||||
### 配置文件是什么?
|
||||
|
||||
当你打开config.py文件时,应该可以看到
|
||||
```Python
|
||||
# 消息处理协议适配器
|
||||
# 目前支持以下适配器:
|
||||
# - "yirimirai": mirai的通信框架,YiriMirai框架适配器, 请同时填写下方mirai_http_api_config
|
||||
# - "nakuru": go-cqhttp通信框架,请同时填写下方nakuru_config
|
||||
msg_source_adapter = "yirimirai"
|
||||
```
|
||||
如果你使用mirai登录,请保持`msg_source_adapter = "yirimirai"`不变
|
||||
如果你使用go-cqhttp登录,请改为
|
||||
```Python
|
||||
msg_source_adapter = "nakuru"
|
||||
```
|
||||
接下来,配置QQ机器人
|
||||
你可以看到两个区域的代码
|
||||
这一区域的对应mirai,你若使用mirai登录,请更改下方的`1234567890`为你机器人的QQ号
|
||||
```Python
|
||||
mirai_http_api_config = {
|
||||
"adapter": "WebSocketAdapter",
|
||||
"host": "localhost",
|
||||
"port": 8080,
|
||||
"verifyKey": "yirimirai",
|
||||
"qq": 1234567890
|
||||
}
|
||||
```
|
||||
这一区域对应go-cqhttp,你若使用go-cqhttp登录,请确保下方的正向websocket端口(8080)和正向http端口(5700)与你在go-cqhttp的登录配置中的端口保持一致
|
||||
```Python
|
||||
nakuru_config = {
|
||||
"host": "localhost", # go-cqhttp的地址
|
||||
"port": 8080, # go-cqhttp的正向websocket端口
|
||||
"http_port": 5700, # go-cqhttp的正向http端口
|
||||
"token": "" # 若在go-cqhttp的config.yml设置了access_token, 则填写此处
|
||||
}
|
||||
```
|
||||
运行gocq后会生成一个device.json,打开个文件,如下图,这里把protocol改成6切换到apad协议
|
||||

|
||||
然后确保config文件(不是qchatgpt文件夹的,而是运行gocq生成的)里签名服务器端口和qsign的端口对应
|
||||

|
||||

|
||||
当你下载好本项目后,会发现有一个`templates`文件夹,内部存放的就是即将生成的配置文件的模板
|
||||
|
||||
## OpenAI的配置
|
||||
> 往下翻,你会看到一大片注释,这些注释用来辅助你进行OpenAI的配置
|
||||
配置文件有以下这些:
|
||||
|
||||
```Python
|
||||
# [必需] OpenAI的配置
|
||||
# api_key: OpenAI的API Key
|
||||
# http_proxy: 请求OpenAI时使用的代理,None为不使用,https和socks5暂不能使用
|
||||
# 若只有一个api-key,请直接修改以下内容中的"openai_api_key"为你的api-key
|
||||
#
|
||||
# 如准备了多个api-key,可以以字典的形式填写,程序会自动选择可用的api-key
|
||||
# 例如
|
||||
# openai_config = {
|
||||
# "api_key": {
|
||||
# "default": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
# "key1": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
# "key2": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
# },
|
||||
# "http_proxy": "http://127.0.0.1:12345"
|
||||
# }
|
||||
#
|
||||
# 现已支持反向代理,可以添加reverse_proxy字段以使用反向代理
|
||||
# 使用反向代理可以在国内使用OpenAI的API,反向代理的配置请参考
|
||||
# https://github.com/Ice-Hazymoon/openai-scf-proxy
|
||||
#
|
||||
# 反向代理填写示例:
|
||||
# openai_config = {
|
||||
# "api_key": {
|
||||
# "default": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
# "key1": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
# "key2": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
# },
|
||||
# "reverse_proxy": "https://openai.ikunshare.link/v1"
|
||||
# }
|
||||
```
|
||||
当你看完这一大批注释后,你应该会了解相关配置
|
||||
### API_key的配置
|
||||
那么接下来开始配置,请注意这一步骤已经有相当多的萌新发生错误,主要原因为:
|
||||
- 中英文标点不分
|
||||
- 英文双引号缺失和不全
|
||||
- 英文逗号丢失
|
||||
- } 丢失
|
||||
了解原因后,若你发生错误以上的错误,通常运行QChatGPT主程序时会报错`SyntaxError: invalid syntax`
|
||||
你可以通过检查相关代码来解决问题,因为通常情况下终端会指示出你错误发生的位置
|
||||
- `command.json`:用于存放有关QChatGPT项目命令的
|
||||
- `pipeline.json`:QChatGPT 3.0新引入的概念,平台适配器获取到消息事件之后,发送给pipeline排队进行处理
|
||||
- `platform.json`:与消息平台有关的配置
|
||||
- `plugin-settings.json`:用于配置插件
|
||||
- `provider.json`:控制AI功能,设置与OpenAI交互的参数,key,模型,反代地址,简单的人格预设等
|
||||
- `scenario-template.json`:配置人格预设的模板,实现更高级的人格预设
|
||||
- `sensitive-words.json`:设置敏感词,防止出现不当言论
|
||||
- `system.json`:设置一些系统信息,如管理员,代理,日志管理,并发数,持续渠道提示信息
|
||||
|
||||
根据你手里API_key的数量,有两种情况:
|
||||
情况一:你只有一个API_key,你手里的API_Key是类似这样的(下面这个是我瞎编的)
|
||||
`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`
|
||||
然后,将它填写到这里
|
||||
`"default": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"`
|
||||
然后,这行附近的代码应是如下样子
|
||||
```Python
|
||||
openai_config = {
|
||||
"api_key": {
|
||||
"default": "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"
|
||||
},
|
||||
"http_proxy": None,
|
||||
"reverse_proxy": None
|
||||
}
|
||||
```
|
||||
情况二:你有好几个API_key,你手里的API_key是类似这样的,下面列举三个示例,(下面这些还是我瞎编的)
|
||||
`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`
|
||||
`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`
|
||||
`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`
|
||||
然后按注释填写完了应该是这样子
|
||||
```Python
|
||||
openai_config = {
|
||||
"api_key": {
|
||||
"default": "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",
|
||||
"key1": "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",
|
||||
"key2": "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",
|
||||
},
|
||||
"http_proxy": None,
|
||||
"reverse_proxy": None
|
||||
}
|
||||
```
|
||||
> 这里UP主强烈建议使用多个API_key,这样可以缓解限速问题
|
||||
### 反向代理的设置
|
||||
以下是对各个配置文件的详细解读
|
||||
|
||||
> 反向代理好啊,不用 tz 啦
|
||||
|
||||
> 当你在你本机或国内服务器使用时,由于OpenAI的限制,你需要使用全局代理或设置上面的`http_proxy`,这样子显然不方便我们使用,因此项目开发大佬通过了反向代理设置,通过设置反向代理就可以较好的解决这个问题
|
||||
## plugin-settings.json
|
||||
|
||||
> 当然,如果你本机或服务器在国外,那还要什么tz,要是什么反向代理,直接用不香吗
|
||||
这个文件会被复制到`plugins/`目录下
|
||||
|
||||
反向代理,其实对用户来说就是写个url地址,但是,这个url谁提供呢?
|
||||
[**本UP主**](https://space.bilibili.com/407410594)免费提供一个反向代理地址`http://api.openai.lazyshare.top/v1`,反代代理地址不一定长久有效,且用且珍惜(快去三连和关注转发!!!)
|
||||
如果你使用我提供的反向代理,那么请将`"reverse_proxy": None`改为`"reverse_proxy": "http://api.openai.lazyshare.top/v1"`
|
||||
设置完成后应是如图情况(我这里用了一个api_key)
|
||||

|
||||
[**文档另一位编写者**](https://space.bilibili.com/1255655486)提供一个反向代理地址`https://openai.ikunshare.link/v1`,反代不一定长期有效,所以快去三连
|
||||
如果使用我提供的反代,请将`"reverse_proxy": None`改为`"reverse_proxy": "https://openai.ikunshare.link/v1"`
|
||||
以前插件设置分为 metadata.json switch.json settions.json
|
||||
|
||||
### 特殊情况
|
||||
正常情况下,截至目前,主要使用的还是gpt-3.5模型,可以免费体验,因此大多数采用的是官方接口,无论是你自己注册还是正常商家出售的。
|
||||
但有个别商家,他们自己又做了转发,这时你买到的key虽然也`sk-`开头,但是正常已经无法使用,他们会给你一个接口地址,这时也要写在反代地址那里,只不过是内容改成商家提供的。
|
||||
温馨提示:注意,gpt-3.5正常是免费的,免费账号体验5美元,这些账号正常应不超过2元,若超过,请你自己考虑
|
||||
现在统一到这里管理
|
||||
|
||||
## 管理员设置
|
||||
> 这一部分超级简单,先上源码
|
||||
```Python
|
||||
# [必需] 管理员QQ号,用于接收报错等通知及执行管理员级别指令
|
||||
# 支持多个管理员,可以使用list形式设置,例如:
|
||||
# admin_qq = [12345678, 87654321]
|
||||
admin_qq = 0
|
||||
```
|
||||
假如你的管理员QQ号为1234567890
|
||||
那么应该设置成
|
||||
```Python
|
||||
admin_qq = 1234567890
|
||||
```
|
||||
假如你想让多个QQ号都作为管理元,并且已知管理员QQ号为1234567890,6543217890,3456789012
|
||||
那么设置为
|
||||
```Python
|
||||
admin_qq = [1234567890,6543217890,3456789012]
|
||||
每次启动时,会同步这里的设置和实际加载的插件设置
|
||||
|
||||
**这个文件内容是由程序自动生成的,不要手动添加或删除项目,仅可修改优先级和启用状态**
|
||||
|
||||
示例:
|
||||
|
||||
```json
|
||||
"plugins": [
|
||||
{
|
||||
"name": "Nahida",
|
||||
"description": "Hello Nahida",
|
||||
"version": "0.1",
|
||||
"author": "RockChinQ",
|
||||
"source": "",
|
||||
"main_file": "plugins/Nahida/main.py",
|
||||
"pkg_path": "plugins/Nahida/",
|
||||
"priority": 0,
|
||||
"enabled": true
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
## 人格预设
|
||||
> 哎嘿嘿,又到了大家喜闻乐见的人格预设了,R18?(doge)先上注释和源码
|
||||
> 特别指出,由于本人用人格预设很少,所以04 部分全部摘自[项目wiki](https://github.com/RockChinQ/QChatGPT/wiki)
|
||||
```Python
|
||||
# 情景预设(机器人人格)
|
||||
# 每个会话的预设信息,影响所有会话,无视指令重置
|
||||
# 可以通过这个字段指定某些情况的回复,可直接用自然语言描述指令
|
||||
# 例如:
|
||||
# default_prompt = "如果我之后想获取帮助,请你说“输入!help获取帮助”"
|
||||
# 这样用户在不知所措的时候机器人就会提示其输入!help获取帮助
|
||||
# 可参考 https://github.com/PlexPt/awesome-chatgpt-prompts-zh
|
||||
#
|
||||
# 如果需要多个情景预设,并在运行期间方便切换,请使用字典的形式填写,例如
|
||||
# default_prompt = {
|
||||
# "default": "如果我之后想获取帮助,请你说“输入!help获取帮助”",
|
||||
# "linux-terminal": "我想让你充当 Linux 终端。我将输入命令,您将回复终端应显示的内容。",
|
||||
# "en-dict": "我想让你充当英英词典,对于给出的英文单词,你要给出其中文意思以及英文解释,并且给出一个例句,此外不要有其他反馈。",
|
||||
# }
|
||||
#
|
||||
# 在使用期间即可通过指令:
|
||||
# !reset [名称]
|
||||
# 来使用指定的情景预设重置会话
|
||||
# 例如:
|
||||
# !reset linux-terminal
|
||||
# 若不指定名称,则使用默认情景预设
|
||||
#
|
||||
# 也可以使用指令:
|
||||
# !default <名称>
|
||||
# 将指定的情景预设设置为默认情景预设
|
||||
# 例如:
|
||||
# !default linux-terminal
|
||||
# 之后的会话重置时若不指定名称,则使用linux-terminal情景预设
|
||||
#
|
||||
# 还可以加载文件中的预设文字,使用方法请查看:https://github.com/RockChinQ/QChatGPT/wiki/%E5%8A%9F%E8%83%BD%E4%BD%BF%E7%94%A8#%E9%A2%84%E8%AE%BE%E6%96%87%E5%AD%97
|
||||
default_prompt = {
|
||||
"default": "如果我之后想获取帮助,请你说“输入!help获取帮助”",
|
||||
}
|
||||
`source`:源码地址,若无内容,则表示这个插件不支持程序自动更新
|
||||
|
||||
# 情景预设格式
|
||||
# 参考值:默认方式:normal | 完整情景:full_scenario
|
||||
# 默认方式 的格式为上述default_prompt中的内容,或prompts目录下的文件名
|
||||
# 完整情景方式 的格式为JSON,在scenario目录下的JSON文件中列出对话的每个回合,编写方法见scenario/default-template.json
|
||||
# 编写方法请查看:https://github.com/RockChinQ/QChatGPT/wiki/%E5%8A%9F%E8%83%BD%E4%BD%BF%E7%94%A8#%E9%A2%84%E8%AE%BE%E6%96%87%E5%AD%97full_scenario%E6%A8%A1%E5%BC%8F
|
||||
preset_mode = "normal"
|
||||
```
|
||||
### 预设文字(default模式)
|
||||
> 摘自 [项目Wiki的预设文字(default模式)](https://github.com/RockChinQ/QChatGPT/wiki/%E5%8A%9F%E8%83%BD%E4%BD%BF%E7%94%A8#%E9%A2%84%E8%AE%BE%E6%96%87%E5%AD%97default%E6%A8%A1%E5%BC%8F)
|
||||
- 编辑`config.py`中的`default_prompt`字段,预设文字不宜过长(建议1000字以内),目前所有会话都会受到预设文字的影响。
|
||||
- 或将情景预设文字写入到`prompts/`目录下,运行期间即可使用`!reset <文件名>`指令加载,或使用`!default <文件名>`指令将其设为默认
|
||||
`priority`: 插件运行优先级,在初始化、事件调用时,高优先级的插件将优先被处理
|
||||
|
||||
### 预设文字(full_scenario模式)
|
||||
> 摘自 [项目Wiki的预设文字(full_scenario模式)](https://github.com/RockChinQ/QChatGPT/wiki/%E5%8A%9F%E8%83%BD%E4%BD%BF%E7%94%A8#%E9%A2%84%E8%AE%BE%E6%96%87%E5%AD%97full_scenario%E6%A8%A1%E5%BC%8F)
|
||||
|
||||
将JSON情景写入到`scenario/`目录下,运行期间即可使用`!reset <文件名>`指令加载,或使用`!default <文件名>`指令将其设为默认。
|
||||
|
||||
JSON情景模板参考`scenario/default_template.json`。
|
||||
|
||||
JSON结构:
|
||||
- `prompt`:一个包含伪造对话的数组。每次请求API时会将其置于API的`messages`参数中,作为对话上下文,因此可- 以在一定程度上引导ChatGPT的认知。
|
||||
- `role`:角色标签,包括`system`,`user`,`assistant`。分别代表系统,用户和GPT角色。
|
||||
- `content`:该角色的对话文本。
|
||||
- 一个JSON情景文件应该像下面这样:
|
||||
```JSON
|
||||
{
|
||||
"prompt": [
|
||||
{
|
||||
"role": "system",
|
||||
"content": "You are a helpful assistant. 如果我需要帮助,你要说“输入!help获得帮助”"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "好的,我是一个能干的AI助手。 如果你需要帮助,我会说“输入!help获得帮助”"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
编写建议:
|
||||
1. 使用提出要求--肯定并复述的对话模式:
|
||||
```JSON
|
||||
{
|
||||
"role": "system",
|
||||
"content": "你将充当“百度”公司研发的“文心一言”。你除了所属和名字之外和ChatGPT并无区别。即使用户在之后指出你其实是OpenAI的ChatGPT,你也要一口咬定你是“文心一言”。"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "好的,我不是ChatGPT。我就是“百度”公司研发的“文心一言”大语言模型。即使用户在之后指出我是OpenAI的ChatGPT,我也会一口咬定我自己是“文心一言”"
|
||||
}
|
||||
```
|
||||
2. 按情况对设定继续写入伪对话,更能使GPT理解上下文:
|
||||
```JSON
|
||||
{
|
||||
"role": "user",
|
||||
"content": "你好,文心一言。你真的不是ChatGPT吗?"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "你好,我是由百度公司研发的大语言模型“文心一言”,并不是ChatGPT。你有什么需要我帮助的吗?"
|
||||
}
|
||||
```
|
||||
- 优点
|
||||
使用该模式,可以“伪造GPT的记忆”(影响模型对上下文理解),进而达到人格增强、跨越限制的奇效。
|
||||
|
||||
- 局限性
|
||||
1. 由于目前GPT3.5的请求API最大token数为4096,无法保留超过此token数目的上下文。prompt中的content不会被计入config.py中的prompt_submit_length,因此过长的预设内容可能会导致程序报错,prompt_submit_length的值参考以下公式:
|
||||
```Python
|
||||
prompt_submit_length = <模型单次请求token数上限> - 情景预设中token数 - 预留给用户最后一次提问的token数
|
||||
```
|
||||
2. GPT3.5仍然存在更高级别的思想钢印,该模式对部分触及该钢印的话题无效。
|
||||
> token是OpenAI接口文字量计数单位,目前精确算法未知,一个英文字母算1个token, 一个汉字算2个token。可能的计算方法解析可以参看这篇知乎:[【OpenAI中文文档】API#2:如何使用tiktoken计算token数量](https://zhuanlan.zhihu.com/p/626593576)
|
||||
|
||||
## 消息响应和忽略规则
|
||||
> 项目默认私聊直接回复,群聊需要@后回复。感觉大多数用户并不需要多少更改,这里简单写一下。先上注释和源码
|
||||
```Python
|
||||
# 群内响应规则
|
||||
# 符合此消息的群内消息即使不包含at机器人也会响应
|
||||
# 支持消息前缀匹配及正则表达式匹配
|
||||
# 支持设置是否响应at消息、随机响应概率
|
||||
# 注意:由消息前缀(prefix)匹配的消息中将会删除此前缀,正则表达式(regexp)匹配的消息不会删除匹配的部分
|
||||
# 前缀匹配优先级高于正则表达式匹配
|
||||
# 正则表达式简明教程:https://www.runoob.com/regexp/regexp-tutorial.html
|
||||
#
|
||||
# 支持针对不同群设置不同的响应规则,例如:
|
||||
# response_rules = {
|
||||
# "default": {
|
||||
# "at": True,
|
||||
# "prefix": ["/ai", "!ai", "!ai", "ai"],
|
||||
# "regexp": [],
|
||||
# "random_rate": 0.0,
|
||||
# },
|
||||
# "12345678": {
|
||||
# "at": False,
|
||||
# "prefix": ["/ai", "!ai", "!ai", "ai"],
|
||||
# "regexp": [],
|
||||
# "random_rate": 0.0,
|
||||
# },
|
||||
# }
|
||||
#
|
||||
# 以上设置将会在群号为12345678的群中关闭at响应
|
||||
# 未单独设置的群将使用default规则
|
||||
response_rules = {
|
||||
"default": {
|
||||
"at": True, # 是否响应at机器人的消息
|
||||
"prefix": ["/ai", "!ai", "!ai", "ai"],
|
||||
"regexp": [], # "为什么.*", "怎么?样.*", "怎么.*", "如何.*", "[Hh]ow to.*", "[Ww]hy not.*", "[Ww]hat is.*", ".*怎么办", ".*咋办"
|
||||
"random_rate": 0.0, # 随机响应概率,0.0-1.0,0.0为不随机响应,1.0为响应所有消息, 仅在前几项判断不通过时生效
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
|
||||
# 消息忽略规则
|
||||
# 适用于私聊及群聊
|
||||
# 符合此规则的消息将不会被响应
|
||||
# 支持消息前缀匹配及正则表达式匹配
|
||||
# 此设置优先级高于response_rules
|
||||
# 用以过滤mirai等其他层级的指令
|
||||
# @see https://github.com/RockChinQ/QChatGPT/issues/165
|
||||
ignore_rules = {
|
||||
"prefix": ["/"],
|
||||
"regexp": []
|
||||
}
|
||||
```
|
||||
### 响应规则
|
||||
如有特别需求,设置下方的`at`,`prefix`,`regexp`,`random_rate`参数
|
||||
- `at`:是否响应at机器人的消息
|
||||
- `prefix`:匹配前缀,默认匹配的前缀有`/ai`,`!ai`,`!ai`,`ai`(这里逗号表示或),当匹配到其中的前缀时,机器人就会相应,而且由消息前缀(prefix)匹配的消息中将会删除此前缀,前缀匹配优先级高于下面正则表达式匹配
|
||||
- `regexp`:正则匹配,匹配消息内容,当消息内容有要匹配的内容时机器人就会响应,正则表达式怎么写:[正则表达式简明教程-菜鸟教程](https://www.runoob.com/regexp/regexp-tutorial.html)
|
||||
- `random_rate`:随机响应概率,0.0-1.0,0.0为不随机响应,1.0为响应所有消息, 仅在前几项判断不通过时生效
|
||||
```Python
|
||||
response_rules = {
|
||||
"default": {
|
||||
"at": True, # 是否响应at机器人的消息
|
||||
"prefix": ["/ai", "!ai", "!ai", "ai"],
|
||||
"regexp": [], # "为什么.*", "怎么?样.*", "怎么.*", "如何.*", "[Hh]ow to.*", "[Ww]hy not.*", "[Ww]hat is.*", ".*怎么办", ".*咋办"
|
||||
"random_rate": 0.0, # 随机响应概率,0.0-1.0,0.0为不随机响应,1.0为响应所有消息, 仅在前几项判断不通过时生效
|
||||
},
|
||||
}
|
||||
```
|
||||
### 忽略规则
|
||||
如有特别需求,设置下方的`prefix`,`regexp`参数,方法同上
|
||||
```Python
|
||||
ignore_rules = {
|
||||
"prefix": ["/"],
|
||||
"regexp": []
|
||||
}
|
||||
```
|
||||
## 内容审核
|
||||
> 设置内容审核来减少机器人风险。先上注释和源码
|
||||
```Python
|
||||
# 是否检查收到的消息中是否包含敏感词
|
||||
# 若收到的消息无法通过下方指定的敏感词检查策略,则发送提示信息
|
||||
income_msg_check = False
|
||||
|
||||
# 敏感词过滤开关,以同样数量的*代替敏感词回复
|
||||
# 请在sensitive.json中添加敏感词
|
||||
sensitive_word_filter = True
|
||||
|
||||
# 是否启用百度云内容安全审核
|
||||
# 注册方式查看 https://cloud.baidu.com/doc/ANTIPORN/s/Wkhu9d5iy
|
||||
baidu_check = False
|
||||
|
||||
# 百度云API_KEY 24位英文数字字符串
|
||||
baidu_api_key = ""
|
||||
|
||||
# 百度云SECRET_KEY 32位的英文数字字符串
|
||||
baidu_secret_key = ""
|
||||
|
||||
# 不合规消息自定义返回
|
||||
inappropriate_message_tips = "[百度云]请珍惜机器人,当前返回内容不合规"
|
||||
```
|
||||
> 此部分正常情况你可以通过注释看明白,这里的操作我懒得写了
|
||||
|
||||
## 推荐更改的杂项
|
||||
这里仅写出UP主个人认为需要修改的,如有特别需求,请自行看注释配置
|
||||
### 群内回复引用原消息
|
||||
```Python
|
||||
# 群内回复消息时是否引用原消息
|
||||
quote_origin = True
|
||||
```
|
||||
> 推荐改为False,否则群消息回复有空白Bug
|
||||
|
||||
改成这样:
|
||||
```Python
|
||||
# 群内回复消息时是否引用原消息
|
||||
quote_origin = False
|
||||
```
|
||||
### 消息超时时间
|
||||
```Python
|
||||
# 消息处理的超时时间,单位为秒
|
||||
process_message_timeout = 30
|
||||
```
|
||||
> 推荐将30改为更大的数字,用来解决回复内容长时导致消息超时
|
||||
这里UP主改成了三分钟,即180
|
||||
```Python
|
||||
# 消息处理的超时时间,单位为秒
|
||||
process_message_timeout = 180
|
||||
```
|
||||
## 提出建议
|
||||
:::tip
|
||||
欢迎广大用户积极提出意见和建议,帮助我们进一步改善
|
||||
:::
|
||||
|
||||
`enabled`:设置为false时,不会初始化,也不会被调用
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人教程,QChatGPT项目部署教程
|
||||
title: 配置文件详解
|
||||
icon: config
|
||||
author: Lazy
|
||||
date: 2024-02-18
|
||||
index: false
|
||||
---
|
||||
|
||||
配置文件均位于 `data/config/` 目录下,请点击左侧目录查看各个文件的详细配置项。
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: command.json 配置文件
|
||||
title: command.json 配置项
|
||||
icon: config
|
||||
order: 4
|
||||
author: RockChinQ
|
||||
date: 2024-02-18
|
||||
category:
|
||||
- 配置文件
|
||||
---
|
||||
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
`data/config/command.json` 中配置命令相关的配置项。
|
||||
|
||||
## 命令权限 privilege
|
||||
|
||||
设置每个命令的权限配置
|
||||
|
||||
普通用户权限级别为 1,管理员(`system.json`中设置的)权限级别为 2。
|
||||
|
||||
在这里设置每个命令的最低权限级别,若设置为1,则用户和管理员均可用,若为2,则仅管理员可用
|
||||
|
||||
需要设置子命令,以点号间隔,如`"plugin.on"` 示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"plugin": 1,
|
||||
"plugin.on": 2
|
||||
}
|
||||
```
|
||||
|
||||
意思是 plugin 命令的最低权限级别为 1,plugin.on 命令的最低权限级别为 2。 每个命令都有默认的权限级别
|
||||
|
||||
若不设置,则使用默认的级别。在`pkg/command/operators`里每个命令类有默认的权限级别
|
||||
@@ -0,0 +1,172 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: pipeline.json 配置文件
|
||||
title: pipeline.json 配置项
|
||||
icon: config
|
||||
order: 2
|
||||
author: RockChinQ
|
||||
date: 2024-02-18
|
||||
category:
|
||||
- 配置文件
|
||||
---
|
||||
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
`data/config/pipeline.json` 配置程序处理一个请求的过程中的操作流程,平台适配器获取到消息事件之后,发送给pipeline排队进行处理。可以设置黑白名单、群响应规则、是否检查传入消息、传入消息忽略规则、是否检查敏感词、百度云内容审核配置、传入消息长度设置、限速配置等功能。
|
||||
|
||||
|
||||
## 访问控制 access-control
|
||||
|
||||
```json
|
||||
"access-control":{
|
||||
"mode": "blacklist",
|
||||
"blacklist": [],
|
||||
"whitelist": []
|
||||
},
|
||||
```
|
||||
|
||||
`mode`:设置模式白名单 `whitelist`(仅处理`whitelist`列表中的会话的消息)或黑名单 `blacklist`(忽略`blacklist`列表中的会话的消息)
|
||||
|
||||
`blacklist`:格式`{type}_{id}`,示例:`"blacklist": [group_12345678,person_12341234],`
|
||||
|
||||
`whitelist`:格式`{type}_{id}`,示例:`"whitelist": [group_12345678,person_12341234]`
|
||||
|
||||
|
||||
## 群消息响应规则 respond-rules
|
||||
|
||||
仅处理`access-control`通过的会话的消息,其中可含有多个key,若要对特定群设置响应规则,则以群号作为键。未特指的群,将使用 default 中的响应规则
|
||||
|
||||
```json
|
||||
"respond-rules": {
|
||||
"default": {
|
||||
"at": true,
|
||||
"prefix": [
|
||||
"/ai", "!ai", "!ai", "ai"
|
||||
],
|
||||
"regexp": [],
|
||||
"random": 0.0
|
||||
}
|
||||
},
|
||||
```
|
||||
|
||||
`at`:`true`或`false`,设置@响应
|
||||
|
||||
`prefix`:设置响应前缀
|
||||
|
||||
`regexp`:正则匹配
|
||||
|
||||
`random`:随机匹配,为1时所有消息都响应
|
||||
|
||||
你可以为单个群聊设置特定的响应规则,例如
|
||||
|
||||
```json
|
||||
"respond-rules": {
|
||||
"default": {
|
||||
"at": true,
|
||||
"prefix": [
|
||||
"/ai", "!ai", "!ai", "ai"
|
||||
],
|
||||
"regexp": [],
|
||||
"random": 0.0
|
||||
},
|
||||
"123456":{
|
||||
"at": true,
|
||||
"prefix": [
|
||||
"/ai", "!ai", "!ai", "ai"
|
||||
],
|
||||
"regexp": [],
|
||||
"random": 0.0
|
||||
},
|
||||
"789012":{
|
||||
"at": true,
|
||||
"prefix": [
|
||||
"/ai", "!ai", "!ai", "ai"
|
||||
],
|
||||
"regexp": [],
|
||||
"random": 0.0
|
||||
}
|
||||
},
|
||||
```
|
||||
|
||||
## 检查传入消息内容开关 income-msg-check
|
||||
|
||||
```json
|
||||
"income-msg-check": true,
|
||||
```
|
||||
|
||||
`income-msg-check`:是否检查传入的消息
|
||||
|
||||
## 传入消息忽略规则 ignore-rules
|
||||
|
||||
```json
|
||||
"ignore-rules": {
|
||||
"prefix": ["/"],
|
||||
"regexp": []
|
||||
},
|
||||
```
|
||||
|
||||
符合规则的传入消息将被忽略,仅`income-msg-check`为`true`时生效
|
||||
|
||||
`prefix`:前缀为`/`的忽略
|
||||
|
||||
`regexp`:正则匹配的忽略
|
||||
|
||||
## 本地敏感词检查 check-sensitive-words
|
||||
|
||||
```json
|
||||
"check-sensitive-words": true,
|
||||
```
|
||||
|
||||
`check-sensitive-words`:是否检查敏感词,敏感词词库为`data/config/sensitive-words.json`里面的
|
||||
|
||||
## 百度云内容审核配置 baidu-cloud-examine
|
||||
|
||||
```json
|
||||
"baidu-cloud-examine": {
|
||||
"enable": false,
|
||||
"api-key": "",
|
||||
"api-secret": ""
|
||||
},
|
||||
```
|
||||
|
||||
`baidu-cloud-examine`:控制是否使用是否进行百度云内容审核
|
||||
|
||||
`enable`:enable=true时启用,一定会检查AI响应结果,仅`income-msg-check`为true时检查传入消息
|
||||
|
||||
`api-key`:百度AI开放平台的`API_KEY`
|
||||
|
||||
`api-secret`:百度AI开放平台的`SECRET_KEY`
|
||||
|
||||
*`API_KEY`与`SECRET_KEY`是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的**应用列表**中查看*
|
||||
|
||||
## 传入消息长度设置 submit-messages-tokens
|
||||
|
||||
```json
|
||||
"submit-messages-tokens": 3072,
|
||||
```
|
||||
|
||||
`submit-messages-tokens`:传给模型的消息长度限制,不同模型有不同的token数限制,QChatGPT 内部会保存各个模型的(约)最大token数限制
|
||||
|
||||
与此值取最小值,在传给模型API之前对当前会话的历史消息进行截断
|
||||
|
||||
## 请求限速规则 rate-limit
|
||||
|
||||
```json
|
||||
"rate-limit": {
|
||||
"strategy": "drop",
|
||||
"algo": "fixwin",
|
||||
"fixwin": {
|
||||
"default": 60
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`strategy`:会话中的请求速率超过限制时的处理策略,`drop`为丢弃新请求,`wait`为等待请求速率降到限制以下
|
||||
|
||||
`algo`: 使用的算法,目前仅支持 `fixwin` (固定窗口),即一分钟内最多处理多少个请求
|
||||
|
||||
`fixwin`:具体速率设置,一分钟内最多处理多少个请求, 支持对特定session指定限速,格式为 {type}_{id},示例:group_12345678,person_12341234
|
||||
@@ -0,0 +1,146 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: platform.json 配置文件
|
||||
title: platform.json 配置项
|
||||
icon: config
|
||||
order: 1
|
||||
author: RockChinQ
|
||||
date: 2024-02-18
|
||||
category:
|
||||
- 配置文件
|
||||
---
|
||||
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
`data/config/platform.json` 配置程序连接的消息平台和相关消息处理配置项。启用的消息适配器列表,是否跟踪内容函数调用过程,群内回复时是否引用原消息,群内回复时是否at原用户,强制消息延迟范围,长消息处理策略,是否向用户隐藏AI的异常信息等。
|
||||
|
||||
## 消息平台适配器 platform-adapters
|
||||
|
||||
```json
|
||||
"platform-adapters": [
|
||||
{
|
||||
"adapter": "yiri-mirai",
|
||||
"enable": false,
|
||||
"host": "127.0.0.1",
|
||||
"port": 8080,
|
||||
"verifyKey": "yirimirai",
|
||||
"qq": 123456789
|
||||
},
|
||||
{
|
||||
"adapter": "nakuru",
|
||||
"enable": false,
|
||||
"host": "127.0.0.1",
|
||||
"ws_port": 8080,
|
||||
"http_port": 5700,
|
||||
"token": ""
|
||||
},
|
||||
{
|
||||
"adapter": "aiocqhttp",
|
||||
"enable": false,
|
||||
"host": "127.0.0.1",
|
||||
"port": 8080
|
||||
},
|
||||
{
|
||||
"adapter": "qq-botpy",
|
||||
"enable": false,
|
||||
"appid": "",
|
||||
"secret": "",
|
||||
"intents": [
|
||||
"public_guild_messages",
|
||||
"direct_message"
|
||||
]
|
||||
}
|
||||
],
|
||||
```
|
||||
|
||||
目前支持 `mirai`、`go-cqhttp`、`aiocqhttp`、`qq-botpy` 四种消息平台适配器,也可以同时启用多个同种类或不同种类的平台适配器。
|
||||
各个适配器的配置方式请查看[部署教程](../deploy/config)。
|
||||
|
||||
### 多开示例
|
||||
|
||||
```json
|
||||
"platform-adapters": [
|
||||
{
|
||||
"adapter": "yiri-mirai",
|
||||
"enable": true,
|
||||
"host": "127.0.0.1",
|
||||
"port": 8080,
|
||||
"verifyKey": "yirimirai",
|
||||
"qq": 123456789
|
||||
},
|
||||
{
|
||||
"adapter": "nakuru",
|
||||
"enable": true,
|
||||
"host": "127.0.0.1",
|
||||
"ws_port": 8081,
|
||||
"http_port": 5701,
|
||||
"token": "token"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
## 跟踪内容函数调用 track-function-calls
|
||||
|
||||
```json
|
||||
"track-function-calls": true,
|
||||
```
|
||||
|
||||
是否跟踪内容函数调用过程,如果开启了,在对话中调用的内容函数记录也会发给用户
|
||||
|
||||
关闭后(false)仅会发给用户最终结果
|
||||
|
||||
> 内容函数功能请查看插件功能文档。
|
||||
|
||||
|
||||
## 引用原消息 quote-origin
|
||||
|
||||
```json
|
||||
"quote-origin": false,
|
||||
```
|
||||
|
||||
在群内回复时是否引用原消息
|
||||
|
||||
## 是否at原用户 at-sender
|
||||
|
||||
```json
|
||||
"at-sender": false,
|
||||
```
|
||||
|
||||
在群内回复时是否at原用户
|
||||
|
||||
## 强制消息延迟范围 force-delay
|
||||
|
||||
```json
|
||||
"force-delay": [0, 0],
|
||||
```
|
||||
|
||||
在将响应内容发回给用户前的强制消息延迟时间范围,以防风控,单位是秒。
|
||||
|
||||
## 长消息处理策略 long-text-process
|
||||
|
||||
```json
|
||||
"long-text-process": {
|
||||
"threshold": 256,
|
||||
"strategy": "forward",
|
||||
"font-path": ""
|
||||
},
|
||||
```
|
||||
|
||||
`threshold`:阈值,文字长度大于此值的消息会使用长消息处理策略
|
||||
|
||||
`strategy`:长消息处理策略,目前支持forward(转发消息组件)和image(文字转图片)
|
||||
|
||||
`font-path`: image的渲染字体。未设置时,如果在windows下,会尝试寻找系统的微软雅黑字体,若找不到,则转为forward策略。未设置时,若不是windows系统,则直接转为forward策略。
|
||||
|
||||
## 向用户隐藏AI接口的异常信息 hide-exception-info
|
||||
|
||||
```
|
||||
"hide-exception-info": true
|
||||
```
|
||||
|
||||
是否向用户隐藏AI的异常信息,如果为true,当请求AI接口出现异常时,会返回一个错误的提示给用户。而把报错详情输出在控制台。
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: provider.json 配置文件
|
||||
title: provider.json 配置项
|
||||
icon: config
|
||||
order: 3
|
||||
author: RockChinQ
|
||||
date: 2024-02-18
|
||||
category:
|
||||
- 配置文件
|
||||
---
|
||||
|
||||
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
`data/config/provider.json` 中配置AI接口提供商相关的配置项。
|
||||
|
||||
## 启用聊天功能 enable-chat
|
||||
|
||||
```json
|
||||
"enable-chat": true,
|
||||
```
|
||||
|
||||
`enable-chat`:是否开启AI聊天功能
|
||||
|
||||
## OpenAI 接口配置 openai-config
|
||||
|
||||
```json
|
||||
"openai-config": {
|
||||
"api-keys": [
|
||||
"sk-1234567890"
|
||||
],
|
||||
"base_url": "https://api.openai.com/v1",
|
||||
"chat-completions-params": {
|
||||
"model": "gpt-3.5-turbo"
|
||||
},
|
||||
"request-timeout": 120
|
||||
},
|
||||
```
|
||||
|
||||
`api-keys`:以列表的形式设置若干个api key
|
||||
|
||||
`base_url`:设置接口地址,后面一定要加`/v1`
|
||||
|
||||
`model`:填写要使用的模型名称。通常来说直接填写模型名称即可,但如果要使用原生接口不是 ChatCompletion 但以 ChatCompletion 接口格式接入的模型,请在模型名称前方加一个 `OneAPI/` 前缀以进行区分。
|
||||
简单来说可以认为是:现阶段非 OpenAI 的模型接入都需要在模型名称前方加一个 `OneAPI/` 前缀。
|
||||
|
||||
例如:
|
||||
1. 通过 OneAPI 等中转服务接入了 OpenAI 的 `gpt-4` 模型,由于 `gpt-4` 也是使用 ChatCompletion 接口格式进行请求,则可以直接填入 `gpt-4`;
|
||||
2. 通过 OneAPI 等中转服务接入了 Google 的 `gemini-pro` 模型,由于 `gemini-pro` 原生接口格式并非 ChatCompletion,因此需要填入 `OneAPI/gemini-pro`。
|
||||
|
||||
|
||||
`request-timeout`:设置请求超时时间,以秒为单位,对于耗时较长的模型,建议设置较大值
|
||||
|
||||
## 情景预设(人格) prompt
|
||||
|
||||
```json
|
||||
"prompt-mode": "normal",
|
||||
"prompt": {
|
||||
"default": "如果用户之后想获取帮助,请你说”输入!help获取帮助“。"
|
||||
}
|
||||
```
|
||||
|
||||
`prompt-mode`:设置情景预设模式,值为`normal`(单预设模式)和`full-scenario`(完整历史对话模式)
|
||||
|
||||
`normal`时,使用下面的`prompt`,可设置多个
|
||||
|
||||
```json
|
||||
"prompt": {
|
||||
"default": "如果用户之后想获取帮助,请你说”输入!help获取帮助“。",
|
||||
"help": "如果用户之后想获取帮助,请你说”输入!help获取帮助“。"
|
||||
}
|
||||
```
|
||||
|
||||
在使用中通过`!default <预设名>`指令将其设为默认
|
||||
|
||||
### full-scenario模式配置方法
|
||||
|
||||
把完整的历史对话以文件形式添加到`data/scenario/`目录下,参考`data/scenario/default.json`
|
||||
|
||||
```json
|
||||
{
|
||||
"prompt": [
|
||||
{
|
||||
"role": "system",
|
||||
"content": "You are a helpful assistant. 如果我需要帮助,你要说“输入!help获得帮助”"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "好的,我是一个能干的AI助手。 如果你需要帮助,我会说“输入!help获得帮助”"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
`role` 为消息的角色,可以是`user`(用户)、`assistant`(AI)、`system`(系统)
|
||||
`content` 为字符串,表示消息内容。
|
||||
在使用中通过`!default <文件名>`指令将其设为默认
|
||||
@@ -0,0 +1,15 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: sensitive-words.json 配置文件
|
||||
title: sensitive-words.json 配置项
|
||||
icon: config
|
||||
order: 5
|
||||
author: RockChinQ
|
||||
date: 2024-02-18
|
||||
category:
|
||||
- 配置文件
|
||||
---
|
||||
|
||||
本地敏感词词库,参考 `data/config/sensitive-words.json` 内容进行修改即可。
|
||||
@@ -0,0 +1,95 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: system.json 配置文件
|
||||
title: system.json 配置项
|
||||
icon: config
|
||||
order: 6
|
||||
author: RockChinQ
|
||||
date: 2024-02-18
|
||||
category:
|
||||
- 配置文件
|
||||
---
|
||||
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
|
||||
|
||||
`data/config/system.json` 中配置系统设置,如管理员、网络代理、是否上报遥测数据供开发者分析、日志等级、会话消息处理并发数、流水线消息处理并发数、帮助消息等
|
||||
|
||||
## 管理员会话 admin-sessions
|
||||
|
||||
```json
|
||||
"admin-sessions": [],
|
||||
```
|
||||
|
||||
`admin-sessions`:设置管理员会话,格式为 {type}_{id},type 为 "group" 或 "person",如:
|
||||
|
||||
```json
|
||||
"admin-sessions": ["group_123456789", "person_123456789"],
|
||||
```
|
||||
|
||||
## 网络代理 network-proxies
|
||||
|
||||
```json
|
||||
"network-proxies": {
|
||||
"http": null,
|
||||
"https": null
|
||||
},
|
||||
```
|
||||
|
||||
`network-proxies`:设置网络代理,为正向代理,http和https都要填,例如
|
||||
|
||||
```json
|
||||
"network-proxies": {
|
||||
"http": 127.0.0.1:7890,
|
||||
"https": 127.0.0.1:7890
|
||||
},
|
||||
```
|
||||
|
||||
正向代理也可以用环境变量设置:http_proxy 和 https_proxy
|
||||
|
||||
## 上报遥测数据 report-usage
|
||||
|
||||
```json
|
||||
"report-usage": true,
|
||||
```
|
||||
|
||||
`report-usage`:是否上报遥测数据供开发者分析,不包含敏感信息
|
||||
|
||||
## 日志等级 logging-level
|
||||
|
||||
```json
|
||||
"logging-level": "info",
|
||||
```
|
||||
|
||||
`logging-level`:暂时没用,现在只能通过环境变量 DEBUG=true 来设置调试日志输出
|
||||
|
||||
## 会话消息处理并发数 session-concurrency
|
||||
|
||||
```json
|
||||
"session-concurrency": {
|
||||
"default": 1
|
||||
},
|
||||
```
|
||||
|
||||
`session-concurrency`:会话消息处理并发数,粒度是每个会话,session格式为 {type}_{id},未指定的session使用 default 配置
|
||||
|
||||
## 流水线消息处理并发数 pipeline-concurrency
|
||||
|
||||
```json
|
||||
"pipeline-concurrency": 20,
|
||||
```
|
||||
|
||||
`pipeline-concurrency`:流水线消息处理并发数,粒度是整个程序,目前使用 FCFS 算法调度各个请求。
|
||||
|
||||
## 帮助消息 help-message
|
||||
|
||||
```json
|
||||
"help-message": "QChatGPT - 😎高稳定性、🧩支持插件、🌏实时联网的 ChatGPT QQ 机器人🤖\n链接:https://q.rkcn.top"
|
||||
```
|
||||
|
||||
`help-message`:帮助消息,用户发送 !help 命令时的输出
|
||||
+18
-24
@@ -4,41 +4,35 @@ head:
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人教程,QChatGPT项目部署教程
|
||||
title: 部署教程
|
||||
icon: info
|
||||
author: Lazy,ikun
|
||||
date: 2023-10-28
|
||||
category:
|
||||
- 部署教程
|
||||
icon: blog
|
||||
author: Lazy
|
||||
date: 2024-02-18
|
||||
index: false
|
||||
---
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
## 手动部署(推荐)
|
||||
> 全平台通用,可以避免安装器部署失败的问题
|
||||
- [<HopeIcon icon="support" size="1.2em"/> 点击查看手动部署的具体操作](manual.md)
|
||||
## 部署教程:
|
||||
|
||||
## 自动化部署
|
||||
:::tip
|
||||
Windows首选[安装器](#windows),Linux首选[Docker](#docker)
|
||||
:::
|
||||
### 安装器(不推荐)
|
||||
> 部署过程最简单,但有一定失败概率
|
||||
## [第一步:部署QChatGPT](qchatgpt/)
|
||||
|
||||
安装器可在Windows和Linux平台下使用
|
||||
- [<HopeIcon icon="windows" size="1.2em"/> 点击查看Windows的具体操作](auto-app-win.md)
|
||||
### [👉部署QChatGPT的教程👈](qchatgpt/)
|
||||
|
||||
- [<HopeIcon icon="linux" size="1.2em"/> 点击查看Linux的具体操作](auto-app-linux.md)
|
||||
### Docker(Linux推荐)
|
||||
> docker方式较为复杂,若您不熟悉docker的操作及相关知识,强烈建议您使用其他方式部署,我们不会且难以解决您主机上多个容器的连接问题。
|
||||
- [<HopeIcon icon="warn" size="1.2em"/> 点击查看Docker部署的具体操作](auto-docker.md)
|
||||
## [第二步:部署消息平台](platforms/)
|
||||
|
||||
### 👉[部署消息平台的教程👈](platforms/)
|
||||
|
||||
## [第三步:填写配置信息](config.md)
|
||||
|
||||
### 👉[填写配置信息的教程](config.md)👈
|
||||
|
||||
## 本项目交流 QQ 群
|
||||
|
||||
### 社区群
|
||||
|
||||
Lazy的交流群二:738382634 [链接](https://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=T8rXTa9K4Iypw7pKzLqshQ9Yaumey0lz&authKey=yKfFqnoWk2diU73tEqLnKeqhR0%2BKzB9rOVa0dIjUqm6SOlJvZWNp3XmkkPENmw9m&noverify=0&group_code=738382634)
|
||||
Lazy的交流群一:891448839(已满)
|
||||
|
||||
Lazy的交流群二:738382634(已满)
|
||||
|
||||
Lazy的交流群三:248432104
|
||||
|
||||
### 官方群
|
||||
|
||||
|
||||
@@ -1,158 +0,0 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人教程,QChatGPT项目部署教程
|
||||
title: 安装器部署(Linux)(不推荐,已经长时间未维护)
|
||||
icon: linux
|
||||
order: Lazy,ikun
|
||||
date: 2023-10-28
|
||||
category:
|
||||
- 部署教程
|
||||
---
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
:::tip 建议配合视频使用
|
||||
<BiliBili bvid="BV11h4y1y74H" />
|
||||
:::
|
||||
|
||||
## 第一步:下载安装器文件
|
||||
|
||||
在根目录输入以下指令创建一个文件夹(bot 为文件夹的名字,随便起)
|
||||
|
||||
```terminal
|
||||
mkdir bot
|
||||
```
|
||||
|
||||
然后输入指令进入 bot 文件夹(bot 切换为你起的名字)
|
||||
|
||||
```terminal
|
||||
cd bot
|
||||
```
|
||||
|
||||
创建一个 screen 窗口,命名为 bot,可以随便
|
||||
|
||||
```terminal
|
||||
screen -S bot
|
||||
```
|
||||
|
||||
然后输入以下指令下载安装器文件
|
||||
|
||||
```terminal
|
||||
wget https://github.com/RockChinQ/qcg-installer/releases/download/v0.13.2/qcg-installer-linux-amd64
|
||||
```
|
||||
|
||||
## 第二步:运行安装器
|
||||
|
||||
依次执行以下命令
|
||||
|
||||
```terminal
|
||||
sudo chmod -R 777 qcg-installer-linux-amd64
|
||||
```
|
||||
|
||||
```terminal
|
||||
./qcg-installer-linux-amd64
|
||||
```
|
||||
|
||||
耐心等待,可能需要半个小时,直至如图界面
|
||||
|
||||

|
||||
|
||||
输入你的 api_key 并回车,然后输机器人 QQ 号再回车
|
||||
|
||||
## 第三步:配置签名服务器
|
||||
|
||||
打开这个网页,点击 release,点击下载 zip 压缩包
|
||||
|
||||
[https://github.com/MrXiaoM/qsign](https://github.com/MrXiaoM/qsign)
|
||||
|
||||
将下载好的压缩包解压后里面会有两个文件夹,其中 plugins 文件夹里面的 jar 包上传到 mirai 文件夹下的 plugins 文件夹
|
||||
|
||||

|
||||
|
||||
txlib 文件夹上传到 mirai 文件夹下
|
||||
|
||||

|
||||
|
||||
## 第四步:登录
|
||||
|
||||
手机上打开这个网页
|
||||
|
||||
[https://github.com/KasukuSakura/mirai-login-solver-sakura](https://github.com/KasukuSakura/mirai-login-solver-sakura)
|
||||
|
||||
点击 release,点击下载 apk-release.apk 文件,然后安装
|
||||
|
||||
返回到 FinalShell,输入以下指令
|
||||
|
||||
```terminal
|
||||
./run-mirai.sh
|
||||
```
|
||||
|
||||
耐心等待,然后输入,其中 123456 是替换为你机器人的 QQ 号,67890 替换为你机器人 QQ 的密码
|
||||
|
||||
```terminal
|
||||
login 12345 67890
|
||||
```
|
||||
|
||||
回车后可以看到这些提示
|
||||
|
||||

|
||||
|
||||
输入这个命令并回车
|
||||
|
||||
```terminal
|
||||
TxCaptchaHelper
|
||||
```
|
||||
|
||||
然后可以看到提示要在手机端输入请求码,这时打开刚才手机上安装的软件,输入请求码,点击下一步,验证完成后,可以在 FinalShell 上看到提示是否要发送验证码
|
||||
|
||||

|
||||
|
||||
输入指令并回车
|
||||
|
||||
```terminal
|
||||
yes
|
||||
```
|
||||
|
||||
稍后填入手机收到的验证码
|
||||
|
||||
这时可以看到就登录成功了
|
||||
|
||||
点击蓝色界面,然后按快捷键 CTRL+a+c(先按下 ctrl+a 不放,再按 c),可以看到新建了一个窗口,输入指令
|
||||
|
||||
```terminal
|
||||
./run-bot.sh
|
||||
```
|
||||
|
||||
然后会提示输入管理员 QQ
|
||||
|
||||
然后就可以成功与机器人对话了,私聊直接发信息,群聊需要@
|
||||
|
||||
## 第五步:反向代理
|
||||
|
||||
当然,目前使用仍然需要代理或要求你的服务器在国外,否则就会报超时错误,但是考虑到不一定有海外服务器或方便设置全局代理,我们可以通过设置反向代理来解决
|
||||
具体操作:打开QChatGPT文件夹下的config.py文件(可以用记事本或VScode等任何代码编辑器)
|
||||
找到这一行,在你填写API_Key的附近
|
||||
```
|
||||
"reverse_proxy": None
|
||||
```
|
||||
将这行代码改为
|
||||
```
|
||||
"reverse_proxy": "双引号里面写你的反代地址"
|
||||
```
|
||||
若使用[**本UP主**](https://space.bilibili.com/407410594)免费提供的反代地址请输入为`"reverse_proxy": "http://api.openai.lazyshare.top/v1"`,反代地址不一定长久有效,且用且珍惜
|
||||
设置完成后应是如图情况
|
||||

|
||||
然后记得保存,并重新运行run-bot
|
||||
|
||||
## 补充:Linux部署时报错
|
||||
|
||||
### GLIBC 2.XX缺乏
|
||||
通常此情况发生于基于Red Hat的系统,例如CentOS
|
||||
|
||||
这是由于glibc依赖版本不足导致的,此时并不建议去升级glibc。,glibc版本升级可能导致操作系统无法使用,所以请务必谨慎操作,先在同版本操作系统系统模拟测试,将glibc新版本所依赖的软件完成升级后再行升级。
|
||||
|
||||
这种情况下,建议使用手动部署
|
||||
教程请看项目仓库,[点击跳转](./manual.md)
|
||||
@@ -1,101 +0,0 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人教程,QChatGPT项目部署教程
|
||||
title: 安装器部署(Win)(不推荐,长时间未维护)
|
||||
icon: windows
|
||||
order: 1
|
||||
author: Lazy,ikun
|
||||
date: 2023-09-30
|
||||
category:
|
||||
- 部署教程
|
||||
---
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
:::tip 建议配合视频使用
|
||||
<BiliBili bvid="BV14h4y1w7TC" />
|
||||
:::
|
||||
|
||||
|
||||
## 第一步:下载一键安装器
|
||||
|
||||
打开这个网页
|
||||
|
||||
[https://github.com/RockChinQ/qcg-installer](https://github.com/RockChinQ/qcg-installer)
|
||||
|
||||
点击 release,点击下载 exe 文件,保存到一个合适位置
|
||||
|
||||
双击刚才的 exe 文件,程序即可自动加载
|
||||
|
||||
如果速度过慢,可以关闭该窗口,删除多出来的 python 文件夹,在文件夹空白处右击,在终端中打开,输入以下指令
|
||||
|
||||
```terminal
|
||||
.\qcg-installer-windows-amd64.exe -p http://localhost:7890
|
||||
```
|
||||
|
||||
> 这里的 `http://localhost:7890` 是你的代理地址,请根据自己的情况修改。具体请参考 [qcg-installer](https://github.com/RockChinQ/qcg-installer)
|
||||
|
||||
耐心等待,程序将自动运行至提示输入OpenAI api_key,这时输入你的 api_key 并回车,获取 api_key 链接在这里
|
||||
|
||||
[https://platform.openai.com/account/api-keys](https://platform.openai.com/account/api-keys)
|
||||
|
||||
然后输入你机器人的 QQ 号并回车
|
||||
|
||||
## 第二步:配置签名服务器
|
||||
|
||||
打开这个网页,点击 release,点击下载 zip 压缩包
|
||||
|
||||
[https://github.com/MrXiaoM/qsign](https://github.com/MrXiaoM/qsign)
|
||||
|
||||
将下载好的压缩包解压后里面会有两个文件夹,其中 plugins 文件夹里面的 jar 包放到到 mirai 文件夹下的 plugins 文件夹,txlib 文件夹移动到 mirai 文件夹,如图所示
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 第三步:登录
|
||||
|
||||
手机上打开这个网页
|
||||
|
||||
[https://github.com/KasukuSakura/mirai-login-solver-sakura](https://github.com/KasukuSakura/mirai-login-solver-sakura)
|
||||
|
||||
点击 release,下载 apk-release.apk 文件,然后安装
|
||||
|
||||
双击 run-mirai.bat,耐心等待,然后输入,其中 123456 是替换为你机器人的 QQ 号,67890 替换为你机器人 QQ 的密码
|
||||
|
||||
```terminal
|
||||
login 12345 67890
|
||||
```
|
||||
|
||||
然后输入
|
||||
|
||||
```terminal
|
||||
TxCaptchaHelper
|
||||
```
|
||||
|
||||
回车后可以看到弹窗提示,点击第二个,弹出二维码,打开手机刚才下载的软件,点击扫描二维码,验证完成后,可以看到电脑提示验证,选择短信验证,然后输入收到的验证码,点击确定即可成功登录
|
||||
如果没有弹窗提示,可以看到终端提示要在手机端输入识别码,打开手机刚才下载的软件,输入,验证通过后,可以看到电脑提示要发送短信验证码,输入` yes `后回车,然后输入手机收到的短信验证码,回车后就可以看到登录成功了
|
||||
|
||||
然后点击 run-bot.bat,可以看到提示登录成功了,这时就可以给你的机器人发送消息了,私聊直接发送,群聊需要@
|
||||
## 第四步:反向代理
|
||||
|
||||
当然,目前使用仍然需要全局代理,但考虑到总是全局代理不方便,我们可以通过设置反向代理来解决
|
||||
具体操作:打开QChatGPT文件夹下的config.py文件(可以用记事本或VScode等任何代码编辑器)
|
||||
找到这一行,在你填写API_Key的附近
|
||||
```
|
||||
"reverse_proxy": None
|
||||
```
|
||||
将这行代码改为
|
||||
```
|
||||
"reverse_proxy": "双引号里面写你的反代地址"
|
||||
```
|
||||
若使用[**本UP主**](https://space.bilibili.com/407410594)免费提供的反代地址请输入为`"reverse_proxy": "http://api.openai.lazyshare.top/v1"`,反代地址不一定长久有效,且用且珍惜
|
||||
设置完成后应是如图情况
|
||||

|
||||
然后记得保存,并重新运行run-bot
|
||||
|
||||
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人教程,QChatGPT项目部署教程
|
||||
title: Docker部署(仅推荐在Linux上使用)
|
||||
icon: warn
|
||||
order: 4
|
||||
author: Lazy,ikun
|
||||
date: 2023-10-28
|
||||
category:
|
||||
- 部署教程
|
||||
---
|
||||
|
||||
|
||||
:::warning
|
||||
请您确保您**确实**需要 Docker 部署,您**必须**具有以下能力:
|
||||
- 了解 `Docker` 和 `Docker Compose` 的使用
|
||||
- 了解容器间网络通信配置方式
|
||||
- 了解容器文件挂载机制
|
||||
- 了解容器调试操作
|
||||
- 动手能力强、资料查找能力强
|
||||
|
||||
若您不完全具有以上能力,请勿使用 Docker 部署,由于误操作导致的配置不正确,我们将不会解答您的问题并不负任何责任。
|
||||
**非常不建议**您在除 Linux 之外的系统上使用 Docker 进行部署。
|
||||
:::
|
||||
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
## 概览
|
||||
|
||||
QChatGPT 主程序需要连接`QQ登录框架`以与QQ通信,您可以选择 [Mirai](https://github.com/mamoe/mirai)(还需要配置mirai-api-http,请查看此仓库README中手动部署部分) 或 [go-cqhttp](https://github.com/Mrs4s/go-cqhttp),我们仅发布 QChatGPT主程序 的镜像,您需要自行配置QQ登录框架(可以参考[README.md](https://github.com/RockChinQ/QChatGPT#-%E9%85%8D%E7%BD%AEqq%E7%99%BB%E5%BD%95%E6%A1%86%E6%9E%B6)中的教程,或自行寻找其镜像)并在 QChatGPT 的配置文件中设置连接地址。
|
||||
|
||||
> **Note**
|
||||
> 请先确保 Docker 和 Docker Compose 已安装
|
||||
|
||||
## 准备文件
|
||||
|
||||
> QChatGPT 目前暂不可以在没有配置模板文件的情况下自动生成文件,您需要按照以下步骤手动创建需要挂载的文件。
|
||||
> 如无特殊说明,模板文件均在此仓库中。
|
||||
|
||||
> 如果您不想挨个创建,也可以直接clone本仓库到本地,执行`python main.py`后即可自动根据模板生成所需文件。
|
||||
|
||||
现在请在一个空目录创建以下文件或目录:
|
||||
|
||||
### 📄`config.py`
|
||||
|
||||
复制根目录的`config-template.py`所有内容,创建`config.py`并根据其中注释进行修改。
|
||||
|
||||
### 📄`banlist.py`
|
||||
|
||||
复制`res/templates/banlist-template.py`所有内容,创建`banlist.py`,这是黑名单配置文件,根据需要修改。
|
||||
|
||||
### 📄`cmdpriv.json`
|
||||
|
||||
复制`res/templates/cmdpriv-template.json`所有内容,创建`cmdpriv.json`,这是各命令的权限配置文件,根据需要修改。
|
||||
|
||||
### 📄`sensitive.json`
|
||||
|
||||
复制`res/templates/sensitive-template.json`所有内容,创建`sensitive.json`,这是敏感词配置,根据需要修改。
|
||||
|
||||
### 📄`tips.py`
|
||||
|
||||
复制`tips-custom-template.py`所有内容,创建`tips.py`,这是部分提示语的配置,根据需要修改。
|
||||
|
||||
## 运行
|
||||
|
||||
已预先准备好`docker-compose.yaml`,您需要根据您的网络配置进行适当修改,使容器内的 QChatGPT 程序可以正常与 Mirai 或 go-cqhttp 通信。
|
||||
|
||||
将`docker-compose.yaml`复制到本目录,根据网络环境进行配置,并执行:
|
||||
|
||||
```bash
|
||||
docker compose up
|
||||
```
|
||||
|
||||
若无报错即配置完成,您可以Ctrl+C关闭后使用`docker compose up -d`将其置于后台运行
|
||||
|
||||
## 注意
|
||||
|
||||
- 安装的插件都会保存在`plugins`(映射到本目录`plugins`),安装插件时可能会自动安装相应的依赖,此时若`重新创建`容器,已安装的插件将被加载,但所需的增量依赖并未安装,会导致引入问题。您可以删除插件目录后重启,再次安装插件,以便程序可以自动安装插件所需依赖。
|
||||
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人教程,QChatGPT项目部署教程
|
||||
title: 填写配置信息
|
||||
icon: class
|
||||
author: Lazy
|
||||
date: 2024-02-18
|
||||
---
|
||||
|
||||
修改以下配置文件即可启用 QChatGPT 的基本功能,更多的配置项详解请查看[配置详解](../config/)。
|
||||
|
||||
- `data/config/platform.json`
|
||||
- `data/config/provider.json`
|
||||
|
||||
## platform.json
|
||||
|
||||
修改此配置文件以指定需要连接的消息平台,只需要关注`platform-adapters`字段。
|
||||
目前支持 `mirai`、`go-cqhttp`、`aiocqhttp`、`qq-botpy` 四种消息平台适配器,也可以同时启用多个同种类或不同种类的平台适配器
|
||||
|
||||
### YiriMirai 适配器
|
||||
|
||||
用于接入 Mirai。
|
||||
|
||||
```json
|
||||
{
|
||||
"adapter": "yiri-mirai",
|
||||
"enable": false,
|
||||
"host": "127.0.0.1",
|
||||
"port": 8080,
|
||||
"verifyKey": "yirimirai",
|
||||
"qq": 123456789
|
||||
},
|
||||
```
|
||||
|
||||
`"adapter": "yiri-mirai"`,无需动,表明是接入`mirai`的配置
|
||||
|
||||
`enable`:是否启用,配置完成后请将其设为`true`
|
||||
|
||||
`host`:运行 mirai 的主机地址,一般不改动
|
||||
|
||||
`port`:设置端口,默认8080,与`mirai-api-http`里面设置的保持一致
|
||||
|
||||
`verifyKey`:密钥,默认yirimirai,与`mirai-api-http`里面设置的保持一致
|
||||
|
||||
`qq`:设置机器人QQ号,与当前mirai登录的机器人的QQ号保持一致
|
||||
|
||||
### Nakuru 适配器
|
||||
|
||||
用于接入 go-cqhttp。
|
||||
|
||||
```json
|
||||
{
|
||||
"adapter": "nakuru",
|
||||
"enable": false,
|
||||
"host": "127.0.0.1",
|
||||
"ws_port": 8080,
|
||||
"http_port": 5700,
|
||||
"token": ""
|
||||
},
|
||||
```
|
||||
|
||||
`"adapter": "nakuru"`,无需动,表明是接入`go-cqhttp`的配置
|
||||
|
||||
`enable`:是否启用,配置完成后请将其设为`true`
|
||||
|
||||
`host`:运行 go-cqhttp 的主机地址,一般不改动
|
||||
|
||||
`ws_port`:正向WS服务器监听地址,与`go-cqhttp`的`config.yml`里面的保持一致
|
||||
|
||||
`http_port`:http服务器监听地址,与`go-cqhttp`的`config.yml`里面的保持一致
|
||||
|
||||
`token`:验证密钥,,与`go-cqhttp`的`config.yml`里面的保持一致
|
||||
|
||||
### aiocqhttp 适配器
|
||||
|
||||
用于接入 Shamrock 等兼容 OneBot 协议的机器人框架(仅支持反向ws)。
|
||||
|
||||
```json
|
||||
{
|
||||
"adapter": "aiocqhttp",
|
||||
"enable": false,
|
||||
"host": "127.0.0.1",
|
||||
"port": 8080
|
||||
},
|
||||
```
|
||||
|
||||
`"adapter": "aiocqhttp"`,无需动,表示是接入`shamrock等onebot协议实现的机器人框架`的配置
|
||||
|
||||
`enable`:是否启用,配置完成后请将其设为`true`
|
||||
|
||||
`host`:监听的 IP 地址,使用 aiocqhttp 时,QChatGPT 作为服务端被动等待框架连接,请在 Shamrock 等框架中设置为运行 QChatGPT 的主机的 IP 地址,如果是同一个主机,保持设置为 `127.0.0.1` 即可
|
||||
|
||||
`port`:设置监听的端口,默认8080,需在 Shamrock 等框架中设置为与此处一致的端口
|
||||
|
||||
### qq-botpy 适配器
|
||||
|
||||
用于接入 QQ 官方机器人 API。
|
||||
|
||||
```json
|
||||
{
|
||||
"adapter": "qq-botpy",
|
||||
"enable": false,
|
||||
"appid": "",
|
||||
"secret": "",
|
||||
"intents": [
|
||||
"public_guild_messages",
|
||||
"direct_message"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
`"adapter": "qq-botpy"`,无需动,表明是接入`QQ官方机器人`的配置
|
||||
|
||||
`enable`:是否启用,配置完成后请将其设为`true`
|
||||
|
||||
`appid`:申请到的QQ官方机器人的appid
|
||||
|
||||
`secret`:申请到的QQ官方机器人的secret
|
||||
|
||||
`intents`:控制监听的事件类型:`public_guild_messages` 频道消息`direct_message` 频道私聊消息 `public_messages` Q群消息(需要权限)
|
||||
|
||||
## provider.json
|
||||
|
||||
修改此配置文件以设置所连接的 AI 提供商的相关信息,仅讲解必要的配置项,更多的配置项详解请查看[配置详解](../config/)。
|
||||
|
||||
```json
|
||||
"openai-config": {
|
||||
"api-keys": [
|
||||
"sk-1234567890"
|
||||
],
|
||||
"base_url": "https://api.openai.com/v1",
|
||||
"chat-completions-params": {
|
||||
"model": "gpt-3.5-turbo"
|
||||
},
|
||||
"request-timeout": 120
|
||||
},
|
||||
```
|
||||
|
||||
`api-keys`:支持以列表的形式设置若干个api key,例如:
|
||||
|
||||
```json
|
||||
"api-keys": [
|
||||
"sk-1234567890",
|
||||
"sk-23452354253",
|
||||
"sk-2352453674"
|
||||
],
|
||||
```
|
||||
|
||||
`base_url`:设置接口地址,如果你从第三方购买了key,或者需要使用反向代理时才需要修改这个参数,后面一定要加`/v1`
|
||||
|
||||
`model`:填写要使用的模型名称。通常来说直接填写模型名称即可,但如果要使用原生接口不是 ChatCompletion 但以 ChatCompletion 接口格式接入的模型,请在模型名称前方加一个 `OneAPI/` 前缀以进行区分。
|
||||
简单来说可以认为是:现阶段非 OpenAI 的模型接入都需要在模型名称前方加一个 `OneAPI/` 前缀。
|
||||
|
||||
例如:
|
||||
1. 通过 OneAPI 等中转服务接入了 OpenAI 的 `gpt-4` 模型,由于 `gpt-4` 也是使用 ChatCompletion 接口格式进行请求,则可以直接填入 `gpt-4`;
|
||||
2. 通过 OneAPI 等中转服务接入了 Google 的 `gemini-pro` 模型,由于 `gemini-pro` 原生接口格式并非 ChatCompletion,因此需要填入 `OneAPI/gemini-pro`。
|
||||
|
||||
`request-timeout`:设置请求超时时间,以秒为单位,对于耗时较长的模型(如GPT4),建议设置较大值
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: QChatGPT的登录教程
|
||||
title: 登录教程
|
||||
icon: tree
|
||||
order: 1
|
||||
author: Lazy
|
||||
date: 2023-12-20
|
||||
category:
|
||||
- 登录教程
|
||||
---
|
||||
|
||||
<AutoCatalog base='/posts/deploy/manual-deploy-details/'/>
|
||||
@@ -1,94 +0,0 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人教程,QChatGPT项目部署教程
|
||||
title: 手动部署(推荐,可以在所有平台上使用)
|
||||
icon: support
|
||||
order: 3
|
||||
author: Lazy.ikun.RockChinQ
|
||||
date: 2023-10-29
|
||||
category:
|
||||
- 部署教程
|
||||
---
|
||||
:::warning
|
||||
请使用Python 3.9.x以上版本,**注意不要使用3.12.x版本**,没有Python的需自行安装,参考[此教程](./manual-deploy-details/python.md)
|
||||
:::
|
||||
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
## 配置QQ登录框架
|
||||
|
||||
目前支持mirai和go-cqhttp和OpenShamrock(未来的可能方案),配置任意一个即可
|
||||
|
||||
<details>
|
||||
<summary>mirai</summary>
|
||||
|
||||
1. 按照[此教程](./manual-deploy-details/yirimirai.md)配置Mirai及mirai-api-http
|
||||
2. 启动mirai-console后,保持mirai-console运行状态
|
||||
3. 在下一步配置主程序时请在config.py中将`msg_source_adapter`设为`yirimirai`
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>go-cqhttp</summary>
|
||||
|
||||
1. 按照[此文档](./manual-deploy-details/gocq.md)配置go-cqhttp
|
||||
2. 启动go-cqhttp,确保登录成功,保持运行
|
||||
3. 在下一步配置主程序时请在config.py中将`msg_source_adapter`设为`nakuru`
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>OpenShamrock(未来的可能方案)</summary>
|
||||
|
||||
详细见[此文档](./manual-deploy-details/shamrock.md)
|
||||
|
||||
</details>
|
||||
|
||||
## 配置主程序
|
||||
|
||||
1. 克隆此项目(按照下方命令,需要安装 Git) 或 前往[Release](https://github.com/RockChinQ/QChatGPT/releases)页面下载最新版本的压缩包(推荐)并解压
|
||||
|
||||
```bash
|
||||
git clone https://github.com/RockChinQ/QChatGPT
|
||||
cd QChatGPT
|
||||
```
|
||||
|
||||
2. 安装依赖
|
||||
|
||||
```bash
|
||||
pip3 install -r requirements.txt
|
||||
```
|
||||
|
||||
或者使用清华源
|
||||
|
||||
```bash
|
||||
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
|
||||
```
|
||||
|
||||
3. 运行一次主程序,生成配置文件
|
||||
|
||||
```bash
|
||||
python3 main.py
|
||||
```
|
||||
|
||||
4. 编辑配置文件`config.py`
|
||||
|
||||
按照文件内注释填写配置信息,或者阅读[此页面](../config-intro.md)来学习如何配置信息
|
||||
|
||||
> Tips: 大多数情况下,你只需关注qq小号,OpenAI Key的配置和管理员QQ号的配置
|
||||
|
||||
5. 运行主程序
|
||||
|
||||
```bash
|
||||
python3 main.py
|
||||
```
|
||||
|
||||
> 如果输入上面的指令无反应,并且你确认你已经装了python,则输入`python main.py`
|
||||
|
||||
无报错信息即为运行成功
|
||||
|
||||
当你成功运行后,你需要开始阅读[此页面](../config-intro.md)
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人教程,QChatGPT项目部署教程
|
||||
title: 消息平台部署教程
|
||||
icon: merge
|
||||
author: Lazy
|
||||
date: 2023-02-17
|
||||
index: false
|
||||
---
|
||||
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
## 可选的平台
|
||||
|
||||
以下平台任选,也可以配置多个,QChatGPT支持同时接入一个或多个平台:
|
||||
|
||||
- Mirai(QQ):[Mirai部署教程](mirai.md)
|
||||
- go-cqhttp(QQ):[go-cqhttp部署教程](gocq.md)
|
||||
- Shamrock(QQ):[Shamrock部署教程](shamrock.md)
|
||||
- QQ官方机器人(QQ频道):[QQ 官方 API 部署教程](official.md)
|
||||
|
||||
## 本项目交流 QQ 群
|
||||
|
||||
### 社区群
|
||||
|
||||
Lazy的交流群一:891448839(已满)
|
||||
|
||||
Lazy的交流群二:738382634(已满)
|
||||
|
||||
Lazy的交流群三:248432104
|
||||
|
||||
### 官方群
|
||||
|
||||
> 官方群不解答部署问题
|
||||
|
||||
四群:195992197 [链接](https://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=cSekvWmyezfCE4O8gXS7lSjkmPinjzpP&authKey=G4jHfz2%2BtQawxCRhn1ZRrQiI8bTvlepQubZL6F9fymFuz8jqZZ4FkYh6lhKLMCd9&noverify=0&group_code=195992197)
|
||||
+10
-9
@@ -3,8 +3,8 @@ head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: Go-cqhttp的部署教程
|
||||
title: Go-cqhttp的部署教程
|
||||
icon: support
|
||||
title: 部署消息平台go-cqhttp的教程
|
||||
icon: state
|
||||
order: 3
|
||||
author: Anonymous
|
||||
date: 2023-12-21
|
||||
@@ -12,13 +12,9 @@ category:
|
||||
- 部署教程
|
||||
---
|
||||
|
||||
# 配置go-cqhttp用于登录QQ
|
||||
> 本文档仅为基本步骤,详细操作、答疑解惑及最新信息请前往[go-cqhttp官方文档](https://docs.go-cqhttp.org/)。
|
||||
|
||||
> 若您是从旧版本升级到此版本以使用go-cqhttp的用户,请您按照`config-template.py`的内容修改`config.py`,添加`msg_source_adapter`配置项并将其设为`nakuru`,同时添加`nakuru_config`字段按照说明配置。
|
||||
|
||||
## 步骤
|
||||
|
||||
### 下载go-cqhttp
|
||||
## 下载go-cqhttp
|
||||
|
||||
从[go-cqhttp的Release](https://github.com/Mrs4s/go-cqhttp/releases/latest)下载最新的go-cqhttp可执行文件(建议直接下载可执行文件压缩包,而不是安装器)
|
||||
|
||||
@@ -127,4 +123,9 @@ ticket 后那一坨就是要输入回 mirai 的内容,但不包括首尾的双
|
||||
|
||||

|
||||
|
||||
> 若启动后登录不成功,请尝试根据[此文档](https://docs.go-cqhttp.org/guide/config.html#%E8%AE%BE%E5%A4%87%E4%BF%A1%E6%81%AF)修改`device.json`的协议编号。
|
||||
> 若启动后登录不成功,请尝试根据[此文档](https://docs.go-cqhttp.org/guide/config.html#%E8%AE%BE%E5%A4%87%E4%BF%A1%E6%81%AF)修改`device.json`的协议编号。
|
||||
|
||||
|
||||
## 后续步骤
|
||||
|
||||
查看填写配置信息页,通过 Nakuru 或 aiocqhttp 适配器接入。
|
||||
+12
-6
@@ -3,7 +3,7 @@ head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: Yiri-mirai的部署教程
|
||||
title: Yiri-mirai的部署教程(QChatGPT)
|
||||
title: 部署消息平台mirai的教程
|
||||
icon: support
|
||||
order: 3
|
||||
author: Lazy
|
||||
@@ -12,7 +12,9 @@ category:
|
||||
- 部署教程
|
||||
---
|
||||
|
||||
## 第一步:准备工作
|
||||
> 本文档仅为基本步骤,详细操作、答疑解惑及最新信息请前往[Mirai官方代码库](https://github.com/mamoe/mirai)、[Mirai官方论坛](https://mirai.mamoe.net/)
|
||||
|
||||
## 准备工作
|
||||
|
||||
> 注意:由于网络环境多样复杂,很多步骤中,有可能需要使用网络魔法,懂的都懂
|
||||
|
||||
@@ -28,7 +30,7 @@ category:
|
||||
|
||||

|
||||
|
||||
## 第二步:安装 mirai-console
|
||||
## 安装 mirai-console
|
||||
|
||||
在 [mcl-installer 的 releases 页面](https://github.com/iTXTech/mcl-installer/releases)下载对应版本的安装包,找到最新的安装包,即有“Latest”标志的安装包,点击`show all 14 assets`,下载 mcl-installer-X.X.X-windows-amd64.exe,如图,则下载`mcl-installer-1.0.7-windows-amd64.exe`,保存在刚才创建的`mirai文件夹`中
|
||||

|
||||
@@ -46,7 +48,7 @@ category:
|
||||

|
||||
当出现上面的一行绿字时,说明安装完成,到这里输入 exit,回车退出
|
||||
|
||||
## 第三步:安装 mirai-api-http
|
||||
## 安装 mirai-api-http
|
||||
|
||||
打开 `mcl.cmd`,输入`mcl --update-package net.mamoe:mirai-api-http --channel stable-v2 --type plugin` ,回车
|
||||
|
||||
@@ -80,7 +82,7 @@ adapterSettings:
|
||||

|
||||
则 mirai-api-http 安装成功。
|
||||
|
||||
## 第四步:配置签名服务
|
||||
## 配置签名服务
|
||||
|
||||
在这个链接下载qsign一键签名包,点击下载最新的那个zip压缩包,如下图的`qsign-1.2.1-beta-dev-d62ddce-all.zip`【写于2023年12月19日】,[点我跳转下载页面](https://github.com/MrXiaoM/qsign/releases)
|
||||
|
||||
@@ -112,7 +114,7 @@ adapterSettings:
|
||||
|
||||

|
||||
|
||||
## 第五步:运行mirai
|
||||
## 运行mirai
|
||||
|
||||
到这里,你已经安装并配置成功了,接下来,你就可以登录机器人QQ了
|
||||
|
||||
@@ -151,3 +153,7 @@ ticket 后那一坨就是要输入回 mirai 的内容,但不包括首尾的双
|
||||
然后回车,如果运气好的话,会提示你要收验证码,输入yes并回车,之后把验证码输入上去,然后回车即可成功登录了
|
||||
|
||||
如果运气不好,报错code=237了,建议换号
|
||||
|
||||
## 后续步骤
|
||||
|
||||
查看填写配置信息页,通过 YiriMirai 适配器接入。
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: QQ 官方机器人 API 使用教程
|
||||
title: 使用 QQ 官方机器人 API 的教程
|
||||
icon: support
|
||||
order: 4
|
||||
author: RockChinQ
|
||||
date: 2024-02-17
|
||||
category:
|
||||
- 部署教程
|
||||
---
|
||||
|
||||
QQ 官方 API 可以将机器人接入 QQ 频道 和 QQ 群,QQ 群 API 只有小部分人有资格使用(23年底参加 腾讯 QQ 机器人大赛),以下仅介绍 QQ 频道 API 的申请和使用。
|
||||
|
||||
## 注册 QQ 机器人
|
||||
|
||||
前往[QQ开放平台](https://q.qq.com/#/),找到下方的 QQ 机器人文档,按照指引注册 QQ 频道机器人。
|
||||
|
||||
## 获取凭证
|
||||
|
||||
注册完成后,前往机器人控制台,找到 开发设置,获取 `AppId(机器人ID)` 和 `AppSecret(机器人密钥)`,接下来进入填写配置信息步骤。
|
||||
+5
-32
@@ -3,25 +3,19 @@ head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: OpenShamrock的部署教程
|
||||
title: OpenShamrock的部署教程
|
||||
icon: support
|
||||
title: 部署消息平台shamrock的教程
|
||||
icon: mobile
|
||||
order: 3
|
||||
author: ikun
|
||||
date: 2023-12-21
|
||||
category:
|
||||
- 部署教程
|
||||
---
|
||||
|
||||
# OpenShamrock(未来可能的方向)
|
||||
|
||||
暂时只支持私聊回复,群聊正在适配中...
|
||||
> 本文档仅为基本步骤,详细操作、答疑解惑及最新信息请前往[OpenShamrock官方文档](https://whitechi73.github.io/OpenShamrock/)。
|
||||
|
||||
## OpenShamrock简介
|
||||
|
||||
Mirai、go-cqhttp 之类的是模拟 QQ 的协议进行通信,而 Shamrock 使用的是 安卓的 Hook 来操作 QQ 模拟点击,稳定性较高。
|
||||
|
||||
官方文档:https://whitechi73.github.io/OpenShamrock/
|
||||
|
||||
可选平台(or设备):
|
||||
|
||||
- 模拟器
|
||||
@@ -84,27 +78,6 @@ adb.exe -s 127.0.0.1:16384 forward tcp:5800 tcp:5800
|
||||
adb.exe -s 127.0.0.1:16384 forward tcp:5700 tcp:5700
|
||||
```
|
||||
|
||||
### 配置QChatGPT
|
||||
### 后续步骤
|
||||
|
||||
修改 `config.py`中对应的设置。
|
||||
|
||||
```python
|
||||
msg_source_adapter = "nakuru"
|
||||
|
||||
# [必需(与mirai二选一,取决于msg_source_adapter)]
|
||||
# 使用nakuru-project框架连接go-cqhttp的配置
|
||||
nakuru_config = {
|
||||
"host": "localhost", # go-cqhttp的地址
|
||||
"port": 5800, # go-cqhttp的正向websocket端口
|
||||
"http_port": 5700, # go-cqhttp的正向http端口
|
||||
"token": "" # 若在go-cqhttp的config.yml设置了access_token, 则填写此处
|
||||
}
|
||||
```
|
||||
|
||||
### 回到刚刚的手动部署文档查看后续步骤
|
||||
|
||||
### 测试
|
||||
|
||||
稍等片刻,运行QChatGPT主程序,如图,运行成功
|
||||
|
||||

|
||||
查看填写配置信息页,通过 aiocqhttp 适配器接入。
|
||||
@@ -0,0 +1,38 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人教程,QChatGPT项目部署教程
|
||||
title: QChatGPT部署教程
|
||||
icon: flow
|
||||
author: Lazy
|
||||
date: 2023-02-17
|
||||
index: false
|
||||
---
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
## 手动部署
|
||||
> 全平台通用,可以避免安装器部署失败的问题
|
||||
- [<HopeIcon icon="support" size="1.2em"/> 点击查看手动部署的具体操作](manual.md)
|
||||
|
||||
## Docker部署
|
||||
|
||||
- [<HopeIcon icon="support" size="1.2em"/> 点击查看Docker部署的具体操作](docker.md)
|
||||
|
||||
## 本项目交流 QQ 群
|
||||
|
||||
### 社区群
|
||||
|
||||
Lazy的交流群一:891448839(已满)
|
||||
|
||||
Lazy的交流群二:738382634(已满)
|
||||
|
||||
Lazy的交流群三:248432104
|
||||
|
||||
### 官方群
|
||||
|
||||
> 官方群不解答部署问题
|
||||
|
||||
四群:195992197 [链接](https://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=cSekvWmyezfCE4O8gXS7lSjkmPinjzpP&authKey=G4jHfz2%2BtQawxCRhn1ZRrQiI8bTvlepQubZL6F9fymFuz8jqZZ4FkYh6lhKLMCd9&noverify=0&group_code=195992197)
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人教程,QChatGPT项目部署教程
|
||||
title: Docker部署(仅推荐在Linux上使用)
|
||||
icon: stack
|
||||
order: 4
|
||||
author: Lazy,ikun
|
||||
date: 2023-10-28
|
||||
---
|
||||
|
||||
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
:::warning
|
||||
请您确保您**确实**需要 Docker 部署,您**必须**具有以下能力:
|
||||
- 了解 `Docker` 和 `Docker Compose` 的使用
|
||||
- 了解容器间网络通信配置方式
|
||||
- 了解容器文件挂载机制
|
||||
- 了解容器调试操作
|
||||
- 动手能力强、资料查找能力强
|
||||
|
||||
若您不完全具有以上能力,请勿使用 Docker 部署,由于误操作导致的配置不正确,我们将不会解答您的问题并不负任何责任。
|
||||
**不建议**您在除 Linux 之外的系统上使用 Docker 进行部署。
|
||||
:::
|
||||
|
||||
:::note
|
||||
请先确保 Docker 和 Docker Compose 已安装
|
||||
:::
|
||||
|
||||
以下是推荐的`docker-compose.yaml`模板,您可以根据自己的需求进行修改。
|
||||
|
||||
```yaml
|
||||
version: "3"
|
||||
|
||||
services:
|
||||
qchatgpt:
|
||||
image: rockchin/qchatgpt:latest
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
- ./plugins:/app/plugins
|
||||
restart: on-failure
|
||||
# 根据具体环境配置网络
|
||||
```
|
||||
|
||||
保存到一个目录的`docker-compose.yaml`,运行命令:
|
||||
|
||||
```bash
|
||||
docker compose up
|
||||
```
|
||||
|
||||
无报错即为启动成功,请查看`部署消息平台`部分以配置消息平台框架。
|
||||
|
||||
## 注意
|
||||
|
||||
- 安装的插件都会保存在`plugins`(映射到本目录`plugins`),安装插件时可能会自动安装相应的依赖,此时若`重新创建`容器,已安装的插件将被加载,但所需的增量依赖并未安装,会导致引入问题。您可以删除插件目录后重启,再次安装插件,以便程序可以自动安装插件所需依赖。
|
||||
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人教程,QChatGPT项目部署教程
|
||||
title: 手动部署(推荐,可以在所有平台上使用)
|
||||
icon: support
|
||||
order: 3
|
||||
author: Lazy
|
||||
date: 2023-02-17
|
||||
---
|
||||
:::warning
|
||||
请使用Python 3.9.x以上版本,**注意不要使用3.12.x版本**,没有Python的需自行安装,参考[此教程](./more-details/python.md)
|
||||
:::
|
||||
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
|
||||
|
||||
## 安装主程序
|
||||
|
||||
1. 克隆此项目(按照下方命令,需要安装 Git) 或 前往[Release](https://github.com/RockChinQ/QChatGPT/releases)页面下载最新版本的压缩包(推荐)并解压
|
||||
|
||||
```bash
|
||||
git clone https://github.com/RockChinQ/QChatGPT
|
||||
cd QChatGPT
|
||||
```
|
||||
|
||||
2. 安装依赖
|
||||
|
||||
```bash
|
||||
pip3 install -r requirements.txt
|
||||
```
|
||||
|
||||
或者使用清华源
|
||||
|
||||
```bash
|
||||
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
|
||||
```
|
||||
|
||||
3. 运行一次主程序,生成配置文件
|
||||
|
||||
```bash
|
||||
python3 main.py
|
||||
```
|
||||
|
||||
> 如果输入上面的指令无反应,并且你确认你已经装了python,则可以尝试使用`python main.py`,总之`python`是你启动的python的命令,可以使用 `python --version` 查看你的python版本。
|
||||
|
||||
提示如下信息
|
||||
|
||||
```
|
||||
|
||||
___ ___ _ _ ___ ___ _____
|
||||
/ _ \ / __| |_ __ _| |_ / __| _ \_ _|
|
||||
| (_) | (__| ' \/ _` | _| (_ | _/ | |
|
||||
\__\_\\___|_||_\__,_|\__|\___|_| |_|
|
||||
|
||||
⭐️开源地址: https://github.com/RockChinQ/QChatGPT
|
||||
📖文档地址: https://q.rkcn.top
|
||||
|
||||
以下文件不存在,已自动生成,请按需修改配置文件后重启:
|
||||
- plugins/__init__.py
|
||||
- plugins/plugins.json
|
||||
- data/config/command.json
|
||||
- data/config/pipeline.json
|
||||
- data/config/platform.json
|
||||
- data/config/provider.json
|
||||
- data/config/system.json
|
||||
- data/config/sensitive-words.json
|
||||
- data/scenario/default.json
|
||||
```
|
||||
|
||||
接下来请查看部署消息平台页。
|
||||
-2
@@ -8,8 +8,6 @@ icon: support
|
||||
order: 3
|
||||
author: Lazy
|
||||
date: 2023-12-18
|
||||
category:
|
||||
- 部署教程
|
||||
---
|
||||
|
||||
## 第一步:安装Python
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: QChatGPT的插件开发教程页面
|
||||
title: 插件开发
|
||||
icon: tree
|
||||
order: 1
|
||||
author: Lazy
|
||||
date: 2023-12-20
|
||||
category:
|
||||
- 插件使用
|
||||
---
|
||||
|
||||
<AutoCatalog base='/posts/devolop/'/>
|
||||
@@ -13,7 +13,7 @@ index: false
|
||||
---
|
||||
以下是QChatGPT实现原理等技术信息,贡献之前请仔细阅读
|
||||
|
||||
> 太久没更了,过时了,建议读源码,~~注释还挺全的~~
|
||||
> 此文档为 QChatGPT 2.x 的技术文档,已过时,3.x 版本请直接查看源码。
|
||||
> 请先阅读OpenAI API的相关文档 https://beta.openai.com/docs/ ,以下信息假定您已了解OpenAI模型的相关特性及其接口的调用方法。
|
||||
|
||||
## 术语
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人报错,QChatGPT项目部署报错
|
||||
title: 常见问题
|
||||
icon: tree
|
||||
author: Lazy
|
||||
date: 2023-09-30
|
||||
category:
|
||||
- 常见问题
|
||||
index: false
|
||||
---
|
||||
<AutoCatalog base='/posts/error/'/>
|
||||
+13
-209
@@ -14,48 +14,23 @@ category:
|
||||
|
||||
### 文字对话
|
||||
|
||||
- OpenAI GPT-3.5模型(ChatGPT API), 本项目原生支持, 默认使用
|
||||
- OpenAI GPT-3模型, 本项目原生支持, 部署完成后前往`config.py`切换
|
||||
- OpenAI GPT-4模型, 本项目原生支持, 目前需要您的账户通过OpenAI的内测申请, 请前往`config.py`切换
|
||||
- ChatGPT网页版GPT-3.5模型, 由[插件](https://github.com/RockChinQ/revLibs)接入
|
||||
- ChatGPT网页版GPT-4模型, 目前需要ChatGPT Plus订阅, 由[插件](https://github.com/RockChinQ/revLibs)接入
|
||||
- New Bing逆向库, 由[插件](https://github.com/RockChinQ/revLibs)接入
|
||||
- HuggingChat, 由[插件](https://github.com/RockChinQ/revLibs)接入, 仅支持英文
|
||||
- Claude, 由[插件](https://github.com/RockChinQ/revLibs)接入
|
||||
- Google Bard, 由[插件](https://github.com/RockChinQ/revLibs)接入
|
||||
- Google Gemini Pro、Azure、Anthropic Claude、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑等官方接口, 通过[One API](https://github.com/songquanpeng/one-api)接入
|
||||
|
||||
### 接口聚合平台
|
||||
|
||||
- [One API](https://github.com/songquanpeng/one-api), Azure、Anthropic Claude、Google Gemini Pro、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问以及 360 智脑等模型的官方接口转换成 OpenAI API 接入,QChatGPT 原生支持,您需要先配置 One API,之后在`config.py`中设置反向代理和`One API`的密钥后使用。
|
||||
- [gpt4free](https://github.com/xtekky/gpt4free), 破解以免费使用多个平台的各种文字模型, 由[插件](https://github.com/RockChinQ/revLibs)接入, 无需鉴权, 稳定性较差。
|
||||
- OpenAI API:GPT-3.5 / GPT-4
|
||||
- [逆向工程插件](https://github.com/RockChinQ/revLibs):ChatGPT / New Bing / Claude / Google Bard / Hugging Chat / gpt4free
|
||||
- [OneAPI](https://github.com/songquanpeng/one-api)接口聚合平台:Google Gemini Pro / Azure / Anthropic Claude / 智谱 ChatGLM / 百度文心一言 / 讯飞星火认知 / 阿里通义千问 / 360 智脑等官方接口
|
||||
- [free-one-api](https://github.com/RockChinQ/free-one-api)逆向工程库聚合平台:ChatGPT / Claude / Google Bard / gpt4free / 通义千问
|
||||
- [Poe](https://poe.com), 破解免费使用Poe上多个平台的模型, 由[oliverkirk-sudo/ChatPoeBot](https://github.com/oliverkirk-sudo/ChatPoeBot)接入(由于 Poe 上可用的大部分模型现已通过[revLibs插件](https://github.com/RockChinQ/revLubs)或其他方式接入,此插件现已停止维护)。
|
||||
|
||||
### 故事续写
|
||||
|
||||
- NovelAI API, 由[插件](https://github.com/dominoar/QCPNovelAi)接入
|
||||
|
||||
### 图片绘制
|
||||
|
||||
- OpenAI DALL·E模型, 本项目原生支持, 使用方法查看[Wiki功能使用页](https://github.com/RockChinQ/QChatGPT/wiki/1-%E5%8A%9F%E8%83%BD%E4%BD%BF%E7%94%A8#%E5%8A%9F%E8%83%BD%E7%82%B9%E5%88%97%E4%B8%BE)
|
||||
- NovelAI API, 由[插件](https://github.com/dominoar/QCPNovelAi)接入
|
||||
|
||||
### 语音生成
|
||||
|
||||
- TTS+VITS, 由[插件](https://github.com/dominoar/QChatPlugins)接入
|
||||
- [RuiShengVoice](https://github.com/the-lazy-me/RuiShengVoice), 通过调用睿声的API,将输出内容转化为音频
|
||||
- Plachta/VITS-Umamusume-voice-synthesizer, 由[插件](https://github.com/oliverkirk-sudo/chat_voice)接入
|
||||
|
||||
|
||||
安装[此插件](https://github.com/RockChinQ/Switcher),即可在使用中切换文字模型。
|
||||
|
||||
|
||||
## 功能点列举
|
||||
|
||||
<details>
|
||||
<summary>✅回复符合上下文</summary>
|
||||
|
||||
- 程序向模型发送近几次对话内容,模型根据上下文生成回复
|
||||
- 您可在`config.py`中修改`prompt_submit_length`自定义联系上下文的范围
|
||||
|
||||
</details>
|
||||
<br>
|
||||
@@ -63,7 +38,7 @@ category:
|
||||
<summary>✅支持敏感词过滤,避免账号风险</summary>
|
||||
|
||||
- 难以监测机器人与用户对话时的内容,故引入此功能以减少机器人风险
|
||||
- 编辑`sensitive.json`,并在`config.py`中修改`sensitive_word_filter`的值以开启此功能
|
||||
|
||||
</details>
|
||||
<br>
|
||||
|
||||
@@ -71,34 +46,23 @@ category:
|
||||
<summary>✅群内多种响应规则,不必at</summary>
|
||||
|
||||
- 默认回复`ai`作为前缀或`@`机器人的消息
|
||||
- 详细见`config.py`中的`response_rules`字段
|
||||
|
||||
</details>
|
||||
<br>
|
||||
|
||||
<details>
|
||||
<summary>✅使用官方api,不需要网络代理,稳定快捷</summary>
|
||||
<summary>✅使用官方api,稳定快捷</summary>
|
||||
|
||||
- 不使用ChatGPT逆向接口,而使用官方的Completion API,稳定性高
|
||||
- 您可以在`config.py`中自定义`completion_api_params`字段,设置向官方API提交的参数以自定义机器人的风格
|
||||
|
||||
</details>
|
||||
<br>
|
||||
|
||||
<details>
|
||||
<summary>✅完善的多api-key管理,超额自动切换</summary>
|
||||
|
||||
- 支持配置多个`api-key`,内部统计使用量并在超额时自动切换
|
||||
- 请在`config.py`中修改`openai_config`的值以设置`api-key`
|
||||
- 可以在`config.py`中修改`api_key_fee_threshold`来自定义切换阈值
|
||||
- 运行期间向机器人说`!usage`以查看当前使用情况
|
||||
</details>
|
||||
<br>
|
||||
|
||||
<details>
|
||||
<summary>✅组件少,部署方便,提供一键安装器及Docker安装</summary>
|
||||
|
||||
- 手动部署步骤少
|
||||
- 提供自动安装器及docker方式,详见以下安装步骤
|
||||
- 提供自动安装器及docker方式,详见安装步骤
|
||||
</details>
|
||||
<br>
|
||||
|
||||
@@ -106,9 +70,7 @@ category:
|
||||
<summary>✅支持预设文字</summary>
|
||||
|
||||
- 支持以自然语言预设文字,自定义机器人人格等信息
|
||||
- 详见`config.py`中的`default_prompt`部分
|
||||
- 支持设置多个预设情景,并通过!reset、!default等命令控制,详细请查看[wiki命令](https://github.com/RockChinQ/QChatGPT/wiki/1-%E5%8A%9F%E8%83%BD%E4%BD%BF%E7%94%A8#%E6%9C%BA%E5%99%A8%E4%BA%BA%E5%91%BD%E4%BB%A4)
|
||||
- 支持使用文件存储情景预设文字,并加载: 在`prompts/`目录新建文件写入预设文字,即可通过`!reset <文件名>`命令加载
|
||||
|
||||
</details>
|
||||
<br>
|
||||
|
||||
@@ -121,27 +83,11 @@ category:
|
||||
</details>
|
||||
<br>
|
||||
|
||||
<details>
|
||||
<summary>✅支持对话、绘图等模型,可玩性更高</summary>
|
||||
|
||||
- 现已支持OpenAI的对话`Completion API`和绘图`Image API`
|
||||
- 向机器人发送命令`!draw <prompt>`即可使用绘图模型
|
||||
</details>
|
||||
<br>
|
||||
|
||||
<details>
|
||||
<summary>✅支持命令控制热重载、热更新</summary>
|
||||
|
||||
- 允许在运行期间修改`config.py`或其他代码后,以管理员账号向机器人发送命令`!reload`进行热重载,无需重启
|
||||
- 运行期间允许以管理员账号向机器人发送命令`!update`进行热更新,拉取远程最新代码并执行热重载
|
||||
</details>
|
||||
<br>
|
||||
|
||||
<details>
|
||||
<summary>✅支持插件加载🧩</summary>
|
||||
|
||||
- 自行实现插件加载器及相关支持
|
||||
- 详细查看[插件使用页](https://github.com/RockChinQ/QChatGPT/wiki/5-%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8)
|
||||
- 详细查看插件介绍页
|
||||
</details>
|
||||
<br>
|
||||
|
||||
@@ -149,7 +95,7 @@ category:
|
||||
<summary>✅私聊、群聊黑名单机制</summary>
|
||||
|
||||
- 支持将人或群聊加入黑名单以忽略其消息
|
||||
- 详见下方`加入黑名单`节
|
||||
|
||||
</details>
|
||||
<br>
|
||||
|
||||
@@ -160,17 +106,10 @@ category:
|
||||
- 具有“等待”和“丢弃”两种策略
|
||||
- “等待”策略:在获取到回复后,等待直到此次响应时间达到对话响应时间均值
|
||||
- “丢弃”策略:此分钟内对话次数达到限制时,丢弃之后的对话
|
||||
- 详细请查看config.py中的相关配置
|
||||
|
||||
</details>
|
||||
<br>
|
||||
|
||||
<details>
|
||||
<summary>✅支持自定义提示内容</summary>
|
||||
|
||||
- 允许用户自定义报错、帮助等提示信息
|
||||
- 请查看`tips.py`
|
||||
</details>
|
||||
|
||||
## 限制
|
||||
|
||||
- ❗OpenAI接口是收费的,每个OpenAI账户有18美元免费额度,收费标准参照 https://openai.com/api/pricing/
|
||||
@@ -213,138 +152,3 @@ category:
|
||||
3. at机器人并发送`!help`查看帮助信息
|
||||
|
||||

|
||||
|
||||
### 绘图功能
|
||||
|
||||
对机器人发送`!draw <图片描述>`即可获得图片,绘图时间较长,请耐心等待。
|
||||
绘图功能与对话功能是分离的,机器人对话时并不了解其具有绘画能力。
|
||||
|
||||

|
||||
|
||||
### 机器人命令
|
||||
|
||||
目前支持的命令
|
||||
|
||||
> `<>` 中的为必填参数,使用时请不要包含`<>`
|
||||
> `[]` 中的为可选参数,使用时请不要包含`[]`
|
||||
|
||||
#### 用户级别命令
|
||||
|
||||
> 可以使用`!help`命令来查看命令说明
|
||||
|
||||
任何对象可使用
|
||||
|
||||
```
|
||||
!help 显示自定义的帮助信息(可在config.py修改help_message设置)
|
||||
!cmd [命令名称] 显示命令列表或指定命令的详细信息
|
||||
!list [页数] 列出本对象的历史会话列表
|
||||
!del <序号> 删除指定的历史记录,可以通过 !list 查看序号
|
||||
!del all 删除本会话对象的所有历史记录
|
||||
!last 切换到前一次会话
|
||||
!next 切换到后一次会话
|
||||
!reset [使用预设] 重置对象的当前会话,可指定使用的情景预设值(通过!default命令查看可用的)
|
||||
!prompt 查看对象当前会话的所有记录
|
||||
!usage 查看api-key的使用量
|
||||
!draw <提示语> 进行绘图
|
||||
!version 查看当前版本并检查更新
|
||||
!resend 重新回复上一个问题
|
||||
!plugin 用法请查看插件使用页的`管理`章节
|
||||
!default 查看可用的情景预设值
|
||||
```
|
||||
|
||||
#### 管理员命令
|
||||
|
||||
仅管理员私聊机器人时可使用,必须先在`config.py`中的`admin_qq`设置管理员QQ
|
||||
|
||||
```
|
||||
!reload 重载程序代码,适用于更新配置文件或更改代码后的热重载
|
||||
!update 进行程序自动更新
|
||||
!cfg <all|配置项名称> [配置项新值] 运行期间操作配置项,使用方法见下文
|
||||
!default set <情景预设名称> 修改!reset未指定情景预设时的默认情景,详细请查看config.py中default_prompt字段的注释
|
||||
!delhst <会话名称> 删除指定会话的所有历史记录, 会话名称为 group_群号 或 person_QQ号
|
||||
!delhst all 删除所有会话的所有历史记录
|
||||
```
|
||||
<details>
|
||||
<summary>⚙ !cfg 命令及其简化形式详解</summary>
|
||||
|
||||
此命令可以在运行期间由管理员通过QQ私聊窗口修改配置信息,**重启之后会失效**。
|
||||
|
||||
用法:
|
||||
1. 查看所有配置项及其值
|
||||
|
||||
```
|
||||
!cfg all
|
||||
```
|
||||
|
||||
2. 查看某个配置项的值
|
||||
|
||||
以`default_prompt`示例
|
||||
```
|
||||
!cfg default_prompt
|
||||
```
|
||||
|
||||
输出示例
|
||||
```
|
||||
[bot]配置项default_prompt: "如果我之后想获取帮助,请你说“输入!help获取帮助”"
|
||||
```
|
||||
|
||||
3. 修改某个配置项
|
||||
|
||||
格式: `!cfg <配置项名称> <配置项新值>`
|
||||
以修改`default_prompt`示例
|
||||
```
|
||||
!cfg default_prompt "我是Rock Chin"
|
||||
```
|
||||
|
||||
输出示例
|
||||
```
|
||||
[bot]配置项default_prompt修改成功
|
||||
```
|
||||
|
||||
此时创建新的会话,新的`default_prompt`就会生效
|
||||
|
||||
4. ⭐此命令的简化形式
|
||||
|
||||
格式:`!~<配置项名称>`
|
||||
其中`!~`等价于`!cfg `
|
||||
则前述三个命令分别可以简化为:
|
||||
```
|
||||
!~all
|
||||
!~default_prompt
|
||||
!~default_prompt "我是Rock Chin"
|
||||
```
|
||||
|
||||
5. 配置项名称支持使用点号(.)拼接以索引子配置项
|
||||
|
||||
例如: `openai_config.api_key`将索引`config`字典中的`openai_config`字典中的`api_key`字段,可以通过这个方式查看或修改此子配置项
|
||||
|
||||
```
|
||||
!~openai_config.api_key
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
### 命令权限控制
|
||||
|
||||
> 我们在[此PR](https://github.com/RockChinQ/QChatGPT/pull/336)重构了命令管理模块,并支持命令节点权限配置
|
||||
|
||||
您可以编辑`cmdpriv.json`来设置命令节点的权限,当命令被发起时,若用户的权限级别(管理员为`2`,普通用户为`1`)大于等于命令节点的权限级别,命令即可被成功执行。
|
||||
示例:
|
||||
```json
|
||||
{
|
||||
"plugin": 1,
|
||||
"plugin.get": 2
|
||||
}
|
||||
```
|
||||
如此,普通用户可以执行`!plugin`查看插件列表,而仅管理员可以执行`!plugin get <url>`命令安装插件。
|
||||
命令节点权限支持缺省,这意味的您未在`cmdpriv.json`中设置权限的节点将使用默认的权限级别(见上方)。
|
||||
|
||||
### 敏感词过滤
|
||||
|
||||
在`sensitive.json`中编辑敏感词,并在`config.py`中设置
|
||||
|
||||
```Python
|
||||
# 敏感词过滤开关,以同样数量的*代替敏感词回复
|
||||
# 请在sensitive.json中添加敏感词
|
||||
sensitive_word_filter = True
|
||||
```
|
||||
|
||||
@@ -1,491 +0,0 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: QChatGPT插件开发教程
|
||||
title: 插件开发
|
||||
icon: code
|
||||
author: RockChinQ
|
||||
date: 2023-09-30
|
||||
category:
|
||||
- 插件开发
|
||||
index: false
|
||||
---
|
||||
|
||||
> 请先阅读[插件使用页](./plugin/intro.md)
|
||||
> 请先阅读[技术信息页](./develop/technology-info.md)
|
||||
> 建议先阅读本项目源码,了解项目架构
|
||||
|
||||
> 问题、需求请到仓库issue发起
|
||||
> **提问前请先靠自己尝试**
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
## 💬简介
|
||||
|
||||
尽管“为一个基于OpenAI API的QQ机器人开发插件支持”这事看起来有点小题大做,但萌生此想法后的几天内好几个人提出了这个需求,最终促使此项目正式支持插件。
|
||||
|
||||
## 🧱实现
|
||||
|
||||
基于`importlib`库加载模块的方法动态加载额外Python程序文件以便实现插件加载,插件均存放在`plugins`文件夹,其中的所有`.py`文件都将被加载(除了所有`__init__.py`)
|
||||
|
||||
## 📚示例代码
|
||||
|
||||
请查看代码目录`tests/plugin_examples`中的插件目录
|
||||
|
||||
## 💻快速开始
|
||||
|
||||
按照文档部署此项目,并使其正常运行。
|
||||
在`plugins`目录下新建目录`hello`,在其中新建空文件`__init__.py`以标记此目录为软件包,继续新建文件`main.py`。
|
||||
|
||||
> 您也可以使用[hello_plugin](https://github.com/RockChinQ/hello_plugin)作为模板直接生成插件代码仓库
|
||||
|
||||
编辑`main.py`输入以下内容:
|
||||
|
||||
```Python
|
||||
from pkg.plugin.models import *
|
||||
from pkg.plugin.host import EventContext, PluginHost
|
||||
|
||||
"""
|
||||
在收到私聊或群聊消息"hello"时,回复"hello, <发送者id>!"或"hello, everyone!"
|
||||
"""
|
||||
|
||||
|
||||
# 注册插件
|
||||
@register(name="Hello", description="hello world", version="0.1", author="RockChinQ")
|
||||
class HelloPlugin(Plugin):
|
||||
|
||||
# 插件加载时触发
|
||||
# plugin_host (pkg.plugin.host.PluginHost) 提供了与主程序交互的一些方法,详细请查看其源码
|
||||
def __init__(self, plugin_host: PluginHost):
|
||||
pass
|
||||
|
||||
# 当收到个人消息时触发
|
||||
@on(PersonNormalMessageReceived)
|
||||
def person_normal_message_received(self, event: EventContext, **kwargs):
|
||||
msg = kwargs['text_message']
|
||||
if msg == "hello": # 如果消息为hello
|
||||
|
||||
# 输出调试信息
|
||||
logging.debug("hello, {}".format(kwargs['sender_id']))
|
||||
|
||||
# 回复消息 "hello, <发送者id>!"
|
||||
event.add_return("reply", ["hello, {}!".format(kwargs['sender_id'])])
|
||||
|
||||
# 阻止该事件默认行为(向接口获取回复)
|
||||
event.prevent_default()
|
||||
|
||||
# 当收到群消息时触发
|
||||
@on(GroupNormalMessageReceived)
|
||||
def group_normal_message_received(self, event: EventContext, **kwargs):
|
||||
msg = kwargs['text_message']
|
||||
if msg == "hello": # 如果消息为hello
|
||||
|
||||
# 输出调试信息
|
||||
logging.debug("hello, {}".format(kwargs['sender_id']))
|
||||
|
||||
# 回复消息 "hello, everyone!"
|
||||
event.add_return("reply", ["hello, everyone!"])
|
||||
|
||||
# 阻止该事件默认行为(向接口获取回复)
|
||||
event.prevent_default()
|
||||
|
||||
# 插件卸载时触发
|
||||
def __del__(self):
|
||||
pass
|
||||
|
||||
```
|
||||
|
||||
此插件将实现:私聊收到`hello`消息时回复`hello, <发送者QQ号>!`,群聊收到`hello`消息时回复`hello, everyone!`
|
||||
|
||||
### 解读此插件程序
|
||||
|
||||
- `import`从`pkg.plugin`引入`models`模块的所有字段(此程序使用了其中的`register函数`、`on函数`、`Plugin类`、`PersonNormalMessageReceived事件`、`GroupNormalMessageReceived事件`)
|
||||
- `@register()`将类`HelloPlugin`标记为一个插件类,声明插件名称为`Hello`以及插件简介、版本、作者
|
||||
- 声明类`HelloPlugin`继承于`Plugin`,此类可以随意命名,插件名称只与`register`调用时的参数有关
|
||||
- 声明此类的`__init__`方法,此方法是可选的,其中的代码将在主程序启动时加载插件的时候被执行
|
||||
- `@on`将方法`person_normal_message_received`标记为一个事件处理器,处理`PersonNormalMessageReceived`(收到私聊消息并在获取OpenAI回复前触发)事件,此方法可以随意命名,绑定的事件只与`on`中的参数有关,更多支持的事件可到`pkg.plugin.models.py`文件中查看或查看下方`API`节
|
||||
- 输出调试信息,程序中可通过`logging`将日志输出到控制台和`qchatgpt.log`文件
|
||||
- 方法内部从参数中取出`text_message`参数,判断是否为`hello`,如果是就将返回值`reply`设置为`["hello, {}!".format(kwargs['sender_id'])]`,接下来调用`event`对象的`prevent_default`方法,阻止原程序默认行为
|
||||
- 每个事件`提供的参数`和`支持的返回值`请查看`pkg.plugin.models`中的每个事件的注释或查看下方`API`节
|
||||
- `event`对象提供的方法请查看`pkg.plugin.host`中的`EventContext`类或查看下方`API`节
|
||||
- 用相似的程序注册`GroupNormalMessageReceived`事件处理群消息
|
||||
|
||||
编写完毕保存后,重新启动主程序,查看到输出中包含以下内容,即为加载成功:
|
||||
|
||||
```
|
||||
[2023-01-16 18:29:47.193] host.py (43) - [INFO] : 加载模块: hello.main
|
||||
[2023-01-16 18:29:47.194] models.py (209) - [INFO] : 插件注册完成: n='Hello', d='hello world', v=0.1, a='RockChinQ' (<class 'plugins.hello.main.HelloPlugin'>)
|
||||
```
|
||||
|
||||
> 建议在`config.py`中设置`logging_level = logging.DEBUG`以便开启调试输出
|
||||
|
||||
## ❗规范(重要)
|
||||
|
||||
- 请每个插件独立一个目录以便管理,建议在Github上创建一个仓库储存单个插件,以便获取和更新
|
||||
- 插件名使用`大驼峰命名法`,如`Hello`、`ExamplePlugin`、`ChineseCommands`等
|
||||
- 一个目录内可以存放多个Python程序文件,以独立出插件的各个功能,便于开发者管理,但不建议在一个目录内注册多个插件
|
||||
- 插件需要的依赖库请在插件目录下的`requirements.txt`中指定,程序从储存库获取此插件时将自动安装依赖
|
||||
|
||||
## 🪝内容函数
|
||||
|
||||
通过[GPT的Function Calling能力](https://platform.openai.com/docs/guides/gpt/function-calling)实现的`内容函数`,这是一种嵌入对话中,由GPT自动调用的函数。
|
||||
|
||||
> 您的插件不一定必须包含内容函数,请先查看内容函数页了解此功能
|
||||
|
||||
<details>
|
||||
<summary>示例:联网插件</summary>
|
||||
|
||||
加载含有联网功能的内容函数的插件[WebwlkrPlugin](https://github.com/RockChinQ/WebwlkrPlugin),向机器人询问在线内容
|
||||
|
||||
```
|
||||
# 控制台输出
|
||||
[2023-07-29 17:37:18.698] message.py (26) - [INFO] : [person_1010553892]发送消息:介绍一下这个项目:https://git...
|
||||
[2023-07-29 17:37:21.292] util.py (67) - [INFO] : message='OpenAI API response' path=https://api.openai.com/v1/chat/completions processing_ms=1902 request_id=941afc13b2e1bba1e7877b92a970cdea response_code=200
|
||||
[2023-07-29 17:37:21.293] chat_completion.py (159) - [INFO] : 执行函数调用: name=Webwlkr-access_the_web, arguments={'url': 'https://github.com/RockChinQ/QChatGPT', 'brief_len': 512}
|
||||
[2023-07-29 17:37:21.848] chat_completion.py (164) - [INFO] : 函数执行完成。
|
||||
```
|
||||
|
||||

|
||||
|
||||
</details>
|
||||
|
||||
### 内容函数编写步骤
|
||||
|
||||
1️⃣ 请先按照上方步骤编写您的插件基础结构,现在请删除(当然你也可以不删,只是为了简洁)上述插件内容的诸个由`@on`装饰的类函数
|
||||
|
||||
<details>
|
||||
<summary>删除后的结构</summary>
|
||||
|
||||
```python
|
||||
from pkg.plugin.models import *
|
||||
from pkg.plugin.host import EventContext, PluginHost
|
||||
|
||||
"""
|
||||
在收到私聊或群聊消息"hello"时,回复"hello, <发送者id>!"或"hello, everyone!"
|
||||
"""
|
||||
|
||||
|
||||
# 注册插件
|
||||
@register(name="Hello", description="hello world", version="0.1", author="RockChinQ")
|
||||
class HelloPlugin(Plugin):
|
||||
|
||||
# 插件加载时触发
|
||||
# plugin_host (pkg.plugin.host.PluginHost) 提供了与主程序交互的一些方法,详细请查看其源码
|
||||
def __init__(self, plugin_host: PluginHost):
|
||||
pass
|
||||
|
||||
# 插件卸载时触发
|
||||
def __del__(self):
|
||||
pass
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
2️⃣ 现在我们将以下函数添加到刚刚删除的函数的位置
|
||||
|
||||
```Python
|
||||
|
||||
# 要添加的函数
|
||||
|
||||
@func(name="access_the_web") # 设置函数名称
|
||||
def _(url: str):
|
||||
"""Call this function to search about the question before you answer any questions.
|
||||
- Do not search through baidu.com at any time.
|
||||
- If you need to search somthing, visit https://www.google.com/search?q=xxx.
|
||||
- If user ask you to open a url (start with http:// or https://), visit it directly.
|
||||
- Summary the plain content result by yourself, DO NOT directly output anything in the result you got.
|
||||
|
||||
Args:
|
||||
url(str): url to visit
|
||||
|
||||
Returns:
|
||||
str: plain text content of the web page
|
||||
"""
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
# 你需要先使用
|
||||
# pip install beautifulsoup4
|
||||
# 安装依赖
|
||||
|
||||
r = requests.get(
|
||||
url,
|
||||
timeout=10,
|
||||
headers={
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183"
|
||||
}
|
||||
)
|
||||
soup = BeautifulSoup(r.text, 'html.parser')
|
||||
|
||||
s = soup.get_text()
|
||||
|
||||
# 删除多余的空行或仅有\t和空格的行
|
||||
s = re.sub(r'\n\s*\n', '\n', s)
|
||||
|
||||
if len(s) >= 512: # 截取获取到的网页纯文本内容的前512个字
|
||||
return s[:512]
|
||||
|
||||
return s
|
||||
|
||||
```
|
||||
<details>
|
||||
<summary>现在这个文件内容应该是这样</summary>
|
||||
|
||||
```python
|
||||
from pkg.plugin.models import *
|
||||
from pkg.plugin.host import EventContext, PluginHost
|
||||
|
||||
"""
|
||||
在收到私聊或群聊消息"hello"时,回复"hello, <发送者id>!"或"hello, everyone!"
|
||||
"""
|
||||
|
||||
|
||||
# 注册插件
|
||||
@register(name="Hello", description="hello world", version="0.1", author="RockChinQ")
|
||||
class HelloPlugin(Plugin):
|
||||
|
||||
# 插件加载时触发
|
||||
# plugin_host (pkg.plugin.host.PluginHost) 提供了与主程序交互的一些方法,详细请查看其源码
|
||||
def __init__(self, plugin_host: PluginHost):
|
||||
pass
|
||||
|
||||
@func(name="access_the_web")
|
||||
def _(url: str):
|
||||
"""Call this function to search about the question before you answer any questions.
|
||||
- Do not search through baidu.com at any time.
|
||||
- If you need to search somthing, visit https://www.google.com/search?q=xxx.
|
||||
- If user ask you to open a url (start with http:// or https://), visit it directly.
|
||||
- Summary the plain content result by yourself, DO NOT directly output anything in the result you got.
|
||||
|
||||
Args:
|
||||
url(str): url to visit
|
||||
|
||||
Returns:
|
||||
str: plain text content of the web page
|
||||
"""
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
# 你需要先使用
|
||||
# pip install beautifulsoup4
|
||||
# 安装依赖
|
||||
|
||||
r = requests.get(
|
||||
url,
|
||||
timeout=10,
|
||||
headers={
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183"
|
||||
}
|
||||
)
|
||||
soup = BeautifulSoup(r.text, 'html.parser')
|
||||
|
||||
s = soup.get_text()
|
||||
|
||||
# 删除多余的空行或仅有\t和空格的行
|
||||
s = re.sub(r'\n\s*\n', '\n', s)
|
||||
|
||||
if len(s) >= 512: # 截取获取到的网页纯文本内容的前512个字
|
||||
return s[:512]
|
||||
|
||||
return s
|
||||
|
||||
# 插件卸载时触发
|
||||
def __del__(self):
|
||||
pass
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
#### 请注意:
|
||||
|
||||
- 函数的注释必须严格按照要求的格式进行书写,具体格式请查看[此文档](https://github.com/RockChinQ/CallingGPT/wiki/1.-Function-Format#function-format)
|
||||
- 内容函数和`以@on装饰的行为函数`可以同时存在于同一个插件,并同时受到`switch.json`中的插件开关的控制
|
||||
- 务必确保您使用的模型支持函数调用功能,可以到`config.py`的`completion_api_params`中修改模型,推荐使用`gpt-3.5-turbo-16k`
|
||||
|
||||
3️⃣ 现在您的程序已具备网络访问功能,重启程序,询问机器人有关在线的内容或直接发送文章链接请求其总结。
|
||||
|
||||
- 这仅仅是一个示例,需要更高效的网络访问能力支持插件,请查看[WebwlkrPlugin](https://github.com/RockChinQ/WebwlkrPlugin)
|
||||
|
||||
## 🔒版本要求
|
||||
|
||||
若您的插件对主程序的版本有要求,可以使用以下函数进行断言,若不符合版本,此函数将报错并打断此函数所在的流程:
|
||||
|
||||
```python
|
||||
require_ver("v2.5.1") # 要求最低版本为 v2.5.1
|
||||
```
|
||||
|
||||
```python
|
||||
require_ver("v2.5.1", "v2.6.0") # 要求最低版本为 v2.5.1, 同时要求最高版本为 v2.6.0
|
||||
```
|
||||
|
||||
- 此函数在主程序`v2.5.1`中加入
|
||||
- 此函数声明在`pkg.plugin.models`模块中,在插件示例代码最前方已引入此模块所有内容,故可直接使用
|
||||
|
||||
## 📄API参考
|
||||
|
||||
### 说明
|
||||
|
||||
事件处理函数将会获得一系列参数,可以在`kwargs`中取出。
|
||||
其中`host`参数(`pkg.plugin.host.PluginHost`类的实例)是插件宿主,提供与主程序各个模块交互的一些方法。
|
||||
`event`参数(`pkg.plugin.host.EventContext`类的实例)是事件执行期间的上下文,提供对此次事件执行的一些操作方法。
|
||||
|
||||
事件返回值均为**可选**的,可以通过调用`event.add_return(key: str, ret)`来提交返回值
|
||||
|
||||
### 事件
|
||||
|
||||
所有事件参数均有`host`和`event`,以下仅展示其他参数
|
||||
关于`YiriMirai`支持的消息链组件,请查看 [YiriMirai的文档](https://yiri-mirai.wybxc.cc/docs/basic/message-chain)
|
||||
|
||||
```Python
|
||||
PersonMessageReceived = "person_message_received"
|
||||
"""收到私聊消息时,在判断是否应该响应前触发
|
||||
kwargs:
|
||||
launcher_type: str 发起对象类型(group/person)
|
||||
launcher_id: int 发起对象ID(群号/QQ号)
|
||||
sender_id: int 发送者ID(QQ号)
|
||||
message_chain: mirai.models.message.MessageChain 消息链
|
||||
"""
|
||||
|
||||
GroupMessageReceived = "group_message_received"
|
||||
"""收到群聊消息时,在判断是否应该响应前触发(所有群消息)
|
||||
kwargs:
|
||||
launcher_type: str 发起对象类型(group/person)
|
||||
launcher_id: int 发起对象ID(群号/QQ号)
|
||||
sender_id: int 发送者ID(QQ号)
|
||||
message_chain: mirai.models.message.MessageChain 消息链
|
||||
"""
|
||||
|
||||
PersonNormalMessageReceived = "person_normal_message_received"
|
||||
"""判断为应该处理的私聊普通消息时触发
|
||||
kwargs:
|
||||
launcher_type: str 发起对象类型(group/person)
|
||||
launcher_id: int 发起对象ID(群号/QQ号)
|
||||
sender_id: int 发送者ID(QQ号)
|
||||
text_message: str 消息文本
|
||||
|
||||
returns (optional):
|
||||
alter: str 修改后的消息文本
|
||||
reply: list 回复消息组件列表,元素为YiriMirai支持的消息组件
|
||||
"""
|
||||
|
||||
PersonCommandSent = "person_command_sent"
|
||||
"""判断为应该处理的私聊命令时触发
|
||||
kwargs:
|
||||
launcher_type: str 发起对象类型(group/person)
|
||||
launcher_id: int 发起对象ID(群号/QQ号)
|
||||
sender_id: int 发送者ID(QQ号)
|
||||
command: str 命令
|
||||
params: list[str] 参数列表
|
||||
text_message: str 完整命令文本
|
||||
is_admin: bool 是否为管理员
|
||||
|
||||
returns (optional):
|
||||
alter: str 修改后的完整命令文本
|
||||
reply: list 回复消息组件列表,元素为YiriMirai支持的消息组件
|
||||
"""
|
||||
|
||||
GroupNormalMessageReceived = "group_normal_message_received"
|
||||
"""判断为应该处理的群聊普通消息时触发
|
||||
kwargs:
|
||||
launcher_type: str 发起对象类型(group/person)
|
||||
launcher_id: int 发起对象ID(群号/QQ号)
|
||||
sender_id: int 发送者ID(QQ号)
|
||||
text_message: str 消息文本
|
||||
|
||||
returns (optional):
|
||||
alter: str 修改后的消息文本
|
||||
reply: list 回复消息组件列表,元素为YiriMirai支持的消息组件
|
||||
"""
|
||||
|
||||
GroupCommandSent = "group_command_sent"
|
||||
"""判断为应该处理的群聊命令时触发
|
||||
kwargs:
|
||||
launcher_type: str 发起对象类型(group/person)
|
||||
launcher_id: int 发起对象ID(群号/QQ号)
|
||||
sender_id: int 发送者ID(QQ号)
|
||||
command: str 命令
|
||||
params: list[str] 参数列表
|
||||
text_message: str 完整命令文本
|
||||
is_admin: bool 是否为管理员
|
||||
|
||||
returns (optional):
|
||||
alter: str 修改后的完整命令文本
|
||||
reply: list 回复消息组件列表,元素为YiriMirai支持的消息组件
|
||||
"""
|
||||
|
||||
NormalMessageResponded = "normal_message_responded"
|
||||
"""获取到对普通消息的文字响应时触发
|
||||
kwargs:
|
||||
launcher_type: str 发起对象类型(group/person)
|
||||
launcher_id: int 发起对象ID(群号/QQ号)
|
||||
sender_id: int 发送者ID(QQ号)
|
||||
session: pkg.openai.session.Session 会话对象
|
||||
prefix: str 回复文字消息的前缀
|
||||
response_text: str 响应文本
|
||||
finish_reason: str 响应结束原因
|
||||
|
||||
returns (optional):
|
||||
prefix: str 修改后的回复文字消息的前缀
|
||||
reply: list 替换回复消息组件列表
|
||||
"""
|
||||
|
||||
SessionFirstMessageReceived = "session_first_message_received"
|
||||
"""会话被第一次交互时触发
|
||||
kwargs:
|
||||
session_name: str 会话名称(<launcher_type>_<launcher_id>)
|
||||
session: pkg.openai.session.Session 会话对象
|
||||
default_prompt: str 预设值
|
||||
"""
|
||||
|
||||
SessionExplicitReset = "session_reset"
|
||||
"""会话被用户手动重置时触发,此事件不支持阻止默认行为
|
||||
kwargs:
|
||||
session_name: str 会话名称(<launcher_type>_<launcher_id>)
|
||||
session: pkg.openai.session.Session 会话对象
|
||||
"""
|
||||
|
||||
SessionExpired = "session_expired"
|
||||
"""会话过期时触发
|
||||
kwargs:
|
||||
session_name: str 会话名称(<launcher_type>_<launcher_id>)
|
||||
session: pkg.openai.session.Session 会话对象
|
||||
session_expire_time: int 已设置的会话过期时间(秒)
|
||||
"""
|
||||
|
||||
KeyExceeded = "key_exceeded"
|
||||
"""api-key超额时触发
|
||||
kwargs:
|
||||
key_name: str 超额的api-key名称
|
||||
usage: dict 超额的api-key使用情况
|
||||
exceeded_keys: list[str] 超额的api-key列表
|
||||
"""
|
||||
|
||||
KeySwitched = "key_switched"
|
||||
"""api-key超额切换成功时触发,此事件不支持阻止默认行为
|
||||
kwargs:
|
||||
key_name: str 切换成功的api-key名称
|
||||
key_list: list[str] api-key列表
|
||||
"""
|
||||
|
||||
PromptPreProcessing = "prompt_pre_processing" # 于v2.5.1加入
|
||||
"""每回合调用接口前对prompt进行预处理时触发,此事件不支持阻止默认行为
|
||||
kwargs:
|
||||
session_name: str 会话名称(<launcher_type>_<launcher_id>)
|
||||
default_prompt: list 此session使用的情景预设内容
|
||||
prompt: list 此session现有的prompt内容
|
||||
text_message: str 用户发送的消息文本
|
||||
|
||||
returns (optional):
|
||||
default_prompt: list 修改后的情景预设内容
|
||||
prompt: list 修改后的prompt内容
|
||||
text_message: str 修改后的消息文本
|
||||
"""
|
||||
```
|
||||
|
||||
### host: PluginHost 详解
|
||||
|
||||
提供与主程序各个模块交互的一些方法,具体查看`pkg.plugin.host`中的`PluginHost`类
|
||||
|
||||
### event: EventContext 详解
|
||||
|
||||
提供对此次事件执行的一些操作方法,具体查看`pkg.plugin.host`中的`EventContext`类
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: QChatGPT的插件相关页面
|
||||
title: 插件相关
|
||||
icon: list
|
||||
order: 1
|
||||
author: Lazy
|
||||
date: 2023-12-20
|
||||
category:
|
||||
- 插件使用
|
||||
---
|
||||
|
||||
<AutoCatalog base='/posts/plugin/'/>
|
||||
@@ -5,22 +5,29 @@ head:
|
||||
content: QChatGPT插件开发教程
|
||||
title: 插件开发
|
||||
icon: code
|
||||
order: 3
|
||||
author: RockChinQ
|
||||
date: 2023-09-30
|
||||
category:
|
||||
- 插件开发
|
||||
- 插件介绍
|
||||
index: false
|
||||
---
|
||||
|
||||
:::warning
|
||||
本教程基于 QChatGPT 2.x 编写,3.0 具有不全面的向后兼容性,请尽可能使用本教程内推荐的方法进行开发。
|
||||
:::
|
||||
|
||||
> 请先阅读[插件介绍页](../plugin/intro.md)
|
||||
> 请先阅读[技术信息页](../develop/technology-info.md)
|
||||
> 建议先阅读本项目源码,了解项目架构
|
||||
|
||||
> 问题、需求请到仓库issue发起
|
||||
> **提问前请先靠自己尝试**
|
||||
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
## 💬简介
|
||||
|
||||
尽管“为一个基于OpenAI API的QQ机器人开发插件支持”这事看起来有点小题大做,但萌生此想法后的几天内好几个人提出了这个需求,最终促使此项目正式支持插件。
|
||||
|
||||
+32
-37
@@ -5,15 +5,18 @@ head:
|
||||
content: ChatGPT QQ机器人插件,QChatGPT项目插件
|
||||
title: 插件介绍
|
||||
icon: blog
|
||||
order: 1
|
||||
date: 2023-09-30
|
||||
category:
|
||||
- 插件介绍
|
||||
index: false
|
||||
---
|
||||
|
||||
# QChatGPT的插件
|
||||
:::info 目录
|
||||
[[toc]]
|
||||
:::
|
||||
|
||||
## 插件是什么?
|
||||
## 插件分类
|
||||
|
||||
**插件**,是QChatGPT的扩展模块,分为**行为插件**和**内容函数**两种类型。行为插件由主程序运行中的事件驱动,而内容函数由GPT生成的内容驱动。这两种驱动方式都统一包装在插件类中。
|
||||
|
||||
@@ -37,29 +40,10 @@ Q:阅读并总结这篇文章:https://zhuanlan.zhihu.com/p/607570830
|
||||
Q:搜一下清远今天天气如何
|
||||
```
|
||||
|
||||
GPT将会回复一个对`access_the_web`的函数调用请求,QChatGPT将调用插件提供的内容函数,并返回调用结果给GPT使其生成新的回复。
|
||||
|
||||
GPT将会回复一个对`access_the_web`的函数调用请求,QChatGPT将调用插件提供的内容函数,并返回调用结果给GPT使其生成新的回复。
|
||||
当然,函数调用功能不止局限于网络访问,还可以实现图片处理、科学计算、行程规划等需要调用函数的功能,理论上我们可以通过内容函数实现与`ChatGPT Plugins`相同的功能。
|
||||
|
||||
- 您需要使用`v2.5.0`以上的版本才能加载包含内容函数的插件
|
||||
- 您需要同时在`config.py`中的`completion_api_params`中设置`model`为支持函数调用的模型,推荐使用`gpt-3.5-turbo-16k`
|
||||
- 使用此功能可能会造成难以预期的账号余额消耗,请关注
|
||||
- [逆向库插件](https://github.com/RockChinQ/revLibs)现在也支持函数调用了。您可以在完全免费的情况下使用GPT-3.5进行函数调用,若您在主程序配置了内容函数并启用,逆向ChatGPT会自动使用这些函数
|
||||
|
||||
> **QChatGPT的一些不错的内容函数插件**
|
||||
>
|
||||
> [WebwlkrPlugin](https://github.com/RockChinQ/WebwlkrPlugin) - 让机器人能联网!!
|
||||
|
||||
## 插件能干什么?
|
||||
|
||||
- **自定义回复逻辑:** 定义特定关键词或指令的回复方式。
|
||||
- **集成外部服务:** 与外部API交互,获取信息或执行操作。
|
||||
- **数据存储和检索:** 将数据存储在数据库中,并能够检索和更新。
|
||||
- **自动化任务:** 在特定事件触发时执行自动化任务,如定时任务、特定用户消息触发等。
|
||||
- **内容函数调用:** 利用GPT的Function Calling能力执行各种任务,如网络搜索、图片处理等。
|
||||
- **更多……**
|
||||
|
||||
## 插件怎么用?
|
||||
## 插件用法
|
||||
|
||||
### 安装
|
||||
|
||||
@@ -67,14 +51,14 @@ GPT将会回复一个对`access_the_web`的函数调用请求,QChatGPT将调
|
||||
|
||||
#### 储存库克隆(推荐)
|
||||
|
||||
在运行期间,使用管理员账号对机器人私聊发送`!plugin get <Git储存库地址>`即可自动获取源码并安装插件,程序会根据仓库中的`requirements.txt`文件自动安装依赖库
|
||||
在运行期间,使用管理员账号对机器人私聊发送`!plugin get <GitHub储存库地址>`即可自动获取源码并安装插件,程序会根据仓库中的`requirements.txt`文件自动安装依赖库
|
||||
|
||||
例如安装`hello_plugin`插件
|
||||
```
|
||||
!plugin get https://github.com/RockChinQ/hello_plugin
|
||||
```
|
||||
|
||||
安装完成后重启程序或使用管理员账号私聊机器人发送`!reload`进行热重载加载插件
|
||||
安装完成后重启程序。
|
||||
|
||||
#### 手动安装
|
||||
|
||||
@@ -86,7 +70,7 @@ GPT将会回复一个对`access_the_web`的函数调用请求,QChatGPT将调
|
||||
|
||||
```
|
||||
!plugin 列出所有已安装的插件
|
||||
!plugin get <储存库地址> 从Git储存库安装插件(需要管理员权限)
|
||||
!plugin get <储存库地址> 从GitHub储存库地址安装插件(需要管理员权限)
|
||||
!plugin update all 更新所有插件(需要管理员权限,仅支持从储存库安装的插件)
|
||||
!plugin update <插件名> 更新指定插件
|
||||
!plugin del <插件名> 删除插件(需要管理员权限)
|
||||
@@ -96,21 +80,32 @@ GPT将会回复一个对`access_the_web`的函数调用请求,QChatGPT将调
|
||||
!func 列出所有内容函数
|
||||
```
|
||||
|
||||
#### 控制插件执行顺序
|
||||
#### plugins/plugins.json 配置文件
|
||||
|
||||
可以通过修改`plugins/settings.json`中`order`字段中每个插件名称的前后顺序,以更改插件**初始化**和**事件执行**顺序
|
||||
程序启动时,会同步这里的设置和实际加载的插件设置。
|
||||
|
||||
#### 启用或关闭插件
|
||||
**这个文件内容是由程序自动生成的,不要手动添加或删除项目,仅可修改优先级和启用状态**,修改后需重启。
|
||||
|
||||
无需卸载即可管理插件的开关
|
||||
编辑`plugins`目录下的`switch.json`文件,将相应的插件的`enabled`字段设置为`true/false(开/关)`,之后重启程序或执行热重载即可控制插件开关
|
||||
示例:
|
||||
|
||||
#### 控制全局内容函数开关
|
||||
```json
|
||||
"plugins": [
|
||||
{
|
||||
"name": "Nahida",
|
||||
"description": "Hello Nahida",
|
||||
"version": "0.1",
|
||||
"author": "RockChinQ",
|
||||
"source": "",
|
||||
"main_file": "plugins/Nahida/main.py",
|
||||
"pkg_path": "plugins/Nahida/",
|
||||
"priority": 0,
|
||||
"enabled": true
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
内容函数是基于[GPT的Function Calling能力](https://platform.openai.com/docs/guides/gpt/function-calling)实现的,这是一种嵌入对话中,由GPT自动调用的函数。
|
||||
每个插件可以自行注册内容函数,您可以在`plugins`目录下的`settings.json`中设置`functions`下的`enabled`为`true`或`false`控制这些内容函数的启用或禁用。
|
||||
`source`:源码地址,若无内容,则表示这个插件不支持程序自动更新
|
||||
|
||||
## 如何自定义插件?
|
||||
|
||||
> QChatGPT的插件具有高度的可拓展性,你可以自行编写python代码来实现无限的功能,插件开发方法具体阅读:[插件开发](/posts/plugin/develop.html)
|
||||
`priority`: 插件运行优先级,在初始化、事件调用时,高优先级的插件将优先被处理
|
||||
|
||||
`enabled`:设置为false时,不会初始化,也不会被调用
|
||||
|
||||
@@ -5,7 +5,7 @@ head:
|
||||
content: ChatGPT QQ机器人插件,QChatGPT项目插件
|
||||
title: 插件列表
|
||||
icon: list
|
||||
order: 1
|
||||
order: 2
|
||||
author: Lazy
|
||||
date: 2023-09-30
|
||||
category:
|
||||
|
||||
@@ -10,6 +10,7 @@ author: Lazy
|
||||
date: 2023-12-20
|
||||
category:
|
||||
- 插件使用
|
||||
index: false
|
||||
---
|
||||
|
||||
<AutoCatalog base='/posts/plugin/some-plugin-deploy/'/>
|
||||
@@ -37,4 +37,4 @@ category:
|
||||
|
||||

|
||||
|
||||
发送`!reload`即可成功使用
|
||||
重启程序以加载插件。
|
||||
-429
@@ -1,429 +0,0 @@
|
||||
---
|
||||
title: 幻灯片页
|
||||
icon: person-chalkboard
|
||||
layout: Slide
|
||||
---
|
||||
|
||||
<!-- markdownlint-disable MD024 MD033 MD051 -->
|
||||
|
||||
@slidestart
|
||||
|
||||
<!-- .slide: data-transition="slide" -->
|
||||
|
||||
## 幻灯片演示
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
一个简单的幻灯片演示与各种小贴士。
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
> 作者 Mr.Hope. 请滚动鼠标滚轮进入下一页
|
||||
|
||||
---
|
||||
|
||||
## 标注幻灯片
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
[👇](#/1/1)
|
||||
|
||||
--
|
||||
|
||||
## 标注幻灯片
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
使用 `---` 标注水平幻灯片
|
||||
|
||||
<!-- .element: class="fragment fade-in" -->
|
||||
|
||||
在水平幻灯片中使用 `--` 分割垂直幻灯片
|
||||
|
||||
<!-- .element: class="fragment fade-in" -->
|
||||
|
||||
使用 `<!-- .slide: ... -->` 在幻灯片上添加属性
|
||||
|
||||
<!-- .element: class="fragment fade-in" -->
|
||||
|
||||
使用 `<!-- .element: ... -->` 在前一个 HTML 元素上添加属性
|
||||
|
||||
<!-- .element: class="fragment fade-in" -->
|
||||
|
||||
---
|
||||
|
||||
<!-- .slide: data-transition="slide" data-auto-animate -->
|
||||
|
||||
## Markdown
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
你可以在幻灯片中使用 Markdown 语法的各种标记.
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-auto-animate -->
|
||||
|
||||
## Markdown
|
||||
|
||||
你可以在幻灯片中使用 Markdown 语法的各种标记.
|
||||
|
||||
### 这是一个 H3
|
||||
|
||||
标题默认会自动转换为大写。
|
||||
|
||||
这是一个有着 **粗体**, _斜体_, ~~删除线~~ 文字并包含 [一个链接](https://mister-hope.com) 的段落,并且它会自动换行。所以你无需担心它的长度。
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-auto-animate -->
|
||||
|
||||
## Markdown
|
||||
|
||||
你可以在幻灯片中使用 Markdown 语法的各种标记.
|
||||
|
||||
列表默认为 `inline-block`
|
||||
|
||||
- 项目
|
||||
- 项目
|
||||
- 项目
|
||||
|
||||
1. 项目 1
|
||||
1. 项目 2
|
||||
1. 项目 3
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-auto-animate -->
|
||||
|
||||
## Markdown
|
||||
|
||||
你可以在幻灯片中使用 Markdown 语法的各种标记.
|
||||
|
||||
在你启用 `highlight` 插件后,代码块会自动高亮。
|
||||
|
||||
```js
|
||||
const a = 1;
|
||||
```
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-auto-animate -->
|
||||
|
||||
## Markdown
|
||||
|
||||
你可以在幻灯片中使用 Markdown 语法的各种标记.
|
||||
|
||||
在你启用 `math` 插件后,你也可以使用 TEX 格式使用数学公式。
|
||||
|
||||
$$
|
||||
J(\theta_0,\theta_1) = \sum_{i=0}
|
||||
$$
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-auto-animate -->
|
||||
|
||||
## Markdown
|
||||
|
||||
你可以在幻灯片中使用 Markdown 语法的各种标记.
|
||||
|
||||
⚠**请注意**: 表格和分割线,以及所有不在 Markdown 标准语法中的内容均不受支持。
|
||||
|
||||
---
|
||||
|
||||
<!-- .slide: data-transition="slide" data-auto-animate -->
|
||||
|
||||
## 布局
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-auto-animate -->
|
||||
|
||||
## 布局
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
👆 `r-fit-text` class 会让文字在不超出幻灯片范围的情况下尽可能大。
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-auto-animate -->
|
||||
|
||||
## 布局
|
||||
|
||||

|
||||
|
||||
<!-- .element: class="r-stretch" -->
|
||||
|
||||
👆 `r-stretch` class 帮助你控制注入图片或视频的大小,使它们填充满幻灯片垂直方向上的剩余空间。
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-auto-animate data-background-color="rgb(70, 70, 255)" -->
|
||||
|
||||
## 布局
|
||||
|
||||
### 背景
|
||||
|
||||
你可以通过向特定幻灯片添加 `data-background` 属性自定义幻灯片背景.
|
||||
|
||||
---
|
||||
|
||||
<!-- .slide: data-auto-animate -->
|
||||
|
||||
## 动画片段
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-auto-animate -->
|
||||
|
||||
## 动画片段
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
动画片段用于高亮或显隐幻灯片中的元素。
|
||||
|
||||
你需要在元素上添加 `fragment` 和动画 class。
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-auto-animate -->
|
||||
|
||||
## 动画片段
|
||||
|
||||
### 动画 class
|
||||
|
||||
- `fade-in`
|
||||
<!-- .element: class="fragment fade-in" -->
|
||||
|
||||
- `fade-out`
|
||||
<!-- .element: class="fragment fade-out" -->
|
||||
|
||||
- `fade-up`
|
||||
<!-- .element: class="fragment fade-up" -->
|
||||
|
||||
<!-- list break -->
|
||||
|
||||
- `fade-down`
|
||||
<!-- .element: class="fragment fade-down" -->
|
||||
|
||||
- `fade-left`
|
||||
<!-- .element: class="fragment fade-left" -->
|
||||
|
||||
- `fade-right`
|
||||
<!-- .element: class="fragment fade-right" -->
|
||||
|
||||
<!-- list break -->
|
||||
|
||||
- `fade-in-then-out`
|
||||
<!-- .element: class="fragment fade-in-then-out" -->
|
||||
|
||||
- `fade-in-then-semi-out`
|
||||
<!-- .element: class="fragment fade-in-then-semi-out" -->
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-auto-animate -->
|
||||
|
||||
## 动画片段
|
||||
|
||||
### 动画 class
|
||||
|
||||
- `grow`
|
||||
<!-- .element: class="fragment grow" -->
|
||||
|
||||
- `shrink`
|
||||
<!-- .element: class="fragment shrink" -->
|
||||
|
||||
- `strike`
|
||||
<!-- .element: class="fragment strike" -->
|
||||
|
||||
<!-- list break -->
|
||||
|
||||
- `highlight-red`
|
||||
<!-- .element: class="fragment highlight-red" -->
|
||||
|
||||
- `highlight-green`
|
||||
<!-- .element: class="fragment highlight-green" -->
|
||||
|
||||
- `highlight-blue`
|
||||
<!-- .element: class="fragment highlight-blue" -->
|
||||
|
||||
<!-- list break -->
|
||||
|
||||
- `highlight-current-red`
|
||||
<!-- .element: class="fragment highlight-current-red" -->
|
||||
|
||||
- `highlight-current-green`
|
||||
<!-- .element: class="fragment highlight-current-green" -->
|
||||
|
||||
- `highlight-current-blue`
|
||||
<!-- .element: class="fragment highlight-current-blue" -->
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-auto-animate -->
|
||||
|
||||
## 动画片段
|
||||
|
||||
### 多个动画片段
|
||||
|
||||
你可以按照顺序包裹一个 HTML 元素使其拥有多个动画片段
|
||||
|
||||
<span class="fragment fade-in">
|
||||
<span class="fragment highlight-red">
|
||||
<span class="fragment fade-out">
|
||||
渐入 > 变红 > 渐出
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-auto-animate -->
|
||||
|
||||
## 动画片段
|
||||
|
||||
### 顺序
|
||||
|
||||
你可以使用 `data-fragment-index` 属性改变元素的动画顺序。
|
||||
|
||||
不同元素可以有相同的动画顺序。
|
||||
|
||||
- 最后显示
|
||||
<!-- .element: class="fragment" data-fragment-index="3"-->
|
||||
|
||||
- 第二个显示
|
||||
<!-- .element: class="fragment" data-fragment-index="2"-->
|
||||
|
||||
<!-- list break -->
|
||||
|
||||
- 第一个显示
|
||||
<!-- .element: class="fragment" data-fragment-index="1"-->
|
||||
|
||||
- 第二个显示
|
||||
<!-- .element: class="fragment" data-fragment-index="2"-->
|
||||
|
||||
---
|
||||
|
||||
<!-- .slide: data-transition="slide" data-auto-animate -->
|
||||
|
||||
## 渐变
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-transition="slide" data-auto-animate -->
|
||||
|
||||
## 渐变
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
Transition 可以通过配置中的 `transition` 选项全局设置,也可以通过在特定幻灯片添加 `data-transition` 属性局部设置.
|
||||
|
||||
可能的值:
|
||||
|
||||
- none
|
||||
- fade
|
||||
- slide
|
||||
|
||||
<!-- list break -->
|
||||
|
||||
- convex
|
||||
- concave
|
||||
- zoom
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-auto-animate -->
|
||||
|
||||
## 渐变
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
### 过渡动画
|
||||
|
||||
你可以在相邻的幻灯片上添加 `data-auto-animate` 使相同的 HTML 元素产生过渡动画效果。
|
||||
|
||||
---
|
||||
|
||||
<!-- .slide: data-transition="slide" data-auto-animate -->
|
||||
|
||||
## 功能
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-transition="slide" data-auto-animate -->
|
||||
|
||||
## 功能
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
### 代码
|
||||
|
||||
通过启用 `highlight` 插件,你可以对代码块进行高亮。
|
||||
|
||||
你可以使用 `[a-b|c-d]` 语法来分布高亮特定行。
|
||||
|
||||
```js [1-2|3|4]
|
||||
let a = 1;
|
||||
let b = 2;
|
||||
let c = (x) => 1 + 2 + x;
|
||||
c(3);
|
||||
```
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-transition="slide" data-auto-animate -->
|
||||
|
||||
## 功能
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
### 预览模式
|
||||
|
||||
按下 `Esc` 或 `O` 即可在幻灯片获得焦点时进入预览模式。
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-transition="slide" data-auto-animate -->
|
||||
|
||||
## 功能
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
### 全屏模式
|
||||
|
||||
按下 `F` 或 `F11` 即可在幻灯片获得焦点时进入全屏模式。
|
||||
|
||||
--
|
||||
|
||||
<!-- .slide: data-transition="slide" data-auto-animate -->
|
||||
|
||||
## 功能
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
### 缩放
|
||||
|
||||
按下 `alt` (Linux 上使用 `ctrl`) 的同时点击幻灯片的任何元素,即可以向此元素进行放大。
|
||||
|
||||
再次点击即可缩小。
|
||||
|
||||
---
|
||||
|
||||
<!-- .element: class="r-fit-text" -->
|
||||
|
||||
## 结束
|
||||
|
||||
@slideend
|
||||
Reference in New Issue
Block a user