Skip to content

JohnRichard4096/nonebot_plugin_suggarchat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nonebot

Nonebot Plugin Suggarchat

Plugin for the Suggar chat framework compatible with Nonebot2.

Visual Studio Code Python PyPi

描述

适用于Nonebot2Onebot V11 适配器的LLM聊天插件

温馨提示

本插件全局性较高!可能会与其他插件冲突,请谨慎使用!

如果你想主要做聊天类型的Bot,请忽略。

在Suggar机器人实现中,暂时没有发现有冲突,如果有,请提交至Issues。

本插件更面向于有Nonebot2基础或插件开发者以及有LLM API开发/使用经验的用户!

不推荐直接调用resources.py的方法,而是通过插件API进行调用。


传入LLM的信息格式如下,请自行在提示词内做好处理,便于LLM理解(这里我提供了use_base_prompt选项,如果启用了可以忽略,这个选项将自动在你的prompt前插入内容,对消息段作出解释):

不会写就来QQ群问群主吧(

点击查看详细格式 可解析的消息段:文字,at,合并转发

at+文字:

你好世界@Somebody

合并转发(暂不支持解析嵌套的合并转发消息):

\(合并转发
[YYYY-MM-DD hh:mm:ss PM/AM][昵称(QQ号)]说:<内容>
[[YYYY-MM-DD hh:mm:ss PM/AM][昵称(QQ号)]说:<内容>]
)\
......以此类推

私聊普通消息:

[YYYY-MM-DD weekday hh:mm:ss AM/PM]用户昵称(QQ号):<内容>

私聊引用消息:

私聊普通消息格式+ (((引用的消息))):其他消息段解析后内容

私聊合并转发消息:

私聊普通消息格式+合并转发消息格式

聊群普通消息:

[管理员/群主/自己/群员][YYYY-MM-DD weekday hh:mm:ss AM/PM][昵称(QQ号)]说:<内容>

聊群引用消息:

聊群普通消息格式+ (((引用的消息))):其他消息段解析后内容

聊群合并转发消息:

聊群普通消息格式+合并转发消息格式

戳一戳消息:

\(戳一戳消息\) 昵称(QQ:qq号) 戳了戳你

对于源码

警告!本插件源码可能含有以下内容

点我开始赤史

《三角形具有稳定性》

if:
    if:
        if:
            if:
            else:
        else:
    else:
else:

《无意义分支》

if a:do()
else:pass

《如判断》 其实是懒得改陈年史山缩进,但为了不必要的麻烦,就这样了(

if True:
    todo()
#或者说
while True:
    todo()
    break

特性(不是bug那个)

  • OpenAI API 支持
  • QQ群组聊天支持
  • QQ私聊支持
  • 群组AT触发
  • API 开放
  • 戳一戳消息触发支持
  • 多模型切换选择
  • (未来将会支持)黑名单/白名单
  • 不同群内自定义聊天开关
  • 不同聊群可设置的自定义补充Prompt
  • 向超控(特定聊群)推送插件的错误日志
  • 自定义Bot消息被撤回时缓解尴尬的推送
  • 合并转发/引用消息解析支持(只会解析纯文本/at消息段,如果您不理解这是什么意思,你可以理解为丢给LLM的信息只有"@a 你好"这样的格式)

安装方式

  1. 通过pip安装

    • 确保已安装Python(版本>=3.9)。 打开命令行工具,执行以下命令来安装插件:
      pip install nonebot-plugin-suggarchat
  2. 通过PDM安装

    pdm add nonebot-plugin-suggarchat

以上方法需要在你的pyproject.toml中的plugins列表添加如下内容:

plugins=["nonebot_plugin_suggarchat"]
#添加"nonebot_plugin_suggarchat"

配置文件

  • 配置文件路径:通常位于项目的运行目录的config目录下,文件名为config.json

配置项说明

点此展开
配置项 类型 默认值 解释
memory_length_limit int 50 单会话允许存储的最大消息数(如果您不知道这是什么意思,请不要修改
enable bool false 是否启用聊天机器人(即该插件)
poke_reply bool true 是否启用戳一戳回复功能
private_train dict { "role": "system", "content": "<请修改这里的内容>" } 私聊的系统提示词
group_train dict { "role": "system", "content": "<请修改这里的内容>" } 群聊训的系统提示词
enable_group_chat bool true 是否启用群聊功能
enable_private_chat bool true 是否启用私聊功能
allow_custom_prompt bool true 是否允许自定义提示
allow_send_to_admin bool true 是否允许向管理员发送消息
admin_group int 0 管理员群组的ID
admins list[int] [] 管理员用户的列表
open_ai_base_url string "" OpenAI协议 API URL
open_ai_api_key string "" OpenAI协议 API 密钥
say_after_self_msg_be_deleted bool true 自己的消息被删除后是否回复
group_added_msg string "你好,我是Suggar,欢迎使用Suggar的AI聊天机器人,你可以向我提问任何问题,我会尽力回答你的问题,如果你需要帮助,你可以向我发送“帮助”" 加入群组时发送的欢迎消息
send_msg_after_be_invited bool true 被邀请进群后是否发送消息
after_deleted_say_what list[str] [ "Suggar说错什么话了吗~下次我会注意的呢~", "抱歉啦,不小心说错啦~", ... ] 消息被删除后随机回复的内容
use_base_prompt bool true 是否使用基本提示词(即让LLM理解消息段解析)
preset string main 是否使用预设(在工作目录的models文件夹下,预设json格式参考下文(你的预设名不能设为__main__)午)
max_tokens int 100 在单次时,LLM最多可以回复多少个token(即字数,如果你的模型提供商支持
model str auto 使用什么模型(具体看你的API提供商
parse_segments bool true 是否解析消息段,此权重覆盖use_base_prompt(即at/合并转发等)

预设

预设文件位于工作目录的models文件夹下,预设文件为json格式,具体格式如下:

    {
    "model":"auto",
    "name":"",
    "base_url":"",
    "api_key":""
    }

解释:

  • model: 使用的模型,默认为auto,即自动选择。
  • name: 预设的名字,用于在插件中选择使用。
  • base_url: OpenAI协议 API URL,默认为空。
  • api_key: OpenAI协议 API 密钥,默认为空。

预设使用方法

  1. 在工作目录的models文件夹下,创建一个json文件,文件名必须与预设的名字一致。
  2. 在json文件中,填写预设的内容。
  3. 在插件配置文件中,将preset的值设置为预设的名字(我们更推荐你使用指令来切换而不是直接修改配置文件)。

指令使用方法

指令 参数 解释
/聊天菜单/chat_menu: 显示聊天菜单
/del_memory, /失忆, /删除记忆, /删除历史消息, /删除回忆 删除聊天记忆
/enable_chat/启用聊天 启用聊天功能
/disable_chat/禁用聊天 禁用聊天功能
/prompt --(show) 展示当前提示词,--(clear) 清空当前prompt,--(set) <文字>则设置提示词 设置或查看当前自定义提示词(适用于用户自定义补充提示词)
/presets 查看可用的预设列表
/set_preset/设置预设/设置模型预设 <预设名> 设置当前使用的预设
隐藏指令

隐藏指令

为什么会有?因为开发者为了DEBUG,会保留一些在开发过程中测试的指令,如果您只是普通用户,请忽略,也不推荐您去使用这些指令 主要是写的垃圾

指令 参数 解释
/debug 显示调试信息并推送

插件中间件事件处理写法(实验,需要在配置文件json中把enable_lab_function改为true)

from nonebot.plugin import require
require("nonebot_plugin_suggarchat")
from nonebot_plugin_suggarchat.on_event import on_chat
from nonebot_plugin_suggarchat.event import ChatEvent
@on_chat().handle()
async def your_def(event:SuggarEvent):
    print("Hello,World")

讨论

QQ 交流群: 链接

About

Plugin for the Suggar chat framework compatible with Nonebot2.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages