Featured image of post SparkGPT

SparkGPT

Nonebot 框架下 Ai 语言模型 最佳实现

项目地址 -> Spark-GPT

Feature

  • 使用Nonebot框架跨适配器实现,多聊天平台同步实现
  • 支持 QQ, QQ频道, Kook, 飞书, Telegram, Discord
  • 支持跨平台账户绑定,多平台账户统一数据
  • 适配多来源语言模型, 多态模型
  • 实现 多用户, 多会话窗口, 公共会话和私有会话
  • 实现 流式输出 , 文转图, 文转网络剪切板链接
  • 实现WebUi编辑配置,实时热更新

ToDo

  • 负载均衡
  • 用户权限系统

模型来源支持情况

✔️:支持 ❌:不支持

来源传入文本传入图片输出文本输出图片
Newbing✔️✔️✔️✔️
Poe✔️✔️
ChatGPT Api✔️✔️
ChatGPT 网页✔️✔️
Claude.Ai✔️✔️
Slack Claude✔️✔️

Ps: 各来源的配置使用均在WebUi中已有详细说明

聊天平台支持情况

✔️:支持 ❌:不支持

来源传入文本传入图片输出文本输出图片
QQ✔️✔️✔️✔️
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频道)

QQ频道适配器 gh链接

KOOK(开黑啦)

KOOK(开黑啦)适配器 gh链接

飞书

飞书(Lark)适配器 gh链接

Telegram

Telegram适配器 gh链接

Discord

Discord适配器 gh链接

部署Spark GPT

安装插件
1
nb plugin install spark_gpt
配置相关信息
  1. SparkGPT 依赖 nonebot_plugin_web_config 进行实时配置热更新,所以需要配置的相关信息(端口,账号密码),可以点击进入查看相关的env配置.
  2. SparkGPT 的GPT来源需要手动配置相应的 auth 信息才可以使用,具体获取方式都均在web ui(默认http://127.0.0.1:8666)中已经标出,并可以实时热更新.

使用教程

使用教程图片版可以使用 shelp 命令获取.
本插件 均采用Alc命令形式 进行使用.
在下面的文本中,用{}来标志 需要替换的变量, 用()框起来的为 选填的变量

会话

使用公有会话询问

格式: public_command{chat_name} {question} ( {photo} )
参数:

必填:

  1. chat_name: 会话昵称
  2. question: 问题

选填:
3. photo: 需要识别的图片内容,只有model为bing时才可以使用,需要跟随文本信息一同发送 4.

使用私有会话询问

格式: private_command{chat_name} {question} ( {photo} )
参数:

必填:

  1. chat_name: 会话昵称
  2. question: 问题

选填:

  1. 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 )
参数:

必填:

  1. chat_name: 会话名称
  2. model: 使用的模型名称或者索引数字 选填:
  3. prompt:
    使用本地预设,须在预设名称前加’.‘号
    使用自定义预设,直接输入内容
  4. command:
    使用本地指令,须在指令名称前加’.‘号
    使用自定义指令,直接输入内容
  5. auto_pic: 是否当字数过多时自动转图片
  6. num_limit: 自动转图片的字数上限
  7. pic: 是否总是文字转图片
  8. url: 是否在图片或流式回复时发送全文链接
  9. stream: 是否流式输出,分段发送结果
  10. 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 )
参数:

必填:

  1. old_name: 原来的会话名称 选填:
  2. new_name: 原来的会话名称
  3. model: 使用的模型名称或者索引数字
  4. prompt:
    使用本地预设,须在预设名称前加’.‘号
    使用自定义预设,直接输入内容
  5. command:
    使用本地指令,须在指令名称前加’.‘号
    使用自定义指令,直接输入内容
  6. auto_pic: 是否当字数过多时自动转图片
  7. num_limit: 自动转图片的字数上限
  8. pic: 是否总是文字转图片
  9. url: 是否在图片或流式回复时发送全文链接
  10. stream: 是否流式输出,分段发送结果
  11. public: 是否是修改共有会话
获取所有会话的列表

格式: chat list

删除一个会话

格式: chat del -n {chat_name} ( -public )

必填:

  1. chat_name: 会话名称

选填:

  1. public: 是否是创建共有会话

模型

获取可用模型列表

格式: model list

预设

添加一个新的预设

格式: prompt add -n {name} -c {content}

参数:
必填:

  1. name: 预设名称
  2. content: 预设内容
删除一个预设

格式: prompt del -n {name}

参数:
必填:

  1. name: 预设名称
查看预设列表

格式: prompt list ( -p {num} )

参数:
选填:

  1. num: 页数
查看特定预设具体内容

格式: prompt show -n {name}

参数:
必填:

  1. name: 预设名称

指令

添加一个新的指令

格式: command add -n {name} -c {content}

参数:
必填:

  1. name: 指令名称
  2. content: 指令内容
删除一个指令

格式: command del -n {name}

参数:
必填:

  1. name: 指令名称
查看指令列表

格式: command list ( -p {num} )

参数:
选填:

  1. num: 页数
查看特定指令具体内容

格式: command show -n {name}

参数:
必填:

  1. name: 指令名称
Built with Hugo
主题 StackJimmy 设计