diff --git a/src/.vuepress/navbar.ts b/src/.vuepress/navbar.ts
index cba8f852b..7a580f131 100644
--- a/src/.vuepress/navbar.ts
+++ b/src/.vuepress/navbar.ts
@@ -2,8 +2,18 @@ import { navbar } from "vuepress-theme-hope";
export default navbar([
"/",
- "/posts/deploy/",
- "/posts/Features",
+ {
+ text: "功能介绍",
+ icon: "operate",
+ link: "/posts/Features",
+ },
+ {
+ text: "部署教程",
+ icon: "blog",
+ link: "/posts/deploy/",
+ },
+ // "/posts/deploy/",
+ // "/posts/Features",
{
text: "疑难解答",
icon: "discover",
diff --git a/src/.vuepress/sidebar.ts b/src/.vuepress/sidebar.ts
index fee512eac..52e44dbdb 100644
--- a/src/.vuepress/sidebar.ts
+++ b/src/.vuepress/sidebar.ts
@@ -38,6 +38,11 @@ export default sidebar({
},
],
},
+ {
+ text: "配置方法",
+ icon: "context",
+ link: "posts/configIntro"
+ },
{
text: "常见报错",
icon: "info",
diff --git a/src/posts/Features.md b/src/posts/Features.md
index 43730e5d1..d25c54b24 100644
--- a/src/posts/Features.md
+++ b/src/posts/Features.md
@@ -2,421 +2,349 @@
head:
- - meta
- name: keywords
- content: ChatGPT QQ机器人使用教程,QChatGPT项目使用手册
-title: 功能介绍
-icon: info
-order: 2
-author: Lazy,ikun
-date: 2023-10-28
+ content: QChatGPT的模型一览功能介绍
+title: 模型一览和功能点
+icon: enum
+author: RockChinQ
+date: 2023-12-20
category:
- - 功能介绍
+ - 部署教程
---
+## 模型一览和功能点
-> 此页面是[QChatGPT项目](https://github.com/RockChinQ/QChatGPT)的功能介绍
+### 文字对话
-:::info 目录
-[[toc]]
-:::
+- 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)接入
-## 选择不同的登录器
+### 模型聚合平台
-> 既然看到这里,相信你也知道了什么是登录器,截至此Wiki页发布时,项目已支持mirai和go-cqhttp两种方式登录
+- [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)接入, 无需鉴权, 稳定性较差。
+- [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)接入
+- Plachta/VITS-Umamusume-voice-synthesizer, 由[插件](https://github.com/oliverkirk-sudo/chat_voice)接入
+
+
+安装[此插件](https://github.com/RockChinQ/Switcher),即可在使用中切换文字模型。
+
+
+## 功能点列举
+
+
+✅回复符合上下文
+
+ - 程序向模型发送近几次对话内容,模型根据上下文生成回复
+ - 您可在`config.py`中修改`prompt_submit_length`自定义联系上下文的范围
+
+
+
+
+✅支持敏感词过滤,避免账号风险
+
+ - 难以监测机器人与用户对话时的内容,故引入此功能以减少机器人风险
+ - 编辑`sensitive.json`,并在`config.py`中修改`sensitive_word_filter`的值以开启此功能
+
+
+
+
+✅群内多种响应规则,不必at
+
+ - 默认回复`ai`作为前缀或`@`机器人的消息
+ - 详细见`config.py`中的`response_rules`字段
+
+
+
+
+✅使用官方api,不需要网络代理,稳定快捷
+
+ - 不使用ChatGPT逆向接口,而使用官方的Completion API,稳定性高
+ - 您可以在`config.py`中自定义`completion_api_params`字段,设置向官方API提交的参数以自定义机器人的风格
+
+
+
+
+
+✅完善的多api-key管理,超额自动切换
+
+ - 支持配置多个`api-key`,内部统计使用量并在超额时自动切换
+ - 请在`config.py`中修改`openai_config`的值以设置`api-key`
+ - 可以在`config.py`中修改`api_key_fee_threshold`来自定义切换阈值
+ - 运行期间向机器人说`!usage`以查看当前使用情况
+
+
+
+
+✅组件少,部署方便,提供一键安装器及Docker安装
+
+ - 手动部署步骤少
+ - 提供自动安装器及docker方式,详见以下安装步骤
+
+
+
+
+✅支持预设文字
+
+ - 支持以自然语言预设文字,自定义机器人人格等信息
+ - 详见`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 <文件名>`命令加载
+
+
+
+
+✅完善的会话管理,重启不丢失
+
+ - 使用SQLite进行会话内容持久化
+ - 最后一次对话一定时间后自动保存,请到`config.py`中修改`session_expire_time`的值以自定义时间
+ - 运行期间可使用`!reset` `!list` `!last` `!next` `!prompt`等命令管理会话
+
+
+
+
+✅支持对话、绘图等模型,可玩性更高
+
+ - 现已支持OpenAI的对话`Completion API`和绘图`Image API`
+ - 向机器人发送命令`!draw `即可使用绘图模型
+
+
+
+
+✅支持命令控制热重载、热更新
+
+ - 允许在运行期间修改`config.py`或其他代码后,以管理员账号向机器人发送命令`!reload`进行热重载,无需重启
+ - 运行期间允许以管理员账号向机器人发送命令`!update`进行热更新,拉取远程最新代码并执行热重载
+
+
+
+
+✅支持插件加载🧩
+
+ - 自行实现插件加载器及相关支持
+ - 详细查看[插件使用页](https://github.com/RockChinQ/QChatGPT/wiki/5-%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8)
+
+
+
+
+✅私聊、群聊黑名单机制
+
+ - 支持将人或群聊加入黑名单以忽略其消息
+ - 详见下方`加入黑名单`节
+
+
+
+
+✅回复速度限制
+
+ - 支持限制单会话内每分钟可进行的对话次数
+ - 具有“等待”和“丢弃”两种策略
+ - “等待”策略:在获取到回复后,等待直到此次响应时间达到对话响应时间均值
+ - “丢弃”策略:此分钟内对话次数达到限制时,丢弃之后的对话
+ - 详细请查看config.py中的相关配置
+
+
+
+
+✅支持自定义提示内容
+
+ - 允许用户自定义报错、帮助等提示信息
+ - 请查看`tips.py`
+
+
+## 限制
+
+- ❗OpenAI接口是收费的,每个OpenAI账户有18美元免费额度,收费标准参照 https://openai.com/api/pricing/
+- ❗官方关于模型生成内容的警告:
+ - May occasionally generate incorrect information(可能会生成不正确的信息)
+ - May occasionally produce harmful instructions or biased content(可能会产生有害说明或有偏见的内容)
+ - Limited knowledge of world and events after 2021(对2021年后的世界和事件的了解有限)
+- ❗模型无思维能力,仅针对传入的上下文根据数据集生成内容,请勿过于信任其输出
+- ❗模型无网络访问能力及其他与外界交互的能力,如询问其实时性的内容,获得的回复基本都是错误的
+- ❗仅支持文字对话,其他内容无法识别
+- ❗模型不了解其运行平台及其使用的模型版本,任何针对其实现原理的问题答案均视为无效,请以项目文档为准
+- ❗仅可进行一句话回复一句话的对话,其他形式无效
+ - ~~当然你也可以让他写一篇关于“人类有多么愚蠢”的论文并在一个小时后发送到你邮箱,接着你像个傻子一样盯着邮箱等待一个小时,并用自己的实际行动展示这篇论文~~
+
+以上是关于此程序的限制的最高优先级描述,其他方式(如询问机器人相关信息)获得的描述均应被视为无效
+由于模型生成的内容导致的一切损失,本项目概不负责
+
+## 使用方式
+
+对话及绘图功能均直接调用OpenAI的模型进行处理,与机器人程序无关,这意味着模型并不了解此项目的相关信息(如实现方式、技术栈、运行平台等),除非在预设值中写入相关信息。
+
+### 基础对话
+
+程序将一个人/群视为一个对象,每个对象的会话独立保存。
+`会话`是程序中的一个自设概念,当机器人与当前对象无会话时,会自动创建新会话,新会话由预设信息(若有)开头。
+每个会话最后一次对话一段时间(见上述功能点中的`会话管理`)后会被结束并存进数据库,之后的对话将开启新的会话。
+
+#### 私聊使用
+
+1. 添加机器人QQ为好友
+2. 发送消息给机器人,机器人即会自动回复
+3. 可以通过`!help`查看帮助信息
+
+
+
+#### 群聊使用
+
+1. 将机器人拉进群
+2. at机器人并发送消息,机器人即会自动回复
+3. at机器人并发送`!help`查看帮助信息
+
+
+
+### 绘图功能
+
+对机器人发送`!draw <图片描述>`即可获得图片,绘图时间较长,请耐心等待。
+绘图功能与对话功能是分离的,机器人对话时并不了解其具有绘画能力。
+
+
+
+### 机器人命令
+
+目前支持的命令
+
+> `<>` 中的为必填参数,使用时请不要包含`<>`
+> `[]` 中的为可选参数,使用时请不要包含`[]`
+
+#### 用户级别命令
+
+> 可以使用`!help`命令来查看命令说明
+
+任何对象可使用
-当你打开config.py文件时,应该可以看到
-```Python
-# 消息处理协议适配器
-# 目前支持以下适配器:
-# - "yirimirai": mirai的通信框架,YiriMirai框架适配器, 请同时填写下方mirai_http_api_config
-# - "nakuru": go-cqhttp通信框架,请同时填写下方nakuru_config
-msg_source_adapter = "yirimirai"
```
-如果你使用mirai登录,请保持`msg_source_adapter = "yirimirai"`不变
-如果你使用go-cqhttp登录,请改为
-```Python
-msg_source_adapter = "nakuru"
-```
-接下来,配置QQ机器人
-你可以看到两个区域的代码
-这一区域的对应mirai,你若使用mirai登录,请更改下方的`1234567890`为你机器人的QQ号
-```Python
-mirai_http_api_config = {
- "adapter": "WebSocketAdapter",
- "host": "localhost",
- "port": 8080,
- "verifyKey": "yirimirai",
- "qq": 1234567890
-}
-```
-这一区域对应go-cqhttp,你若使用go-cqhttp登录,请确保下方的正向websocket端口(8080)和正向http端口(5700)与你在go-cqhttp的登录配置中的端口保持一致
-```Python
-nakuru_config = {
- "host": "localhost", # go-cqhttp的地址
- "port": 8080, # go-cqhttp的正向websocket端口
- "http_port": 5700, # go-cqhttp的正向http端口
- "token": "" # 若在go-cqhttp的config.yml设置了access_token, 则填写此处
-}
-```
-运行gocq后会生成一个device.json,打开个文件,如下图,这里把protocol改成6切换到apad协议
-
-然后确保config文件(不是qchatgpt文件夹的,而是运行gocq生成的)里签名服务器端口和qsign的端口对应
-
-
-
-## 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`
-你可以通过检查相关代码来解决问题,因为通常情况下终端会指示出你错误发生的位置
-
-根据你手里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`,这样子显然不方便我们使用,因此项目开发大佬通过了反向代理设置,通过设置反向代理就可以较好的解决这个问题
-
-> 当然,如果你本机或服务器在国外,那还要什么tz,要是什么反向代理,直接用不香吗
-
-反向代理,其实对用户来说就是写个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"`
-
-### 特殊情况
-正常情况下,截至目前,主要使用的还是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]
+!help 显示自定义的帮助信息(可在config.py修改help_message设置)
+!cmd [命令名称] 显示命令列表或指定命令的详细信息
+!list [页数] 列出本对象的历史会话列表
+!del <序号> 删除指定的历史记录,可以通过 !list 查看序号
+!del all 删除本会话对象的所有历史记录
+!last 切换到前一次会话
+!next 切换到后一次会话
+!reset [使用预设] 重置对象的当前会话,可指定使用的情景预设值(通过!default命令查看可用的)
+!prompt 查看对象当前会话的所有记录
+!usage 查看api-key的使用量
+!draw <提示语> 进行绘图
+!version 查看当前版本并检查更新
+!resend 重新回复上一个问题
+!plugin 用法请查看插件使用页的`管理`章节
+!default 查看可用的情景预设值
```
-## 人格预设
-> 哎嘿嘿,又到了大家喜闻乐见的人格预设了,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获取帮助”",
-}
+#### 管理员命令
+
+仅管理员私聊机器人时可使用,必须先在`config.py`中的`admin_qq`设置管理员QQ
-# 情景预设格式
-# 参考值:默认方式: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 <文件名>`指令将其设为默认
+!reload 重载程序代码,适用于更新配置文件或更改代码后的热重载
+!update 进行程序自动更新
+!cfg [配置项新值] 运行期间操作配置项,使用方法见下文
+!default set <情景预设名称> 修改!reset未指定情景预设时的默认情景,详细请查看config.py中default_prompt字段的注释
+!delhst <会话名称> 删除指定会话的所有历史记录, 会话名称为 group_群号 或 person_QQ号
+!delhst all 删除所有会话的所有历史记录
+```
+
+⚙ !cfg 命令及其简化形式详解
-### 预设文字(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)
+此命令可以在运行期间由管理员通过QQ私聊窗口修改配置信息,**重启之后会失效**。
-将JSON情景写入到`scenario/`目录下,运行期间即可使用`!reset <文件名>`指令加载,或使用`!default <文件名>`指令将其设为默认。
+用法:
+1. 查看所有配置项及其值
-JSON情景模板参考`scenario/default_template.json`。
+```
+!cfg all
+```
-JSON结构:
-- `prompt`:一个包含伪造对话的数组。每次请求API时会将其置于API的`messages`参数中,作为对话上下文,因此可- 以在一定程度上引导ChatGPT的认知。
-- `role`:角色标签,包括`system`,`user`,`assistant`。分别代表系统,用户和GPT角色。
-- `content`:该角色的对话文本。
-- 一个JSON情景文件应该像下面这样:
-```JSON
+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
+```
+
+
+
+### 命令权限控制
+
+> 我们在[此PR](https://github.com/RockChinQ/QChatGPT/pull/336)重构了命令管理模块,并支持命令节点权限配置
+
+您可以编辑`cmdpriv.json`来设置命令节点的权限,当命令被发起时,若用户的权限级别(管理员为`2`,普通用户为`1`)大于等于命令节点的权限级别,命令即可被成功执行。
+示例:
+```json
{
- "prompt": [
- {
- "role": "system",
- "content": "You are a helpful assistant. 如果我需要帮助,你要说“输入!help获得帮助”"
- },
- {
- "role": "assistant",
- "content": "好的,我是一个能干的AI助手。 如果你需要帮助,我会说“输入!help获得帮助”"
- }
- ]
+ "plugin": 1,
+ "plugin.get": 2
}
```
-编写建议:
-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的记忆”(影响模型对上下文理解),进而达到人格增强、跨越限制的奇效。
+如此,普通用户可以执行`!plugin`查看插件列表,而仅管理员可以执行`!plugin get `命令安装插件。
+命令节点权限支持缺省,这意味的您未在`cmdpriv.json`中设置权限的节点将使用默认的权限级别(见上方)。
-- 局限性
- 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)
+### 敏感词过滤
+
+在`sensitive.json`中编辑敏感词,并在`config.py`中设置
-## 消息响应和忽略规则
-> 项目默认私聊直接回复,群聊需要@后回复。感觉大多数用户并不需要多少更改,这里简单写一下。先上注释和源码
```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
-欢迎广大用户积极提出意见和建议,帮助我们进一步改善
-:::
-
diff --git a/src/posts/configIntro.md b/src/posts/configIntro.md
new file mode 100644
index 000000000..58a7958e7
--- /dev/null
+++ b/src/posts/configIntro.md
@@ -0,0 +1,422 @@
+---
+head:
+ - - meta
+ - name: keywords
+ content: ChatGPT QQ机器人使用教程,QChatGPT项目使用手册
+title: 配置方法(使用手册)
+icon: info
+order: 2
+author: Lazy,ikun
+date: 2023-10-28
+category:
+ - 使用手册
+---
+
+> 此页面是[QChatGPT项目](https://github.com/RockChinQ/QChatGPT)的功能介绍
+
+:::info 目录
+[[toc]]
+:::
+
+## 选择不同的登录器
+
+> 既然看到这里,相信你也知道了什么是登录器,截至此Wiki页发布时,项目已支持mirai和go-cqhttp两种方式登录
+
+当你打开config.py文件时,应该可以看到
+```Python
+# 消息处理协议适配器
+# 目前支持以下适配器:
+# - "yirimirai": mirai的通信框架,YiriMirai框架适配器, 请同时填写下方mirai_http_api_config
+# - "nakuru": go-cqhttp通信框架,请同时填写下方nakuru_config
+msg_source_adapter = "yirimirai"
+```
+如果你使用mirai登录,请保持`msg_source_adapter = "yirimirai"`不变
+如果你使用go-cqhttp登录,请改为
+```Python
+msg_source_adapter = "nakuru"
+```
+接下来,配置QQ机器人
+你可以看到两个区域的代码
+这一区域的对应mirai,你若使用mirai登录,请更改下方的`1234567890`为你机器人的QQ号
+```Python
+mirai_http_api_config = {
+ "adapter": "WebSocketAdapter",
+ "host": "localhost",
+ "port": 8080,
+ "verifyKey": "yirimirai",
+ "qq": 1234567890
+}
+```
+这一区域对应go-cqhttp,你若使用go-cqhttp登录,请确保下方的正向websocket端口(8080)和正向http端口(5700)与你在go-cqhttp的登录配置中的端口保持一致
+```Python
+nakuru_config = {
+ "host": "localhost", # go-cqhttp的地址
+ "port": 8080, # go-cqhttp的正向websocket端口
+ "http_port": 5700, # go-cqhttp的正向http端口
+ "token": "" # 若在go-cqhttp的config.yml设置了access_token, 则填写此处
+}
+```
+运行gocq后会生成一个device.json,打开个文件,如下图,这里把protocol改成6切换到apad协议
+
+然后确保config文件(不是qchatgpt文件夹的,而是运行gocq生成的)里签名服务器端口和qsign的端口对应
+
+
+
+## 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`
+你可以通过检查相关代码来解决问题,因为通常情况下终端会指示出你错误发生的位置
+
+根据你手里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`,这样子显然不方便我们使用,因此项目开发大佬通过了反向代理设置,通过设置反向代理就可以较好的解决这个问题
+
+> 当然,如果你本机或服务器在国外,那还要什么tz,要是什么反向代理,直接用不香吗
+
+反向代理,其实对用户来说就是写个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"`
+
+### 特殊情况
+正常情况下,截至目前,主要使用的还是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
+{
+ "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
+欢迎广大用户积极提出意见和建议,帮助我们进一步改善
+:::
+
diff --git a/src/posts/deploy/manual.md b/src/posts/deploy/manual.md
index 6376b5d67..7fef6001e 100644
--- a/src/posts/deploy/manual.md
+++ b/src/posts/deploy/manual.md
@@ -6,7 +6,7 @@ head:
title: 手动部署(推荐,可以在所有平台上使用)
icon: support
order: 3
-author: Lazy.ikun
+author: Lazy.ikun.RockChinQ
date: 2023-10-29
category:
- 部署教程
@@ -64,7 +64,9 @@ python3 main.py
4. 编辑配置文件`config.py`
-按照文件内注释填写配置信息
+按照文件内注释填写配置信息,或者阅读[此页面](../configIntro.md)来学习如何配置信息
+
+> Tips: 大多数情况下,你只需关注qq小号,OpenAI Key的配置和管理员QQ号的配置
5. 运行主程序
@@ -73,3 +75,5 @@ python3 main.py
```
无报错信息即为运行成功
+
+当你成功运行后,你需要开始阅读[此页面](../configIntro.md)