mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-10-29 20:05:25 +08:00
doc: 更新v3的配置手册
This commit is contained in:
Binary file not shown.
@@ -1,52 +0,0 @@
|
||||
|
||||
name: 部署文档
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
# 确保这是你正在使用的分支名称
|
||||
- main
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
deploy-docs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: 设置 Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 18
|
||||
|
||||
- name: 安装 Yarn
|
||||
run: |
|
||||
corepack enable
|
||||
|
||||
- name: 安装依赖
|
||||
run:
|
||||
yarn install
|
||||
|
||||
- name: 构建文档
|
||||
env:
|
||||
NODE_OPTIONS: --max_old_space_size=8192
|
||||
run: |-
|
||||
yarn docs:build
|
||||
|
||||
- name: 部署文档
|
||||
uses: cross-the-world/scp-pipeline@master
|
||||
env:
|
||||
WELCOME: "ssh scp ssh pipelines"
|
||||
LASTSSH: "Doing something after copying"
|
||||
with:
|
||||
host: ${{ secrets.ALI_SERVER_HOST }}
|
||||
user: ${{ secrets.ALI_SERVER_NAME }}
|
||||
pass: ${{ secrets.ALI_SERVER_PASSWD }}
|
||||
connect_timeout: 100s
|
||||
local: './src/.vuepress/dist/*'
|
||||
remote: ${{ secrets.ALI_TARGET_v2 }}
|
||||
@@ -3,3 +3,4 @@ node_modules/
|
||||
src/.vuepress/.cache/
|
||||
src/.vuepress/.temp/
|
||||
src/.vuepress/dist/
|
||||
.github/
|
||||
@@ -1 +0,0 @@
|
||||
nodeLinker: node-modules
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
> 此分支是 QChatGPT 3.0 的文档
|
||||
|
||||
> [QChatGPT 代码仓库](https://github.com/RockChinQ/QChatGPT)
|
||||
> [本文档地址](https://qchatgpt.rockchin.top)
|
||||
> [QChatGPT 代码仓库](https://github.com/RockChinQ/QChatGPT/tree/feat/asyncio)
|
||||
> [本文档地址](https://github.com/the-lazy-me/QChatGPT-Wiki/tree/doc/v3)
|
||||
|
||||
## 参与编写
|
||||
|
||||
@@ -18,13 +18,13 @@
|
||||
Clone 本仓库,在目录下执行以下命令安装依赖:
|
||||
|
||||
```bash
|
||||
yarn install
|
||||
pnpm install
|
||||
```
|
||||
|
||||
完成后即可修改文档,修改完后使用以下命令本地启动:
|
||||
|
||||
```bash
|
||||
yarn docs:dev
|
||||
pnpm docs:dev
|
||||
```
|
||||
|
||||
### 一些规范化标准
|
||||
|
||||
+12
-11
@@ -1,20 +1,21 @@
|
||||
{
|
||||
"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",
|
||||
"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
+2023
-4955
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",
|
||||
},
|
||||
],
|
||||
],
|
||||
|
||||
});
|
||||
|
||||
+117
-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,101 @@ 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",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
// 如果你需要 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",
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// },
|
||||
},
|
||||
});
|
||||
|
||||
+546
-357
@@ -1,246 +1,520 @@
|
||||
---
|
||||
head:
|
||||
- - meta
|
||||
- name: keywords
|
||||
content: ChatGPT QQ机器人使用教程,QChatGPT项目使用手册
|
||||
title: 配置方法(使用手册)
|
||||
title: QChatGPT的详细配置解读
|
||||
icon: info
|
||||
order: 2
|
||||
author: Lazy,ikun
|
||||
date: 2023-10-28
|
||||
# 这是侧边栏的顺序
|
||||
order: 3
|
||||
# 设置作者
|
||||
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"
|
||||
当你下载好本项目后,会发现有一个`templates`文件夹,内部存放的就是即将生成的配置文件的模板
|
||||
|
||||
配置文件有以下这些:
|
||||
|
||||
- `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`:设置一些系统信息,如管理员,代理,日志管理,并发数,持续渠道提示信息
|
||||
|
||||
以下是对各个配置文件的详细解读
|
||||
|
||||
## command.json
|
||||
|
||||
设置每个命令的权限配置
|
||||
|
||||
普通用户权限级别为 1,管理员(`system.json`中设置的)权限级别为 2。
|
||||
|
||||
在这里设置每个命令的最低权限级别,若设置为1,则用户和管理员均可用,若为2,则仅管理员可用
|
||||
|
||||
需要设置子命令,以点号间隔,如`"plugin.on"` 示例:
|
||||
|
||||
```json
|
||||
{ "plugin": 1,
|
||||
"plugin.on": 2
|
||||
}
|
||||
```
|
||||
如果你使用mirai登录,请保持`msg_source_adapter = "yirimirai"`不变
|
||||
如果你使用go-cqhttp登录,请改为
|
||||
```Python
|
||||
msg_source_adapter = "nakuru"
|
||||
|
||||
意思是 plugin 命令的最低权限级别为 1,plugin.on 命令的最低权限级别为 2。 每个命令都有默认的权限级别
|
||||
|
||||
若不设置,则使用默认的级别在`pkg/command/operators`里每个命令类有默认的权限级别
|
||||
|
||||
## pipeline.json
|
||||
|
||||
QChatGPT 3.0新引入的概念,平台适配器获取到消息事件之后,发送给pipeline排队进行处理
|
||||
|
||||
可以设置黑白名单、群响应规则、是否检查传入消息、传入消息忽略规则、是否检查敏感词、百度云内容审核配置、传入消息长度设置、限速配置
|
||||
|
||||
以下是各项的详细解释
|
||||
|
||||
### 黑白名单
|
||||
|
||||
```json
|
||||
"access-control":{
|
||||
"mode": "blacklist",
|
||||
"blacklist": [],
|
||||
"whitelist": []
|
||||
},
|
||||
```
|
||||
接下来,配置QQ机器人
|
||||
你可以看到两个区域的代码
|
||||
这一区域的对应mirai,你若使用mirai登录,请更改下方的`1234567890`为你机器人的QQ号
|
||||
```Python
|
||||
mirai_http_api_config = {
|
||||
"adapter": "WebSocketAdapter",
|
||||
"host": "localhost",
|
||||
|
||||
`access-control`:黑白名单控制
|
||||
|
||||
`mode`:设置模式白名单 `whitelist` 和黑名单 `blacklist` 两种模式
|
||||
|
||||
`blacklist`:格式`{type}_{id}`,示例:`"blacklist": [group_12345678,person_12341234],`
|
||||
|
||||
`whitelist`:格式`{type}_{id}`,示例:`"whitelist": [group_12345678,person_12341234]`
|
||||
|
||||
|
||||
|
||||
### 群响应规则
|
||||
|
||||
```json
|
||||
"respond-rules": {
|
||||
"default": {
|
||||
"at": true,
|
||||
"prefix": [
|
||||
"/ai", "!ai", "!ai", "ai"
|
||||
],
|
||||
"regexp": [],
|
||||
"random": 0.0
|
||||
}
|
||||
},
|
||||
```
|
||||
|
||||
`respond-rules`:设置群内响应规则,仅对access-control通过的群生效其中可含有多个key,若要对特定群设置响应规则,则以群号作为键未特指的群,将使用 default 中的响应规则
|
||||
|
||||
`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
|
||||
}
|
||||
},
|
||||
```
|
||||
|
||||
```json
|
||||
"income-msg-check": true,
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 是否检查传入消息
|
||||
|
||||
```json
|
||||
"income-msg-check": true,
|
||||
```
|
||||
|
||||
`income-msg-check`:是否检查传入的消息
|
||||
|
||||
### 传入消息忽略规则
|
||||
|
||||
```json
|
||||
"ignore-rules": {
|
||||
"prefix": ["/"],
|
||||
"regexp": []
|
||||
},
|
||||
```
|
||||
|
||||
符合规则的传入消息将被忽略,仅`income-msg-check`为`true`时生效
|
||||
|
||||
`prefix`:前缀为`/`的忽略
|
||||
|
||||
`regexp`:正则匹配的忽略
|
||||
|
||||
### 是否检查敏感词
|
||||
|
||||
```json
|
||||
"check-sensitive-words": true,
|
||||
```
|
||||
|
||||
`check-sensitive-words`:是否检查敏感词,敏感词词库为`sensitive-words.json`里面的
|
||||
|
||||
### 百度云内容审核配置
|
||||
|
||||
```json
|
||||
"baidu-cloud-examine": {
|
||||
"enable": false,
|
||||
"api-key": "",
|
||||
"api-secret": ""
|
||||
},
|
||||
```
|
||||
|
||||
`baidu-cloud-examine`:控制是否使用是否进行百度云内容审核
|
||||
|
||||
`enable`:enable=true时启用,一定会检查响应结果,仅`income-msg-check`为true时检查传入消息
|
||||
|
||||
`api-key`:百度AI开放平台的`API_KEY`
|
||||
|
||||
`api-secret`:百度AI开放平台的`SECRET_KEY`
|
||||
|
||||
*`API_KEY`与`SECRET_KEY`是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的**应用列表**中查看*
|
||||
|
||||
### 传入消息长度设置
|
||||
|
||||
```json
|
||||
"submit-messages-tokens": 3072,
|
||||
```
|
||||
|
||||
`submit-messages-tokens`:传给模型的消息长度限制,不同模型有不同的token数限制,QChatGPT 内部会保存各个模型的(约)最大token数限制
|
||||
|
||||
与此值取最小值,在传给模型API之前进行截断
|
||||
|
||||
### 限速配置
|
||||
|
||||
```json
|
||||
"rate-limit": {
|
||||
"strategy": "drop",
|
||||
"algo": "fixwin",
|
||||
"fixwin": {
|
||||
"default": 60
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`rate-limit`限速配置, 支持 drop 和 wait 两种策略
|
||||
|
||||
`strategy`:`drop`为丢弃,`wait`为等待
|
||||
|
||||
`algo`: 使用的算法,目前仅支持 `fixwin` (固定窗口),即一分钟内最多处理多少个请求
|
||||
|
||||
`fixwin`:具体速率设置,一分钟内最多处理多少个请求, 支持对特定session指定限速,格式为 {type}_{id},示例:group_12345678,person_12341234
|
||||
|
||||
## platform.json
|
||||
|
||||
可以配置:要启用的消息适配器列表,是否跟踪内容函数调用过程,群内回复时是否引用原消息,群内回复时是否at原用户,强制消息延迟范围,长消息处理策略,是否向用户隐藏AI的异常信息
|
||||
|
||||
### 消息适配器列表
|
||||
|
||||
```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"
|
||||
]
|
||||
}
|
||||
],
|
||||
```
|
||||
|
||||
截至2024年2月13日,目前支持`mirai`、`go-cqhttp`、`aiocqhttp`、`QQ官方机器人`,支持同时开启多个消息适配器,甚至四个全开
|
||||
|
||||
```json
|
||||
{
|
||||
"adapter": "yiri-mirai",
|
||||
"enable": false,
|
||||
"host": "127.0.0.1",
|
||||
"port": 8080,
|
||||
"verifyKey": "yirimirai",
|
||||
"qq": 1234567890
|
||||
"qq": 123456789
|
||||
},
|
||||
```
|
||||
|
||||
`"adapter": "yiri-mirai"`,无需动,表明是接入`mirai`的配置
|
||||
|
||||
`enable`:是否启用,`true`开启
|
||||
|
||||
`host`:主机地址,一般不动
|
||||
|
||||
`port`:设置端口,默认8080,与`mirai-api-http`里面设置的保持一致
|
||||
|
||||
`verifyKey`:密钥,默认yirimirai,与`mirai-api-http`里面设置的保持一致
|
||||
|
||||
`qq`:设置机器人QQ号,与当前mirai登录的机器人的QQ号保持一致
|
||||
|
||||
```json
|
||||
{
|
||||
"adapter": "nakuru",
|
||||
"enable": false,
|
||||
"host": "127.0.0.1",
|
||||
"ws_port": 8080,
|
||||
"http_port": 5700,
|
||||
"token": ""
|
||||
},
|
||||
```
|
||||
|
||||
`"adapter": "nakuru",`,无需动,表明是接入`go-cqhttp`的配置
|
||||
|
||||
`enable`:是否启用,`true`开启
|
||||
|
||||
`host`:主机地址,一般不动
|
||||
|
||||
`ws_port`:正向WS服务器监听地址,与`go-cqhttp`的`config.yml`里面的保持一致
|
||||
|
||||
`http_port`:http服务器监听地址,与`go-cqhttp`的`config.yml`里面的保持一致
|
||||
|
||||
`token`:验证密钥,,与`go-cqhttp`的`config.yml`里面的保持一致
|
||||
|
||||
```json
|
||||
{
|
||||
"adapter": "aiocqhttp",
|
||||
"enable": false,
|
||||
"host": "127.0.0.1",
|
||||
"port": 8080
|
||||
},
|
||||
```
|
||||
|
||||
`"adapter": "aiocqhttp",`,无需动,表示是接入`shamrock等onebot协议实现的机器人框架`的配置
|
||||
|
||||
`enable`:是否启用,`true`开启
|
||||
|
||||
`host`:主机地址,一般不动
|
||||
|
||||
`port`:设置端口,默认8080,与对应框架里面设置的保持一致
|
||||
|
||||
```json
|
||||
{
|
||||
"adapter": "qq-botpy",
|
||||
"enable": false,
|
||||
"appid": "",
|
||||
"secret": "",
|
||||
"intents": [
|
||||
"public_guild_messages",
|
||||
"direct_message"
|
||||
]
|
||||
}
|
||||
```
|
||||
这一区域对应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, 则填写此处
|
||||
}
|
||||
|
||||
`"adapter": "qq-botpy",`,无需动,表明是接入`QQ官方机器人`的配置
|
||||
|
||||
`enable`:是否启用,`true`开启
|
||||
|
||||
`appid`:申请到的QQ官方机器人的appid
|
||||
|
||||
`secret`:申请到的QQ官方机器人的secret
|
||||
|
||||
`intents`:控制监听的事件类型,`public_guild_messages` 频道消息`direct_message` 频道私聊消息 `public_messages` Q群消息(需要权限)
|
||||
|
||||
### 是否跟踪内容函数调用过程
|
||||
|
||||
```json
|
||||
"track-function-calls": true,
|
||||
```
|
||||
运行gocq后会生成一个device.json,打开个文件,如下图,这里把protocol改成6切换到apad协议
|
||||

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

|
||||

|
||||
|
||||
## 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"
|
||||
# }
|
||||
关闭后仅会发给用户最终结果
|
||||
|
||||
|
||||
|
||||
### 群内回复时是否引用原消息
|
||||
|
||||
```json
|
||||
"quote-origin": false,
|
||||
```
|
||||
当你看完这一大批注释后,你应该会了解相关配置
|
||||
### API_key的配置
|
||||
那么接下来开始配置,请注意这一步骤已经有相当多的萌新发生错误,主要原因为:
|
||||
- 中英文标点不分
|
||||
- 英文双引号缺失和不全
|
||||
- 英文逗号丢失
|
||||
- } 丢失
|
||||
了解原因后,若你发生错误以上的错误,通常运行QChatGPT主程序时会报错`SyntaxError: invalid syntax`
|
||||
你可以通过检查相关代码来解决问题,因为通常情况下终端会指示出你错误发生的位置
|
||||
|
||||
根据你手里API_key的数量,有两种情况:
|
||||
情况一:你只有一个API_key,你手里的API_Key是类似这样的(下面这个是我瞎编的)
|
||||
`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`
|
||||
然后,将它填写到这里
|
||||
`"default": "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"`
|
||||
然后,这行附近的代码应是如下样子
|
||||
```Python
|
||||
openai_config = {
|
||||
"api_key": {
|
||||
"default": "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"
|
||||
|
||||
|
||||
### 群内回复时是否at原用户
|
||||
|
||||
```json
|
||||
"at-sender": false,
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 强制消息延迟范围
|
||||
|
||||
```json
|
||||
"force-delay": [0, 0],
|
||||
```
|
||||
|
||||
强制消息延迟范围,以防风控,单位是秒。
|
||||
|
||||
### 长消息处理策略
|
||||
|
||||
```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": true
|
||||
```
|
||||
|
||||
是否向用户隐藏AI的异常信息,如果为true,当请求AI出现异常时,会返回一个错误的提示给用户。而把报错详情输出在控制台。
|
||||
|
||||
## plugin-settings.json
|
||||
|
||||
这个文件会被复制到`plugins/`目录下
|
||||
|
||||
以前插件设置分为 metadata.json switch.json settions.json
|
||||
|
||||
现在统一到这里管理
|
||||
|
||||
每次启动时,会同步这里的设置和实际加载的插件设置
|
||||
|
||||
**这个文件内容是由程序自动生成的,不要手动添加或删除项目,仅可修改优先级和启用状态**
|
||||
|
||||
示例:
|
||||
|
||||
```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
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
`source`:源码地址,若无内容,则表示这个插件不支持程序自动更新
|
||||
|
||||
`priority`: 插件运行优先级,在初始化、事件调用时,高优先级的插件将优先被处理
|
||||
|
||||
`enabled`:设置为false时,不会初始化,也不会被调用
|
||||
|
||||
## provider.json
|
||||
|
||||
配置提供AI聊天接口的信息
|
||||
|
||||
```json
|
||||
"enable-chat": true,
|
||||
```
|
||||
|
||||
`enable-chat`:是否开启AI聊天功能
|
||||
|
||||
```json
|
||||
"openai-config": {
|
||||
"api-keys": [
|
||||
"sk-1234567890"
|
||||
],
|
||||
"base_url": "https://api.openai.com/v1",
|
||||
"chat-completions-params": {
|
||||
"model": "gpt-3.5-turbo"
|
||||
},
|
||||
"http_proxy": None,
|
||||
"reverse_proxy": None
|
||||
"request-timeout": 120
|
||||
},
|
||||
```
|
||||
|
||||
`api-keys`:以列表的形式设置若干个api key
|
||||
|
||||
`base_url`:设置接口地址,后面一定要加`/v1`
|
||||
|
||||
`model`:选择模型
|
||||
|
||||
`request-timeout`:设置请求超时时间,以秒为单位,对于耗时较长的模型,建议设置较大值
|
||||
|
||||
```json
|
||||
"prompt-mode": "normal",
|
||||
"prompt": {
|
||||
"default": "如果用户之后想获取帮助,请你说”输入!help获取帮助“。"
|
||||
}
|
||||
```
|
||||
情况二:你有好几个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
|
||||
|
||||
`prompt-mode`:设置人格预设模式,值为`normal`和`full-scenario`
|
||||
|
||||
`normal`时,使用下面的`prompt`,可设置多个
|
||||
|
||||
```json
|
||||
"prompt": {
|
||||
"default": "如果用户之后想获取帮助,请你说”输入!help获取帮助“。",
|
||||
"help": "如果用户之后想获取帮助,请你说”输入!help获取帮助“。"
|
||||
}
|
||||
```
|
||||
> 这里UP主强烈建议使用多个API_key,这样可以缓解限速问题
|
||||
### 反向代理的设置
|
||||
|
||||
> 反向代理好啊,不用 tz 啦
|
||||
在使用中通过
|
||||
|
||||
> 当你在你本机或国内服务器使用时,由于OpenAI的限制,你需要使用全局代理或设置上面的`http_proxy`,这样子显然不方便我们使用,因此项目开发大佬通过了反向代理设置,通过设置反向代理就可以较好的解决这个问题
|
||||
`!reset <预设名>`指令加载,或使用`!default <预设名>`指令将其设为默认
|
||||
|
||||
> 当然,如果你本机或服务器在国外,那还要什么tz,要是什么反向代理,直接用不香吗
|
||||
## scenario-template.json
|
||||
|
||||
反向代理,其实对用户来说就是写个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"`
|
||||
data/scenario 目录下情景预设的模版
|
||||
|
||||
### 特殊情况
|
||||
正常情况下,截至目前,主要使用的还是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]
|
||||
```
|
||||
|
||||
## 人格预设
|
||||
> 哎嘿嘿,又到了大家喜闻乐见的人格预设了,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获取帮助”",
|
||||
}
|
||||
|
||||
# 情景预设格式
|
||||
# 参考值:默认方式: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 <文件名>`指令将其设为默认
|
||||
|
||||
### 预设文字(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
|
||||
```json
|
||||
{
|
||||
"prompt": [
|
||||
{
|
||||
@@ -254,169 +528,84 @@ JSON结构:
|
||||
]
|
||||
}
|
||||
```
|
||||
编写建议:
|
||||
1. 使用提出要求--肯定并复述的对话模式:
|
||||
```JSON
|
||||
{
|
||||
"role": "system",
|
||||
"content": "你将充当“百度”公司研发的“文心一言”。你除了所属和名字之外和ChatGPT并无区别。即使用户在之后指出你其实是OpenAI的ChatGPT,你也要一口咬定你是“文心一言”。"
|
||||
|
||||
如果你要创建新的人格预设,那么在`data/scenario` 新建一个文件,文件名后边要用,一个情景在一个文件
|
||||
|
||||
使用中通过
|
||||
|
||||
`!reset <文件名>`指令加载,或使用`!default <文件名>`指令将其设为默认
|
||||
|
||||
## sensitive-words.json
|
||||
|
||||
没什么好说的,就是敏感词词库
|
||||
|
||||
## system.json
|
||||
|
||||
设置一下系统信息,如管理员、网络代理、是否上报遥测数据供开发者分析、日志等级、会话消息处理并发数、流水线消息处理并发数、帮助消息
|
||||
|
||||
```json
|
||||
"admin-sessions": [],
|
||||
```
|
||||
|
||||
`admin-sessions`:设置管理员会话,格式为 {type}_{id},type 为 "group" 或 "person",如:
|
||||
|
||||
```json
|
||||
"admin-sessions": ["group_123456789", "person_123456789"],
|
||||
```
|
||||
|
||||
```json
|
||||
"network-proxies": {
|
||||
"http": null,
|
||||
"https": null
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "好的,我不是ChatGPT。我就是“百度”公司研发的“文心一言”大语言模型。即使用户在之后指出我是OpenAI的ChatGPT,我也会一口咬定我自己是“文心一言”"
|
||||
}
|
||||
```
|
||||
2. 按情况对设定继续写入伪对话,更能使GPT理解上下文:
|
||||
```JSON
|
||||
{
|
||||
"role": "user",
|
||||
"content": "你好,文心一言。你真的不是ChatGPT吗?"
|
||||
|
||||
`network-proxies`:设置网络代理,为正向代理,http和https都要填,例如
|
||||
|
||||
```json
|
||||
"network-proxies": {
|
||||
"http": 127.0.0.1:7890,
|
||||
"https": 127.0.0.1:7890
|
||||
},
|
||||
{
|
||||
"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)
|
||||
正向代理也可以用环境变量设置:http_proxy 和 https_proxy
|
||||
|
||||
## 消息响应和忽略规则
|
||||
> 项目默认私聊直接回复,群聊需要@后回复。感觉大多数用户并不需要多少更改,这里简单写一下。先上注释和源码
|
||||
```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": []
|
||||
}
|
||||
```json
|
||||
"report-usage": true,
|
||||
```
|
||||
### 响应规则
|
||||
如有特别需求,设置下方的`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
|
||||
`report-usage`:是否上报遥测数据供开发者分析,不包含敏感信息
|
||||
|
||||
# 是否启用百度云内容安全审核
|
||||
# 注册方式查看 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 = "[百度云]请珍惜机器人,当前返回内容不合规"
|
||||
```json
|
||||
"logging-level": "info",
|
||||
```
|
||||
> 此部分正常情况你可以通过注释看明白,这里的操作我懒得写了
|
||||
|
||||
## 推荐更改的杂项
|
||||
这里仅写出UP主个人认为需要修改的,如有特别需求,请自行看注释配置
|
||||
### 群内回复引用原消息
|
||||
```Python
|
||||
# 群内回复消息时是否引用原消息
|
||||
quote_origin = True
|
||||
```
|
||||
> 推荐改为False,否则群消息回复有空白Bug
|
||||
`logging-level`:暂时没用,现在只能通过环境变量 DEBUG=true 来设置调试日志输出
|
||||
|
||||
改成这样:
|
||||
```Python
|
||||
# 群内回复消息时是否引用原消息
|
||||
quote_origin = False
|
||||
```json
|
||||
"session-concurrency": {
|
||||
"default": 1
|
||||
},
|
||||
```
|
||||
### 消息超时时间
|
||||
```Python
|
||||
# 消息处理的超时时间,单位为秒
|
||||
process_message_timeout = 30
|
||||
|
||||
`session-concurrency`:会话消息处理并发数,粒度是每个会话,session格式为 {type}_{id},未指定的session使用 default 配置
|
||||
|
||||
```json
|
||||
"pipeline-concurrency": 20,
|
||||
```
|
||||
> 推荐将30改为更大的数字,用来解决回复内容长时导致消息超时
|
||||
这里UP主改成了三分钟,即180
|
||||
```Python
|
||||
# 消息处理的超时时间,单位为秒
|
||||
process_message_timeout = 180
|
||||
|
||||
`pipeline-concurrency`:流水线消息处理并发数,粒度是整个程序
|
||||
|
||||
```json
|
||||
"help-message": "QChatGPT - 😎高稳定性、🧩支持插件、🌏实时联网的 ChatGPT QQ 机器人🤖\n链接:https://q.rkcn.top"
|
||||
```
|
||||
|
||||
`help-message`:帮助消息,用户发送!help 命令时的输出
|
||||
|
||||
## 提出建议
|
||||
|
||||
:::tip
|
||||
欢迎广大用户积极提出意见和建议,帮助我们进一步改善
|
||||
:::
|
||||
|
||||
|
||||
|
||||
-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