项目地址 -> Spark-GPT
Feature
- 使用Nonebot框架跨适配器实现,多聊天平台同步实现
- 支持 QQ, QQ频道, Kook, 飞书, Telegram, Discord
- 支持跨平台账户绑定,多平台账户统一数据
- 适配多来源语言模型, 多态模型
- 实现 多用户, 多会话窗口, 公共会话和私有会话
- 实现 流式输出 , 文转图, 文转网络剪切板链接
- 实现WebUi编辑配置,实时热更新
ToDo
- 负载均衡
- 用户权限系统
模型来源支持情况
✔️:支持 ❌:不支持
来源 | 传入文本 | 传入图片 | 输出文本 | 输出图片 |
---|---|---|---|---|
Newbing | ✔️ | ✔️ | ✔️ | ✔️ |
Poe | ✔️ | ❌ | ✔️ | ❌ |
ChatGPT Api | ✔️ | ❌ | ✔️ | ❌ |
ChatGPT 网页 | ✔️ | ❌ | ✔️ | ❌ |
Claude.Ai | ✔️ | ❌ | ✔️ | ❌ |
Slack Claude | ✔️ | ❌ | ✔️ | ❌ |
Ps: 各来源的配置使用均在WebUi中已有详细说明
聊天平台支持情况
✔️:支持 ❌:不支持
来源 | 传入文本 | 传入图片 | 输出文本 | 输出图片 |
---|---|---|---|---|
✔️ | ✔️ | ✔️ | ✔️ | |
QQ频道 | ✔️ | ✔️ | ✔️ | ✔️ |
Kook | ✔️ | ❌ | ✔️ | ✔️ |
飞书 | ✔️ | ❌ | ✔️ | ✔️ |
Telegram | ✔️ | ✔️ | ✔️ | ✔️ |
Discord | ✔️ | ✔️ | ✔️ | ✔️ |
Ps: 各聊天平台接入,请查看对应的Nonebot适配器使用说明
教程
基本概念说明
会话( chat )
在本插件中,会话
指的是 一个独立的由指定模型
驱动的聊天上下文
会话的分类如下:
graph TD Chat["会话"] PrivateChat["私有会话"] PublicChat["公有会话"] QPrivateChat["QQ的一个和好友的聊天窗口,\n你们的对话时私有的,\n别的用户没办法加入到你们的对话中来.\n为了保证上下文的连贯性,\n同一个会话必须一问一答."] QPublicChat["QQ的一个群聊窗口, \n所有用户都可以使用.\n但用户是提问者,\n只有一个 语言模型 是回答者,\n为了保证上下文的连贯性,\n语言模型只能 一个一个顺序 回答问题,\n 不能同时回答你们"] Chat --> PrivateChat --> |"类似于"|QPrivateChat Chat --> PublicChat --> |"类似于"|QPublicChat
模型( model )
在本插件中,模型
指的是驱动会话
的实际的回复人
模型
需要在web ui中配置相关内容才可以启用
预设( prompt )
在本插件中,预设
指每次新对话开始前,优先加载的人格
原理:
基本是在会话
开始前,自动先向会话中发送预设文本,也有特殊的来源会使用其他方法
注意:
预设
不一定对所有的模型
都有效,因为有些模型本身会 阻止这种对模型输出行为的干预预设
的字数不是越长越好, 字数也会有上限,各模型的上限不一, 超出上限会报错, 只能自行更改预设
指令( command )
在本插件中,指令
指自动填充在问题前面的指令,可以用来命令模型
一定的格式或者要求进行回复
原理:
在发送用户的问题之前,现在用户的问题前面加上指令
文本,然后再发送过去
注意:
指令
字数有上限,各模型的上限不一, 超出上限会报错, 只能自行更改指令
基本使用逻辑说明
graph TD CU["用户"] ML["获取模型列表"] PL["获取预设列表"] CmdL["获取指令列表"] CL["获取可用会话 (公有 | 私有)"] CAprivate["创建新的会话 (私有 | 公有 {仅管理员} ) "] CC["使用会话"] CPC["回复来继续会话"] CU --> CL CU --> ML CU --> CmdL CU --> PL ML --> CAprivate CmdL --> CAprivate PL --> CAprivate CL --> CC CAprivate --> CC CC --> CPC
部署教程
部署Nonebot
这里直接看Well404的教程吧,点击即可跳转到b站系列教程
部署各适配器
在这里我直接贴出个适配器的官方使用文档或者合适的教程了
QQ(OBV11)
首先是qsign的部署,这个目前是 必须的
然后需要使用 gocq 的dev 版本,这里给出 gocq dev的action地址,可以自行在这里寻找合适的构建版本,
而连接到nb的方法在上面的 nonebot部署教程中已经又过了,这里不在放出地址
gocq-dev Action CL
QQGuid (QQ频道)
KOOK(开黑啦)
飞书
Telegram
Discord
部署Spark GPT
安装插件
|
|
配置相关信息
- SparkGPT 依赖 nonebot_plugin_web_config 进行实时配置热更新,所以需要配置的相关信息(端口,账号密码),可以点击进入查看相关的env配置.
- SparkGPT 的GPT来源需要手动配置相应的 auth 信息才可以使用,具体获取方式都均在web ui(默认http://127.0.0.1:8666)中已经标出,并可以实时热更新.
使用教程
使用教程图片版可以使用 shelp 命令获取.
本插件 均采用Alc命令形式 进行使用.
在下面的文本中,用{}
来标志 需要替换的变量, 用()
框起来的为 选填的变量
会话
使用公有会话询问
格式: public_command{chat_name} {question} ( {photo} )
参数:
必填:
chat_name
: 会话昵称question
: 问题
选填:
3. photo
: 需要识别的图片内容,只有model为bing时才可以使用,需要跟随文本信息一同发送
4.
使用私有会话询问
格式: private_command{chat_name} {question} ( {photo} )
参数:
必填:
chat_name
: 会话昵称question
: 问题
选填:
photo
: 需要识别的图片内容,只有model为bing时才可以使用,需要跟随文本信息一同发送
创建新的会话
格式: chat add -n {chat_name} -m {model} ( -p {prompt} -c {command} -auto_pic {bool} -num_limit {int} -pic {bool} -url {bool} -stream {bool} -public )
参数:
必填:
chat_name
: 会话名称model
: 使用的模型名称或者索引数字 选填:prompt
:
使用本地预设,须在预设名称前加’.‘号
使用自定义预设,直接输入内容command
:
使用本地指令,须在指令名称前加’.‘号
使用自定义指令,直接输入内容auto_pic
: 是否当字数过多时自动转图片num_limit
: 自动转图片的字数上限pic
: 是否总是文字转图片url
: 是否在图片或流式回复时发送全文链接stream
: 是否流式输出,分段发送结果public
: 是否是创建共有会话
修改新的会话
格式: chat edit -on {old_name} \n( -nn {new_name} -m {model} -p {prompt} -c {command} -auto_pic {bool} -num_limit {int} -pic {bool} -url {bool} -stream {bool} -public )
参数:
必填:
old_name
: 原来的会话名称 选填:new_name
: 原来的会话名称model
: 使用的模型名称或者索引数字prompt
:
使用本地预设,须在预设名称前加’.‘号
使用自定义预设,直接输入内容command
:
使用本地指令,须在指令名称前加’.‘号
使用自定义指令,直接输入内容auto_pic
: 是否当字数过多时自动转图片num_limit
: 自动转图片的字数上限pic
: 是否总是文字转图片url
: 是否在图片或流式回复时发送全文链接stream
: 是否流式输出,分段发送结果public
: 是否是修改共有会话
获取所有会话的列表
格式: chat list
删除一个会话
格式: chat del -n {chat_name} ( -public )
必填:
chat_name
: 会话名称
选填:
public
: 是否是创建共有会话
模型
获取可用模型列表
格式: model list
预设
添加一个新的预设
格式: prompt add -n {name} -c {content}
参数:
必填:
- name: 预设名称
- content: 预设内容
删除一个预设
格式: prompt del -n {name}
参数:
必填:
- name: 预设名称
查看预设列表
格式: prompt list ( -p {num} )
参数:
选填:
- num: 页数
查看特定预设具体内容
格式: prompt show -n {name}
参数:
必填:
- name: 预设名称
指令
添加一个新的指令
格式: command add -n {name} -c {content}
参数:
必填:
- name: 指令名称
- content: 指令内容
删除一个指令
格式: command del -n {name}
参数:
必填:
- name: 指令名称
查看指令列表
格式: command list ( -p {num} )
参数:
选填:
- num: 页数
查看特定指令具体内容
格式: command show -n {name}
参数:
必填:
- name: 指令名称