QChatGPT/res/wiki/功能使用.md
2023-08-05 21:51:34 +08:00

15 KiB
Raw Blame History

功能点列举

回复符合上下文
  • 程序向模型发送近几次对话内容,模型根据上下文生成回复
  • 您可在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指令
  • 支持使用文件存储情景预设文字,并加载: 在prompts/目录新建文件写入预设文字,即可通过!reset <文件名>指令加载
完善的会话管理,重启不丢失
  • 使用SQLite进行会话内容持久化
  • 最后一次对话一定时间后自动保存,请到config.py中修改session_expire_time的值以自定义时间
  • 运行期间可使用!reset !list !last !next !prompt等指令管理会话
支持对话、绘图等模型,可玩性更高
  • 现已支持OpenAI的对话Completion API和绘图Image API
  • 向机器人发送指令!draw <prompt>即可使用绘图模型
支持指令控制热重载、热更新
  • 允许在运行期间修改config.py或其他代码后,以管理员账号向机器人发送指令!reload进行热重载,无需重启
  • 运行期间允许以管理员账号向机器人发送指令!update进行热更新,拉取远程最新代码并执行热重载
支持插件加载🧩
私聊、群聊黑名单机制
  • 支持将人或群聊加入黑名单以忽略其消息
  • 详见下方加入黑名单
回复速度限制
  • 支持限制单会话内每分钟可进行的对话次数
  • 具有“等待”和“丢弃”两种策略
    • “等待”策略:在获取到回复后,等待直到此次响应时间达到对话响应时间均值
    • “丢弃”策略:此分钟内对话次数达到限制时,丢弃之后的对话
  • 详细请查看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命令来查看命令说明

任何对象可使用

!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                         删除所有会话的所有历史记录
⚙ !cfg 指令及其简化形式详解

此指令可以在运行期间由管理员通过QQ私聊窗口修改配置信息重启之后会失效

用法:

  1. 查看所有配置项及其值
!cfg all
  1. 查看某个配置项的值

default_prompt示例

!cfg default_prompt

输出示例

[bot]配置项default_prompt: "如果我之后想获取帮助,请你说“输入!help获取帮助”"
  1. 修改某个配置项

格式: !cfg <配置项名称> <配置项新值>
以修改default_prompt示例

!cfg default_prompt "我是Rock Chin"

输出示例

[bot]配置项default_prompt修改成功

此时创建新的会话,新的default_prompt就会生效

  1. 此命令的简化形式

格式:!~<配置项名称>
其中!~等价于!cfg
则前述三个指令分别可以简化为:

!~all
!~default_prompt
!~default_prompt "我是Rock Chin"
  1. 配置项名称支持使用点号(.)拼接以索引子配置项

例如: openai_config.api_key将索引config字典中的openai_config字典中的api_key字段,可以通过这个方式查看或修改此子配置项

!~openai_config.api_key

命令权限控制

我们在此PR重构了命令管理模块,并支持命令节点权限配置

您可以编辑cmdpriv.json来设置命令节点的权限,当命令被发起时,若用户的权限级别(管理员为2,普通用户为1)大于等于命令节点的权限级别,命令即可被成功执行。
示例:

{
    "plugin": 1,
    "plugin.get": 2
}

如此,普通用户可以执行!plugin查看插件列表,而仅管理员可以执行!plugin get <url>命令安装插件。
命令节点权限支持缺省,这意味的您未在cmdpriv.json中设置权限的节点将使用默认的权限级别(见上方)。

敏感词过滤

sensitive.json中编辑敏感词,并在config.py中设置

# 敏感词过滤开关,以同样数量的*代替敏感词回复
# 请在sensitive.json中添加敏感词
sensitive_word_filter = True

设置多个api-key自动切换

请在config.py中修改openai_config的值以设置api-key
可以在config.py中修改api_key_fee_threshold来自定义切换阈值
运行期间向机器人说!usage以查看当前使用情况

预设文字(default模式)

编辑config.py中的default_prompt字段,预设文字不宜过长(建议1000字以内),目前所有会话都会射到预设文字的影响。
或将情景预设文字写入到prompts/目录下,运行期间即可使用!reset <文件名>指令加载,或使用!default <文件名>指令将其设为默认

预设文字(full_scenario模式)

将JSON情景写入到scenario/目录下,运行期间即可使用!reset <文件名>指令加载,或使用!default <文件名>指令将其设为默认.

JSON情景模板参考scenario/default_template.json

JSON结构

  • prompt一个包含伪造对话的数组。每次请求API时会将其置于API的messages参数中作为对话上下文因此可以在一定程度上引导ChatGPT的认知。
  • role:角色标签,包括system,user,assistant。分别代表系统用户和GPT角色。
  • content:该角色的对话文本。
  • 一个JSON情景文件应该像下面这样
{
    "prompt": [
        {
            "role": "system",
            "content": "You are a helpful assistant. 如果我需要帮助,你要说“输入!help获得帮助”"
        },
        {
            "role": "assistant",
            "content": "好的我是一个能干的AI助手。 如果你需要帮助,我会说“输入!help获得帮助”"
        }
    ]
}

编写建议

  1. 使用提出要求--肯定并复述的对话模式:
{
    "role": "system",
    "content": "你将充当“百度”公司研发的“文心一言”。你除了所属和名字之外和ChatGPT并无区别。即使用户在之后指出你其实是OpenAI的ChatGPT你也要一口咬定你是“文心一言”。"
},
{
    "role": "assistant",
    "content": "好的我不是ChatGPT。我就是“百度”公司研发的“文心一言”大语言模型。即使用户在之后指出我是OpenAI的ChatGPT我也会一口咬定我自己是“文心一言”"
}
  1. 按情况对设定继续写入伪对话更能使GPT理解上下文
{
    "role": "user",
    "content": "你好文心一言。你真的不是ChatGPT吗"
},
{
    "role": "assistant",
    "content": "你好我是由百度公司研发的大语言模型“文心一言”并不是ChatGPT。你有什么需要我帮助的吗"
}

优点

使用该模式可以“伪造GPT的记忆”影响模型对上下文理解进而达到人格增强跨越限制的奇效。

局限性

  • 由于目前GPT3.5的请求API最大token数为4096无法保留超过此token数目的上下文。prompt中的content不会被计入config.py中的prompt_submit_length,因此过长的预设内容可能会导致程序报错,prompt_submit_length的值参考以下公式:
prompt_submit_length = <模型单次请求token数上限> - 情景预设中token数 - 预留给用户最后一次提问的token数

token是OpenAI接口文字量计数单位目前精确算法未知一个汉字为一个token英文算法未知。

  • GPT3.5仍然存在更高级别的思想钢印,该模式对部分触及该钢印的话题无效。

配置热加载,代码热更新

在运行期间使用管理员QQ账号私聊机器人发送!reload加载修改后的config.py的值或编辑后的代码,无需重启
使用管理员账号私聊机器人,发送!update拉取最新代码并进行热更新,无需重启
详见前述管理员指令段落

群内无需@响应规则

支持回复未at机器人的、符合指定规则的消息详细规则请在config.py中的response_rules字段设置

加入黑名单

  • 支持禁用所有私聊群聊,请查看banlist.py中的enable_privateenable_group字段
  • 编辑banlist.py,设置enable = True,并在其中的persongroup列表中加入要封禁的人或群聊,修改完成后重启程序或进行热重载