Merge pull request #3 from the-lazy-me/doc/v3

Doc: v3
This commit is contained in:
Junyan Qin
2024-02-19 20:15:06 +08:00
committed by GitHub
50 changed files with 3502 additions and 13685 deletions
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
View File
@@ -1 +0,0 @@
nodeLinker: node-modules
+14 -5
View File
@@ -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
View File
@@ -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"
}
}
+2053 -4954
View File
File diff suppressed because it is too large Load Diff
-38
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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页&nbsp;&nbsp;|&nbsp;&nbsp;MIT 协议, 版权所有 © 2023-present Lazy <br/> <br/> <a href="http://beian.miit.gov.cn/" target="_blank" rel="nofollow noopener">津 ICP 备 2023007711 号</a>&nbsp;&nbsp;<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页&nbsp;&nbsp;|&nbsp;&nbsp;MIT 协议, 版权所有 © 2023-present Lazy <br/> <br/> <a href="http://beian.miit.gov.cn/" target="_blank" rel="nofollow noopener">津 ICP 备 2023007711 号</a>&nbsp;&nbsp;<a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=12011102001610" rel="nofollow noopener" class="beian-police" target="_blank">津公网安备12011102001610号</a>
---
-13
View File
@@ -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/'/>
+61
View File
@@ -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
View File
@@ -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协议
![go-cq配图1.jpg](https://s2.loli.net/2023/08/16/PKUZ7hpxJF8qey5.jpg)
然后确保config文件(不是qchatgpt文件夹的,而是运行gocq生成的)里签名服务器端口和qsign的端口对应
![go-cq配图2.jpg](https://s2.loli.net/2023/08/16/yqA1NTdpIGlFrvX.jpg)
![go-cq配图3.jpg](https://s2.loli.net/2023/08/16/Kkzw1M67tafBVrs.jpg)
当你下载好本项目后,会发现有一个`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)
![反代设置.jpg](https://s2.loli.net/2023/08/16/GeoiZCbLtfg3uqH.jpg)
[**文档另一位编写者**](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时,不会初始化,也不会被调用
+13
View File
@@ -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/` 目录下,请点击左侧目录查看各个文件的详细配置项。
+40
View File
@@ -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`里每个命令类有默认的权限级别
+172
View File
@@ -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
+146
View File
@@ -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接口出现异常时,会返回一个错误的提示给用户。而把报错详情输出在控制台。
+102
View File
@@ -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 <文件名>`指令将其设为默认
+15
View File
@@ -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` 内容进行修改即可。
+95
View File
@@ -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
View File
@@ -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
### 官方群
-158
View File
@@ -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
```
耐心等待,可能需要半个小时,直至如图界面
![图1](https://s2.loli.net/2023/08/11/j5DnQPVCYh1sJ78.jpg)
输入你的 api_key 并回车,然后输机器人 QQ 号再回车
## 第三步:配置签名服务器
打开这个网页,点击 release,点击下载 zip 压缩包
[https://github.com/MrXiaoM/qsign](https://github.com/MrXiaoM/qsign)
将下载好的压缩包解压后里面会有两个文件夹,其中 plugins 文件夹里面的 jar 包上传到 mirai 文件夹下的 plugins 文件夹
![图2](https://s2.loli.net/2023/08/11/KiJQozRlPDdtBUs.png)
txlib 文件夹上传到 mirai 文件夹下
![图3](https://s2.loli.net/2023/08/11/OD8C9Fa156BugcT.png)
## 第四步:登录
手机上打开这个网页
[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
```
回车后可以看到这些提示
![图4](https://s2.loli.net/2023/08/11/MymgAkDBQU4NpE9.jpg)
输入这个命令并回车
```terminal
TxCaptchaHelper
```
然后可以看到提示要在手机端输入请求码,这时打开刚才手机上安装的软件,输入请求码,点击下一步,验证完成后,可以在 FinalShell 上看到提示是否要发送验证码
![图5](https://s2.loli.net/2023/08/11/bI5jzOyGvCiUhTV.jpg)
输入指令并回车
```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"`,反代地址不一定长久有效,且用且珍惜
设置完成后应是如图情况
![反代设置.jpg](https://s2.loli.net/2023/08/16/GeoiZCbLtfg3uqH.jpg)
然后记得保存,并重新运行run-bot
## 补充:Linux部署时报错
### GLIBC 2.XX缺乏
通常此情况发生于基于Red Hat的系统,例如CentOS
这是由于glibc依赖版本不足导致的,此时并不建议去升级glibc。,glibc版本升级可能导致操作系统无法使用,所以请务必谨慎操作,先在同版本操作系统系统模拟测试,将glibc新版本所依赖的软件完成升级后再行升级。
这种情况下,建议使用手动部署
教程请看项目仓库,[点击跳转](./manual.md)
-101
View File
@@ -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 文件夹,如图所示
![图1](https://s2.loli.net/2023/08/11/vH4u7jlYCt1iKEG.png)
![图2](https://s2.loli.net/2023/08/11/bC2ZapYwjMAErq4.png)
## 第三步:登录
手机上打开这个网页
[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"`,反代地址不一定长久有效,且用且珍惜
设置完成后应是如图情况
![反代设置.jpg](https://s2.loli.net/2023/08/16/GeoiZCbLtfg3uqH.jpg)
然后记得保存,并重新运行run-bot
-84
View File
@@ -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`),安装插件时可能会自动安装相应的依赖,此时若`重新创建`容器,已安装的插件将被加载,但所需的增量依赖并未安装,会导致引入问题。您可以删除插件目录后重启,再次安装插件,以便程序可以自动安装插件所需依赖。
+160
View File
@@ -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/'/>
-94
View File
@@ -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)
+40
View File
@@ -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)
@@ -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 的内容,但不包括首尾的双
![image-20231220211712572](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312202117600.png)
> 若启动后登录不成功,请尝试根据[此文档](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 适配器接入。
@@ -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:
![image-20231218170346542](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312181703568.png)
## 第二步:安装 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文件夹`中
![屏幕截图 2023-11-23 223909.png](https://cos.thelazy.cn/pictures/mirai-console%E7%9A%84%E6%95%99%E7%A8%8B202312181655031.png)
@@ -46,7 +48,7 @@ category:
![屏幕截图 2023-11-24 174015.png](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312181714763.png)![屏幕截图 2023-11-24 174650.png](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312181714650.png)
当出现上面的一行绿字时,说明安装完成,到这里输入 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:
![image-20231218174112536](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312181741769.png)
则 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:
![image-20231219214603122](https://cos.thelazy.cn/pictures/qchatgpt%E6%89%8B%E5%8A%A8%E9%83%A8%E7%BD%B2202312192146161.png)
## 第五步:运行mirai
## 运行mirai
到这里,你已经安装并配置成功了,接下来,你就可以登录机器人QQ了
@@ -151,3 +153,7 @@ ticket 后那一坨就是要输入回 mirai 的内容,但不包括首尾的双
然后回车,如果运气好的话,会提示你要收验证码,输入yes并回车,之后把验证码输入上去,然后回车即可成功登录了
如果运气不好,报错code=237了,建议换号
## 后续步骤
查看填写配置信息页,通过 YiriMirai 适配器接入。
+23
View File
@@ -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(机器人密钥)`,接下来进入填写配置信息步骤。
@@ -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主程序,如图,运行成功
![image-20240119085405838](https://cos.thelazy.cn/pictures/shamrock202401190854875.png)
查看填写配置信息页,通过 aiocqhttp 适配器接入。
+38
View File
@@ -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)
+61
View File
@@ -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`),安装插件时可能会自动安装相应的依赖,此时若`重新创建`容器,已安装的插件将被加载,但所需的增量依赖并未安装,会导致引入问题。您可以删除插件目录后重启,再次安装插件,以便程序可以自动安装插件所需依赖。
+75
View File
@@ -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
```
接下来请查看部署消息平台页。
@@ -8,8 +8,6 @@ icon: support
order: 3
author: Lazy
date: 2023-12-18
category:
- 部署教程
---
## 第一步:安装Python
-15
View File
@@ -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/'/>
+1 -1
View File
@@ -13,7 +13,7 @@ index: false
---
以下是QChatGPT实现原理等技术信息,贡献之前请仔细阅读
> 太久没更了,过时了,建议读源码,~~注释还挺全的~~
> 此文档为 QChatGPT 2.x 的技术文档,已过时,3.x 版本请直接查看源码。
> 请先阅读OpenAI API的相关文档 https://beta.openai.com/docs/ ,以下信息假定您已了解OpenAI模型的相关特性及其接口的调用方法。
## 术语
-14
View File
@@ -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
View File
@@ -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`查看帮助信息
![屏幕截图 2](https://cos.thelazy.cn/pictures/qchatgpt%E5%8A%9F%E8%83%BD%E4%BB%8B%E7%BB%8D202312201454898.png)
### 绘图功能
对机器人发送`!draw <图片描述>`即可获得图片,绘图时间较长,请耐心等待。
绘图功能与对话功能是分离的,机器人对话时并不了解其具有绘画能力。
![屏幕截图 3](https://cos.thelazy.cn/pictures/qchatgpt%E5%8A%9F%E8%83%BD%E4%BB%8B%E7%BB%8D202312201454266.png)
### 机器人命令
目前支持的命令
> `<>` 中的为必填参数,使用时请不要包含`<>`
> `[]` 中的为可选参数,使用时请不要包含`[]`
#### 用户级别命令
> 可以使用`!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
```
-491
View File
@@ -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] : 函数执行完成。
```
![Webwlkr插件](https://github.com/RockChinQ/QChatGPT/blob/master/res/screenshots/webwlkr_plugin.png?raw=true)
</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`类
-15
View File
@@ -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/'/>
+8 -1
View File
@@ -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
View File
@@ -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时,不会初始化,也不会被调用
+1 -1
View File
@@ -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:
![图1.png](https://s2.loli.net/2023/08/12/zmZBc8yfV1NL3vg.png)
发送`!reload`即可成功使用
重启程序以加载插件。
-429
View File
@@ -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 -->
## 布局
![Logo](/logo.svg)
<!-- .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
-6331
View File
File diff suppressed because it is too large Load Diff