<p align="center">
<a href="https://github.com/JohnRichard4096/nonebot_plugin_suggarchat/"><img src="https://v2.nonebot.dev/logo.png" width="200" height="200" alt="nonebot"></a>
</p>
<div align="center">
# Nonebot Plugin Suggarchat
Plugin for the Suggar chat framework compatible with Nonebot2.
[![Visual Studio Code](https://img.shields.io/badge/Visual%20Studio%20Code-0078d7.svg?style=for-the-badge&logo=visual-studio-code&logoColor=white)](https://code.visualstudio.com/) [![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge&logo=python&logoColor=ffdd54)](https://www.python.org/) [![PyPi](https://img.shields.io/badge/pypi-%23ececec.svg?style=for-the-badge&logo=pypi&logoColor=1f73b7)](https://pypi.org/project/nonebot-plugin-suggarchat/)
## 描述
适用于**Nonebot2**的**Onebot V11 适配器**的LLM聊天插件
## 温馨提示
本插件全局性较高!***可能会与其他插件冲突***,请谨慎使用!
如果你想主要做聊天类型的Bot,请忽略。
在Suggar机器人实现中,暂时没有发现有冲突,如果有,请提交至Issues。
***本插件更面向于有Nonebot2基础或插件开发者以及有LLM API开发/使用经验的用户!***
不推荐直接调用**resources.py的**方法,而是通过插件API进行调用。
<hr />
传入LLM的信息格式如下,请自行在**提示词**内做好处理,便于LLM理解(这里我提供了use_base_prompt选项,如果启用了可以忽略,这个选项将自动在你的prompt前插入内容,对消息段作出解释):
~~不会写就来QQ群问群主吧(~~
<details><summary>点击查看详细格式</summary>
可解析的消息段:文字,at,合并转发
<hr />
at+文字:
```plaintext
你好世界@Somebody
```
合并转发(暂不支持解析**嵌套的合并转发消息**):
```
\(合并转发
[YYYY-MM-DD hh:mm:ss PM/AM][昵称(QQ号)]说:<内容>
[[YYYY-MM-DD hh:mm:ss PM/AM][昵称(QQ号)]说:<内容>]
)\
......以此类推
```
<hr />
私聊普通消息:
```plaintext
[YYYY-MM-DD weekday hh:mm:ss AM/PM]用户昵称(QQ号):<内容>
```
私聊引用消息:
```plaintext
私聊普通消息格式+ (((引用的消息))):其他消息段解析后内容
```
私聊合并转发消息:
```plaintext
私聊普通消息格式+合并转发消息格式
```
<hr />
聊群普通消息:
```plaintext
[管理员/群主/自己/群员][YYYY-MM-DD weekday hh:mm:ss AM/PM][昵称(QQ号)]说:<内容>
```
聊群引用消息:
```plaintext
聊群普通消息格式+ (((引用的消息))):其他消息段解析后内容
```
聊群合并转发消息:
```plaintext
聊群普通消息格式+合并转发消息格式
```
<hr />
戳一戳消息:
```plaintext
\(戳一戳消息\) 昵称(QQ:qq号) 戳了戳你
```
</details>
### 对于源码
~~警告!本插件源码可能含有以下内容~~
<details><summary>
~~点我开始赤史~~
</summary>
《三角形具有稳定性》
```python
if:
if:
if:
if:
else:
else:
else:
else:
```
《无意义分支》
```python
if a:do()
else:pass
```
《如判断》
~~其实是懒得改陈年史山缩进,但为了不必要的麻烦,就这样了(~~
```python
if True:
todo()
#或者说
while True:
todo()
break
```
</details>
## 特性(不是bug那个)
- OpenAI API 支持
- QQ群组聊天支持
- QQ私聊支持
- 群组AT触发
- API 开放
- 戳一戳消息触发支持
- 多模型切换选择
- (未来将会支持)黑名单/白名单
- 不同群内自定义聊天开关
- 不同聊群可设置的自定义补充Prompt
- 向超控(特定聊群)推送插件的错误日志
- 自定义Bot消息被撤回时缓解尴尬的推送
- 合并转发/引用消息解析支持(只会解析纯文本/at消息段,如果您不理解这是什么意思,你可以理解为丢给LLM的信息只有"@a 你好"这样的格式)
## 安装方式
1. **通过pip安装**
- 确保已安装Python(版本>=3.9)。
打开命令行工具,执行以下命令来安装插件:
```bash
pip install nonebot-plugin-suggarchat
```
2. **通过PDM安装**
```bash
pdm add nonebot-plugin-suggarchat
```
以上方法需要在你的`pyproject.toml`中的**plugins**`列表`添加如下内容:
```toml
plugins=["nonebot_plugin_suggarchat"]
#添加"nonebot_plugin_suggarchat"
```
## 配置文件
- **配置文件路径**:通常位于项目的运行目录的config目录下,文件名为`config.json`。
### **配置项说明**
<details><summary>点此展开</summary>
| 配置项 | 类型 | 默认值 | 解释 |
|------------------------------|-------------------|--------------|------------------------------------------------------------|
| `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/合并转发等) |
</details>
## 预设
预设文件位于工作目录的models文件夹下,预设文件为json格式,具体格式如下:
```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** 或 **/设置预设** 或 **/设置模型预设** | `<预设名>` |设置当前使用的预设
<details><summary>隐藏指令</summary>
## 隐藏指令
为什么会有?因为开发者为了DEBUG,会保留一些在开发过程中测试的指令,如果您只是普通用户,请忽略,也不推荐您去使用这些指令
~~主要是写的垃圾~~
。
| 指令 | 参数 | 解释 |
|--------------|-----------------|------------------------------|
| **/debug** | 无 | 显示调试信息并推送 |
</details>
## 插件中间件事件处理写法(实验,需要在配置文件json中把`enable_lab_function`改为`true`)
```py
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 交流群: [链接](https://qm.qq.com/q/PFcfb4296m)
Raw data
{
"_id": null,
"home_page": null,
"name": "nonebot-plugin-suggarchat",
"maintainer": null,
"docs_url": null,
"requires_python": "~=3.9",
"maintainer_email": null,
"keywords": "chat, suggar, nonebot",
"author": null,
"author_email": "JohnRichard4096 <windowserror@163.com>",
"download_url": "https://files.pythonhosted.org/packages/53/7b/2f4f1d2407088ff419362d93901fc011cbc4881ed2b485e71bdee900554f/nonebot_plugin_suggarchat-0.1.7.3.tar.gz",
"platform": null,
"description": "<p align=\"center\">\n <a href=\"https://github.com/JohnRichard4096/nonebot_plugin_suggarchat/\"><img src=\"https://v2.nonebot.dev/logo.png\" width=\"200\" height=\"200\" alt=\"nonebot\"></a>\n</p>\n\n<div align=\"center\">\n\n# Nonebot Plugin Suggarchat\n\nPlugin for the Suggar chat framework compatible with Nonebot2.\n\n\n[![Visual Studio Code](https://img.shields.io/badge/Visual%20Studio%20Code-0078d7.svg?style=for-the-badge&logo=visual-studio-code&logoColor=white)](https://code.visualstudio.com/) [![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge&logo=python&logoColor=ffdd54)](https://www.python.org/) [![PyPi](https://img.shields.io/badge/pypi-%23ececec.svg?style=for-the-badge&logo=pypi&logoColor=1f73b7)](https://pypi.org/project/nonebot-plugin-suggarchat/)\n\n## \u63cf\u8ff0\n\u9002\u7528\u4e8e**Nonebot2**\u7684**Onebot V11 \u9002\u914d\u5668**\u7684LLM\u804a\u5929\u63d2\u4ef6\n\n## \u6e29\u99a8\u63d0\u793a\n\n\u672c\u63d2\u4ef6\u5168\u5c40\u6027\u8f83\u9ad8\uff01***\u53ef\u80fd\u4f1a\u4e0e\u5176\u4ed6\u63d2\u4ef6\u51b2\u7a81***\uff0c\u8bf7\u8c28\u614e\u4f7f\u7528\uff01\n\n\u5982\u679c\u4f60\u60f3\u4e3b\u8981\u505a\u804a\u5929\u7c7b\u578b\u7684Bot\uff0c\u8bf7\u5ffd\u7565\u3002\n\n\u5728Suggar\u673a\u5668\u4eba\u5b9e\u73b0\u4e2d\uff0c\u6682\u65f6\u6ca1\u6709\u53d1\u73b0\u6709\u51b2\u7a81\uff0c\u5982\u679c\u6709\uff0c\u8bf7\u63d0\u4ea4\u81f3Issues\u3002\n\n***\u672c\u63d2\u4ef6\u66f4\u9762\u5411\u4e8e\u6709Nonebot2\u57fa\u7840\u6216\u63d2\u4ef6\u5f00\u53d1\u8005\u4ee5\u53ca\u6709LLM API\u5f00\u53d1/\u4f7f\u7528\u7ecf\u9a8c\u7684\u7528\u6237\uff01***\n\n\u4e0d\u63a8\u8350\u76f4\u63a5\u8c03\u7528**resources.py\u7684**\u65b9\u6cd5\uff0c\u800c\u662f\u901a\u8fc7\u63d2\u4ef6API\u8fdb\u884c\u8c03\u7528\u3002\n\n<hr />\n\n\u4f20\u5165LLM\u7684\u4fe1\u606f\u683c\u5f0f\u5982\u4e0b\uff0c\u8bf7\u81ea\u884c\u5728**\u63d0\u793a\u8bcd**\u5185\u505a\u597d\u5904\u7406\uff0c\u4fbf\u4e8eLLM\u7406\u89e3\uff08\u8fd9\u91cc\u6211\u63d0\u4f9b\u4e86use_base_prompt\u9009\u9879\uff0c\u5982\u679c\u542f\u7528\u4e86\u53ef\u4ee5\u5ffd\u7565\uff0c\u8fd9\u4e2a\u9009\u9879\u5c06\u81ea\u52a8\u5728\u4f60\u7684prompt\u524d\u63d2\u5165\u5185\u5bb9\uff0c\u5bf9\u6d88\u606f\u6bb5\u4f5c\u51fa\u89e3\u91ca\uff09\uff1a\n\n\n~~\u4e0d\u4f1a\u5199\u5c31\u6765QQ\u7fa4\u95ee\u7fa4\u4e3b\u5427\uff08~~\n<details><summary>\u70b9\u51fb\u67e5\u770b\u8be6\u7ec6\u683c\u5f0f</summary>\n\u53ef\u89e3\u6790\u7684\u6d88\u606f\u6bb5\uff1a\u6587\u5b57\uff0cat\uff0c\u5408\u5e76\u8f6c\u53d1\n\n<hr />\n\nat+\u6587\u5b57\uff1a\n```plaintext\n\u4f60\u597d\u4e16\u754c@Somebody\n```\n\u5408\u5e76\u8f6c\u53d1\uff08\u6682\u4e0d\u652f\u6301\u89e3\u6790**\u5d4c\u5957\u7684\u5408\u5e76\u8f6c\u53d1\u6d88\u606f**\uff09\uff1a\n```\n\\\uff08\u5408\u5e76\u8f6c\u53d1\n[YYYY-MM-DD hh:mm:ss PM/AM][\u6635\u79f0(QQ\u53f7)]\u8bf4\uff1a<\u5185\u5bb9>\n[[YYYY-MM-DD hh:mm:ss PM/AM][\u6635\u79f0(QQ\u53f7)]\u8bf4\uff1a<\u5185\u5bb9>]\n\uff09\\\n......\u4ee5\u6b64\u7c7b\u63a8\n```\n\n<hr />\n\n\u79c1\u804a\u666e\u901a\u6d88\u606f\uff1a\n```plaintext\n[YYYY-MM-DD weekday hh:mm:ss AM/PM]\u7528\u6237\u6635\u79f0\uff08QQ\u53f7\uff09\uff1a<\u5185\u5bb9>\n```\n\u79c1\u804a\u5f15\u7528\u6d88\u606f\uff1a\n```plaintext\n\u79c1\u804a\u666e\u901a\u6d88\u606f\u683c\u5f0f+ \uff08\uff08\uff08\u5f15\u7528\u7684\u6d88\u606f\uff09\uff09\uff09\uff1a\u5176\u4ed6\u6d88\u606f\u6bb5\u89e3\u6790\u540e\u5185\u5bb9\n```\n\u79c1\u804a\u5408\u5e76\u8f6c\u53d1\u6d88\u606f\uff1a\n```plaintext\n\u79c1\u804a\u666e\u901a\u6d88\u606f\u683c\u5f0f+\u5408\u5e76\u8f6c\u53d1\u6d88\u606f\u683c\u5f0f\n```\n\n<hr />\n\n\u804a\u7fa4\u666e\u901a\u6d88\u606f\uff1a\n```plaintext\n[\u7ba1\u7406\u5458/\u7fa4\u4e3b/\u81ea\u5df1/\u7fa4\u5458][YYYY-MM-DD weekday hh:mm:ss AM/PM][\u6635\u79f0\uff08QQ\u53f7\uff09]\u8bf4:<\u5185\u5bb9>\n```\n\n\u804a\u7fa4\u5f15\u7528\u6d88\u606f\uff1a\n```plaintext\n\u804a\u7fa4\u666e\u901a\u6d88\u606f\u683c\u5f0f+ \uff08\uff08\uff08\u5f15\u7528\u7684\u6d88\u606f\uff09\uff09\uff09\uff1a\u5176\u4ed6\u6d88\u606f\u6bb5\u89e3\u6790\u540e\u5185\u5bb9\n```\n\u804a\u7fa4\u5408\u5e76\u8f6c\u53d1\u6d88\u606f\uff1a\n```plaintext\n\u804a\u7fa4\u666e\u901a\u6d88\u606f\u683c\u5f0f+\u5408\u5e76\u8f6c\u53d1\u6d88\u606f\u683c\u5f0f\n```\n\n<hr />\n\n\u6233\u4e00\u6233\u6d88\u606f\uff1a\n```plaintext\n\\(\u6233\u4e00\u6233\u6d88\u606f\\) \u6635\u79f0(QQ:qq\u53f7) \u6233\u4e86\u6233\u4f60\n```\n</details>\n\n### \u5bf9\u4e8e\u6e90\u7801\n\n~~\u8b66\u544a\uff01\u672c\u63d2\u4ef6\u6e90\u7801\u53ef\u80fd\u542b\u6709\u4ee5\u4e0b\u5185\u5bb9~~\n \n<details><summary>\n\n~~\u70b9\u6211\u5f00\u59cb\u8d64\u53f2~~\n</summary>\n\n\u300a\u4e09\u89d2\u5f62\u5177\u6709\u7a33\u5b9a\u6027\u300b\n```python\nif:\n if:\n if:\n if:\n else:\n else:\n else:\nelse:\n```\n\u300a\u65e0\u610f\u4e49\u5206\u652f\u300b\n```python\nif a:do()\nelse:pass\n\n```\n\u300a\u5982\u5224\u65ad\u300b\n~~\u5176\u5b9e\u662f\u61d2\u5f97\u6539\u9648\u5e74\u53f2\u5c71\u7f29\u8fdb\uff0c\u4f46\u4e3a\u4e86\u4e0d\u5fc5\u8981\u7684\u9ebb\u70e6\uff0c\u5c31\u8fd9\u6837\u4e86\uff08~~\n```python\nif True:\n todo()\n#\u6216\u8005\u8bf4\nwhile True:\n todo()\n break\n```\n</details>\n\n## \u7279\u6027\uff08\u4e0d\u662fbug\u90a3\u4e2a\uff09\n\n- OpenAI API \u652f\u6301\n- QQ\u7fa4\u7ec4\u804a\u5929\u652f\u6301\n- QQ\u79c1\u804a\u652f\u6301\n- \u7fa4\u7ec4AT\u89e6\u53d1\n- API \u5f00\u653e\n- \u6233\u4e00\u6233\u6d88\u606f\u89e6\u53d1\u652f\u6301\n- \u591a\u6a21\u578b\u5207\u6362\u9009\u62e9\n- \uff08\u672a\u6765\u5c06\u4f1a\u652f\u6301\uff09\u9ed1\u540d\u5355/\u767d\u540d\u5355\n- \u4e0d\u540c\u7fa4\u5185\u81ea\u5b9a\u4e49\u804a\u5929\u5f00\u5173\n- \u4e0d\u540c\u804a\u7fa4\u53ef\u8bbe\u7f6e\u7684\u81ea\u5b9a\u4e49\u8865\u5145Prompt\n- \u5411\u8d85\u63a7\uff08\u7279\u5b9a\u804a\u7fa4\uff09\u63a8\u9001\u63d2\u4ef6\u7684\u9519\u8bef\u65e5\u5fd7\n- \u81ea\u5b9a\u4e49Bot\u6d88\u606f\u88ab\u64a4\u56de\u65f6\u7f13\u89e3\u5c34\u5c2c\u7684\u63a8\u9001\n- \u5408\u5e76\u8f6c\u53d1/\u5f15\u7528\u6d88\u606f\u89e3\u6790\u652f\u6301\uff08\u53ea\u4f1a\u89e3\u6790\u7eaf\u6587\u672c/at\u6d88\u606f\u6bb5\uff0c\u5982\u679c\u60a8\u4e0d\u7406\u89e3\u8fd9\u662f\u4ec0\u4e48\u610f\u601d\uff0c\u4f60\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e22\u7ed9LLM\u7684\u4fe1\u606f\u53ea\u6709\"@a \u4f60\u597d\"\u8fd9\u6837\u7684\u683c\u5f0f\uff09\n\n## \u5b89\u88c5\u65b9\u5f0f\n1. **\u901a\u8fc7pip\u5b89\u88c5**\n - \u786e\u4fdd\u5df2\u5b89\u88c5Python\uff08\u7248\u672c>=3.9\uff09\u3002\n \u6253\u5f00\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u6765\u5b89\u88c5\u63d2\u4ef6\uff1a\n ```bash\n pip install nonebot-plugin-suggarchat\n ```\n \n \n\n2. **\u901a\u8fc7PDM\u5b89\u88c5**\n ```bash\n pdm add nonebot-plugin-suggarchat\n ```\n \n\u4ee5\u4e0a\u65b9\u6cd5\u9700\u8981\u5728\u4f60\u7684`pyproject.toml`\u4e2d\u7684**plugins**`\u5217\u8868`\u6dfb\u52a0\u5982\u4e0b\u5185\u5bb9\uff1a\n```toml\nplugins=[\"nonebot_plugin_suggarchat\"]\n#\u6dfb\u52a0\"nonebot_plugin_suggarchat\"\n```\n## \u914d\u7f6e\u6587\u4ef6\n\n- **\u914d\u7f6e\u6587\u4ef6\u8def\u5f84**\uff1a\u901a\u5e38\u4f4d\u4e8e\u9879\u76ee\u7684\u8fd0\u884c\u76ee\u5f55\u7684config\u76ee\u5f55\u4e0b\uff0c\u6587\u4ef6\u540d\u4e3a`config.json`\u3002\n### **\u914d\u7f6e\u9879\u8bf4\u660e**\n<details><summary>\u70b9\u6b64\u5c55\u5f00</summary>\n\n| \u914d\u7f6e\u9879 | \u7c7b\u578b | \u9ed8\u8ba4\u503c | \u89e3\u91ca | \n|------------------------------|-------------------|--------------|------------------------------------------------------------| \n| `memory_length_limit` | int | 50 | \u5355\u4f1a\u8bdd\u5141\u8bb8\u5b58\u50a8\u7684\u6700\u5927\u6d88\u606f\u6570\uff08**\u5982\u679c\u60a8\u4e0d\u77e5\u9053\u8fd9\u662f\u4ec0\u4e48\u610f\u601d\uff0c\u8bf7\u4e0d\u8981\u4fee\u6539**\uff09 | \n| `enable` | bool | **false** | \u662f\u5426\u542f\u7528\u804a\u5929\u673a\u5668\u4eba\uff08\u5373\u8be5\u63d2\u4ef6\uff09 | \n| `poke_reply` | bool | true | \u662f\u5426\u542f\u7528\u6233\u4e00\u6233\u56de\u590d\u529f\u80fd | \n| `private_train` | dict | { \"role\": \"system\", \"content\": \"`<\u8bf7\u4fee\u6539\u8fd9\u91cc\u7684\u5185\u5bb9>`\" } | \u79c1\u804a\u7684\u7cfb\u7edf\u63d0\u793a\u8bcd | \n| `group_train` | dict | { \"role\": \"system\", \"content\": \"`<\u8bf7\u4fee\u6539\u8fd9\u91cc\u7684\u5185\u5bb9>`\" } | \u7fa4\u804a\u8bad\u7684\u7cfb\u7edf\u63d0\u793a\u8bcd | \n| `enable_group_chat` | bool | true | \u662f\u5426\u542f\u7528\u7fa4\u804a\u529f\u80fd | \n| `enable_private_chat` | bool | true | \u662f\u5426\u542f\u7528\u79c1\u804a\u529f\u80fd | \n| `allow_custom_prompt` | bool | true | \u662f\u5426\u5141\u8bb8\u81ea\u5b9a\u4e49\u63d0\u793a | \n| `allow_send_to_admin` | bool | true | \u662f\u5426\u5141\u8bb8\u5411\u7ba1\u7406\u5458\u53d1\u9001\u6d88\u606f | \n| `admin_group` | int | 0 | \u7ba1\u7406\u5458\u7fa4\u7ec4\u7684ID | \n| `admins` | list[int] | [] | \u7ba1\u7406\u5458\u7528\u6237\u7684\u5217\u8868 | \n| `open_ai_base_url` | string | \"\" | OpenAI\u534f\u8bae API URL | \n| `open_ai_api_key` | string | \"\" | OpenAI\u534f\u8bae API \u5bc6\u94a5 | \n| `say_after_self_msg_be_deleted` | bool | true | \u81ea\u5df1\u7684\u6d88\u606f\u88ab\u5220\u9664\u540e\u662f\u5426\u56de\u590d | \n| `group_added_msg` | string | \"\u4f60\u597d\uff0c\u6211\u662fSuggar\uff0c\u6b22\u8fce\u4f7f\u7528Suggar\u7684AI\u804a\u5929\u673a\u5668\u4eba\uff0c\u4f60\u53ef\u4ee5\u5411\u6211\u63d0\u95ee\u4efb\u4f55\u95ee\u9898\uff0c\u6211\u4f1a\u5c3d\u529b\u56de\u7b54\u4f60\u7684\u95ee\u9898\uff0c\u5982\u679c\u4f60\u9700\u8981\u5e2e\u52a9\uff0c\u4f60\u53ef\u4ee5\u5411\u6211\u53d1\u9001\u201c\u5e2e\u52a9\u201d\" | \u52a0\u5165\u7fa4\u7ec4\u65f6\u53d1\u9001\u7684\u6b22\u8fce\u6d88\u606f | \n| `send_msg_after_be_invited` | bool | true | \u88ab\u9080\u8bf7\u8fdb\u7fa4\u540e\u662f\u5426\u53d1\u9001\u6d88\u606f | \n| `after_deleted_say_what` | list[str] | [ \"Suggar\u8bf4\u9519\u4ec0\u4e48\u8bdd\u4e86\u5417\uff5e\u4e0b\u6b21\u6211\u4f1a\u6ce8\u610f\u7684\u5462\uff5e\", \"\u62b1\u6b49\u5566\uff0c\u4e0d\u5c0f\u5fc3\u8bf4\u9519\u5566\uff5e\", ... ] | \u6d88\u606f\u88ab\u5220\u9664\u540e\u968f\u673a\u56de\u590d\u7684\u5185\u5bb9 |\n| `use_base_prompt` | bool | true | \u662f\u5426\u4f7f\u7528\u57fa\u672c\u63d0\u793a\u8bcd\uff08\u5373\u8ba9LLM\u7406\u89e3\u6d88\u606f\u6bb5\u89e3\u6790\uff09 |\n| `preset` | string | __main__ | \u662f\u5426\u4f7f\u7528\u9884\u8bbe\uff08\u5728\u5de5\u4f5c\u76ee\u5f55\u7684models\u6587\u4ef6\u5939\u4e0b\uff0c\u9884\u8bbejson\u683c\u5f0f\u53c2\u8003\u4e0b\u6587\uff08\u4f60\u7684\u9884\u8bbe\u540d**\u4e0d\u80fd**\u8bbe\u4e3a`__main__`\uff09\u5348\uff09 |\n| `max_tokens` | int | 100 | \u5728\u5355\u6b21\u65f6\uff0cLLM\u6700\u591a\u53ef\u4ee5\u56de\u590d\u591a\u5c11\u4e2atoken\uff08\u5373\u5b57\u6570\uff0c\u5982\u679c\u4f60\u7684\u6a21\u578b\u63d0\u4f9b\u5546\u652f\u6301 |\n| `model` | str | auto | \u4f7f\u7528\u4ec0\u4e48\u6a21\u578b\uff08\u5177\u4f53\u770b\u4f60\u7684API\u63d0\u4f9b\u5546 |\n| `parse_segments` | bool | true | \u662f\u5426\u89e3\u6790\u6d88\u606f\u6bb5\uff0c\u6b64\u6743\u91cd\u8986\u76d6`use_base_prompt`\uff08\u5373at/\u5408\u5e76\u8f6c\u53d1\u7b49\uff09 |\n\n</details>\n\n## \u9884\u8bbe\n\u9884\u8bbe\u6587\u4ef6\u4f4d\u4e8e\u5de5\u4f5c\u76ee\u5f55\u7684models\u6587\u4ef6\u5939\u4e0b\uff0c\u9884\u8bbe\u6587\u4ef6\u4e3ajson\u683c\u5f0f\uff0c\u5177\u4f53\u683c\u5f0f\u5982\u4e0b\uff1a\n\n```json\n {\n \"model\":\"auto\",\n \"name\":\"\",\n \"base_url\":\"\",\n \"api_key\":\"\"\n }\n```\n### \u89e3\u91ca\uff1a\n- `model`: \u4f7f\u7528\u7684\u6a21\u578b\uff0c\u9ed8\u8ba4\u4e3aauto\uff0c\u5373\u81ea\u52a8\u9009\u62e9\u3002\n- `name`: \u9884\u8bbe\u7684\u540d\u5b57\uff0c\u7528\u4e8e\u5728\u63d2\u4ef6\u4e2d\u9009\u62e9\u4f7f\u7528\u3002\n- `base_url`: OpenAI\u534f\u8bae API URL\uff0c\u9ed8\u8ba4\u4e3a\u7a7a\u3002\n- `api_key`: OpenAI\u534f\u8bae API \u5bc6\u94a5\uff0c\u9ed8\u8ba4\u4e3a\u7a7a\u3002\n## \u9884\u8bbe\u4f7f\u7528\u65b9\u6cd5\n1. \u5728\u5de5\u4f5c\u76ee\u5f55\u7684models\u6587\u4ef6\u5939\u4e0b\uff0c\u521b\u5efa\u4e00\u4e2ajson\u6587\u4ef6\uff0c\u6587\u4ef6\u540d\u5fc5\u987b\u4e0e\u9884\u8bbe\u7684\u540d\u5b57\u4e00\u81f4\u3002\n2. \u5728json\u6587\u4ef6\u4e2d\uff0c\u586b\u5199\u9884\u8bbe\u7684\u5185\u5bb9\u3002\n3. \u5728\u63d2\u4ef6\u914d\u7f6e\u6587\u4ef6\u4e2d\uff0c\u5c06`preset`\u7684\u503c\u8bbe\u7f6e\u4e3a\u9884\u8bbe\u7684\u540d\u5b57\uff08\u6211\u4eec\u66f4\u63a8\u8350\u4f60\u4f7f\u7528**\u6307\u4ee4**\u6765\u5207\u6362\u800c\u4e0d\u662f\u76f4\u63a5\u4fee\u6539\u914d\u7f6e\u6587\u4ef6\uff09\u3002\n## \u6307\u4ee4\u4f7f\u7528\u65b9\u6cd5\n| \u6307\u4ee4 | \u53c2\u6570 | \u89e3\u91ca |\n|--------------|-----------------|------------------------------|\n| **/\u804a\u5929\u83dc\u5355** \u6216 **/chat_menu**: | \u65e0 | \u663e\u793a\u804a\u5929\u83dc\u5355| \n| **/del_memory**, **/\u5931\u5fc6**, **/\u5220\u9664\u8bb0\u5fc6**, **/\u5220\u9664\u5386\u53f2\u6d88\u606f**, **/\u5220\u9664\u56de\u5fc6**| \u65e0 | \u5220\u9664\u804a\u5929\u8bb0\u5fc6 |\n| **/enable_chat** \u6216 **/\u542f\u7528\u804a\u5929** | \u65e0 | \u542f\u7528\u804a\u5929\u529f\u80fd |\n | **/disable_chat** \u6216 **/\u7981\u7528\u804a\u5929**| \u65e0 |\u7981\u7528\u804a\u5929\u529f\u80fd\n | **/prompt** | `--(show)` \u5c55\u793a\u5f53\u524d\u63d0\u793a\u8bcd\uff0c`--(clear)` \u6e05\u7a7a\u5f53\u524dprompt\uff0c`--(set) <\u6587\u5b57>`\u5219\u8bbe\u7f6e\u63d0\u793a\u8bcd | \u8bbe\u7f6e\u6216\u67e5\u770b\u5f53\u524d\u81ea\u5b9a\u4e49\u63d0\u793a\u8bcd\uff08\u9002\u7528\u4e8e\u7528\u6237\u81ea\u5b9a\u4e49\u8865\u5145\u63d0\u793a\u8bcd\uff09\n | **/presets** | \u65e0 | \u67e5\u770b\u53ef\u7528\u7684\u9884\u8bbe\u5217\u8868\n | **/set_preset** \u6216 **/\u8bbe\u7f6e\u9884\u8bbe** \u6216 **/\u8bbe\u7f6e\u6a21\u578b\u9884\u8bbe** | `<\u9884\u8bbe\u540d>` |\u8bbe\u7f6e\u5f53\u524d\u4f7f\u7528\u7684\u9884\u8bbe\n\n<details><summary>\u9690\u85cf\u6307\u4ee4</summary>\n\n## \u9690\u85cf\u6307\u4ee4\n\n\u4e3a\u4ec0\u4e48\u4f1a\u6709\uff1f\u56e0\u4e3a\u5f00\u53d1\u8005\u4e3a\u4e86DEBUG\uff0c\u4f1a\u4fdd\u7559\u4e00\u4e9b\u5728\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u6d4b\u8bd5\u7684\u6307\u4ee4\uff0c\u5982\u679c\u60a8\u53ea\u662f\u666e\u901a\u7528\u6237\uff0c\u8bf7\u5ffd\u7565\uff0c\u4e5f\u4e0d\u63a8\u8350\u60a8\u53bb\u4f7f\u7528\u8fd9\u4e9b\u6307\u4ee4\n~~\u4e3b\u8981\u662f\u5199\u7684\u5783\u573e~~\n\u3002\n| \u6307\u4ee4 | \u53c2\u6570 | \u89e3\u91ca |\n|--------------|-----------------|------------------------------|\n| **/debug** | \u65e0 | \u663e\u793a\u8c03\u8bd5\u4fe1\u606f\u5e76\u63a8\u9001 |\n\n\n</details>\n\n## \u63d2\u4ef6\u4e2d\u95f4\u4ef6\u4e8b\u4ef6\u5904\u7406\u5199\u6cd5(\u5b9e\u9a8c,\u9700\u8981\u5728\u914d\u7f6e\u6587\u4ef6json\u4e2d\u628a`enable_lab_function`\u6539\u4e3a`true`)\n\n\n```py\n\nfrom nonebot.plugin import require\nrequire(\"nonebot_plugin_suggarchat\")\nfrom nonebot_plugin_suggarchat.on_event import on_chat\nfrom nonebot_plugin_suggarchat.event import ChatEvent\n@on_chat().handle()\nasync def your_def(event:SuggarEvent):\n print(\"Hello,World\")\n\n\n```\n\n## \u8ba8\u8bba\n\nQQ \u4ea4\u6d41\u7fa4: [\u94fe\u63a5](https://qm.qq.com/q/PFcfb4296m)",
"bugtrack_url": null,
"license": "GPL-3.0-or-later",
"summary": "Plugin for the Suggar chat framework compatible with Nonebot2.",
"version": "0.1.7.3",
"project_urls": {
"Homepage": "https://github.com/JohnRichard4096/nonebot_plugin_suggarchat",
"Issue Tracker": "https://github.com/JohnRichard4096/nonebot_plugin_suggarchat/issues",
"Source": "https://github.com/JohnRichard4096/nonebot_plugin_suggarchat"
},
"split_keywords": [
"chat",
" suggar",
" nonebot"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0925aad420bdfda6cc263e81570f7f667b33e391c31a9b7620187d1db521ff6d",
"md5": "cc41e7b92517cc1e74037df43a1aa367",
"sha256": "e960e5445e986c72f98555f7744c628b7b5ea8af1d5ee624daf2c98273f55722"
},
"downloads": -1,
"filename": "nonebot_plugin_suggarchat-0.1.7.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "cc41e7b92517cc1e74037df43a1aa367",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "~=3.9",
"size": 37937,
"upload_time": "2025-01-12T09:19:19",
"upload_time_iso_8601": "2025-01-12T09:19:19.756793Z",
"url": "https://files.pythonhosted.org/packages/09/25/aad420bdfda6cc263e81570f7f667b33e391c31a9b7620187d1db521ff6d/nonebot_plugin_suggarchat-0.1.7.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "537b2f4f1d2407088ff419362d93901fc011cbc4881ed2b485e71bdee900554f",
"md5": "3aa27bd1ea6fedea9c6d03c557ecaa68",
"sha256": "947532ae305a170b71dfee19b2d51f8a20dd78635513be81e265b59ca9e69d13"
},
"downloads": -1,
"filename": "nonebot_plugin_suggarchat-0.1.7.3.tar.gz",
"has_sig": false,
"md5_digest": "3aa27bd1ea6fedea9c6d03c557ecaa68",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "~=3.9",
"size": 38577,
"upload_time": "2025-01-12T09:19:23",
"upload_time_iso_8601": "2025-01-12T09:19:23.341813Z",
"url": "https://files.pythonhosted.org/packages/53/7b/2f4f1d2407088ff419362d93901fc011cbc4881ed2b485e71bdee900554f/nonebot_plugin_suggarchat-0.1.7.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-12 09:19:23",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "JohnRichard4096",
"github_project": "nonebot_plugin_suggarchat",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "nonebot-plugin-suggarchat"
}