简单好用的AI聊天插件,支持多API,支持让AI理解图片,发送表情包,合成语音,艾特,戳一戳等;可配置关键词允许AI主动发言
Important
写的比较史,欢迎提pr或issue!
- 表情包
- 语音(非预设语录,AI想说什么就生成什么)
- 戳一戳
- 艾特
- 群内禁言
- 图片/表情包 (需模型支持)
使用 nb-cli 安装
在 nonebot2 项目的根目录下打开命令行, 输入以下指令即可安装nb plugin install nonebot-plugin-aitalk
使用包管理器安装
在 nonebot2 项目的插件目录下, 打开命令行, 根据你使用的包管理器, 输入相应的安装命令pip
pip install nonebot-plugin-aitalk
打开 nonebot2 项目根目录下的 pyproject.toml
文件, 在 [tool.nonebot]
部分追加写入
plugins = ["nonebot_plugin_aitalk"]
在 nonebot2 项目的.env
文件中添加下表中的必填配置
配置项 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
aitalk_api_list | list | 是 | [ ] | API列表,支持多个API,格式请往下看 |
aitalk_available_memes | list | 是 | [ ] | AI可以发送的表情包,格式请往下 |
aitalk_api_list(api列表)格式
[
{
"name": "向用户展示的模型名称",
"api_key": "你的api key",
"model_name": "请求api用的模型名称",
"api_url": "api接口地址",
"image_input": 是否支持图片输入,适用于Qwen2.5-vl等多模态模型,默认为false
"send_thinking": 当有思维链时是否发送,默认为false
"description": "模型描述,用于展示给用户(非必填)"
},
{
"name": "向用户展示的模型名称2",
"api_key": "你的api key2",
"model_name": "请求api用的模型名称2",
"api_url": "api接口地址2"
}
]
aitalk_available_memes(AI可以发送的表情包)格式
[
{
"url": "图片地址,支持链接或本地路径。⚠️⚠️注意!如果是windows系统的本地路径,请将路径中的\换成/,可以看下面的配置示例⚠️⚠️",
"desc": "图片描述,告诉AI这张表情包是什么内容,用于什么场景等等"
},
{
"url": "图片地址2",
"desc": "图片描述2"
}
]
配置项 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
aitalk_default_prompt | str | 否 | "你的回答应该尽量简洁、幽默、可以使用一些语气词、颜文字。你应该拒绝回答任何政治相关的问题。" | 默认提示词 |
aitalk_disable_busy_prompts | bool | 否 | False | 是否关闭诸如“不要着急哦!”或“你的操作太频繁了哦!”之类的提示信息 |
aitalk_default_prompt_file | str | 否 | "" | 默认提示词文件路径,与提示词二选一,优先使用文件。请注意将windows系统路径中的\替换成\ |
aitalk_group_prompts_dir | str | 否 | "./aitalk_config/group_prompts" | 分群提示词文件路径,在该路径下存放"群号.txt"文件,(例如: ./aitalk_config/group_prompts/12345.txt)。请注意将windows系统路径中的\替换成\ |
配置项 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
aitalk_tts_enabled | bool | 否 | false | 是否开启语音合成 |
aitalk_tts_config | bool | 否 | false | 语音合成配置,详细请看下方 |
aitalk_tts_config(语音合成配置)格式
{
"api_url": "API地址,若默认地址无法访问可以自己搭建一个反向代理",
"api_key": "API密钥",
"reference_id": "音色id"
}
- 前往FishAudio注册登录,并充值(建议先一美元)
- 创建一个API key并填入配置项
- 点击上面的
发现
,寻找你想要的音色(或者有能力的自己合成),点进去 - 复制图片中地址的红圈部分,该部分就是id,填入配置即可
配置项 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
aitalk_reply_when_meme | bool | 否 | true | 当只有表情包时,是否回复消息 |
aitalk_reply | bool | 否 | true | 是否回复消息 |
aitalk_message_send_delay_min | float | 否 | 0.2 | 发送多条消息时,每条之间的最小延迟(秒),设为0则不延迟 |
aitalk_message_send_delay_max | float | 否 | 1.2 | 发送多条消息时,每条之间的最大延迟(秒),设为0则不延迟 |
aitalk_active_reply_context_timeout | int | 否 | 300 | 机器人主动回复后,上下文的有效时间(秒) |
aitalk_active_reply_max_unrelated_followups | int | 否 | 3 | 在主动回复上下文中,AI连续判断N次与追问无关后,关闭本次主动回复会话 (0表示不启用此功能)(秒) |
aitalk_group_active_reply_configs | Dict | 否 | {} | 分群独立主动回复配置。键为群号字符串,值为该群的特定配置,详见下方配置示例 |
aitalk_active_reply_enabled | bool | 否 | False | 是否启用主动回复功能 |
配置项 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
aitalk_command_start | str | 否 | "" | 对话触发前缀,例如“/对话”,类似on_command,为空时直接艾特即可触发 |
aitalk_completion_config | list | 否 | [ ] | 生成配置,格式请往下看 |
aitalk_max_split_length | int | 否 | 5 | 最大分割长度,将会在prompt中告诉ai,回复的消息数量不要大于这个值,可能不起作用 |
aitalk_max_context_length | int | 否 | 20 | 最长上下文消息数量,超过这个数量时,将会逐个抛弃最早的一条消息。这个数值包括设定消息 |
aitalk_save_user_config | bool | 否 | true | 是否保存用户配置,关闭nonebot时将会保存用户所选模型,对话内容等,启动时读取 |
aitalk_default_available | bool | 否 | true | 是否默认允许群聊使用,为false时需要手动使用指令开启 |
aitalk_default_available_private | bool | 否 | true | 是否默认允许私聊使用,为false时需要手动使用指令开启 |
aitalk_chat_cd | int | 否 | 5 | 聊天cd,单位秒 |
aitalk_active_reply_keywords | list[str] | 否 | [] | 主动回复的触发关键字列表, 例如 '["问题", "请问", "大佬"]' |
aitalk_active_reply_probability | float | 否 | 0.3 | 满足关键字后,触发主动回复的概率 (0.0 到 1.0) |
aitalk_active_reply_no_keyword_probability | float | 否 | 0.05 | 未满足关键字时,触发主动回复的概率 (0.0 到 1.0),建议设置较低的值 |
aitalk_completion_config(生成配置)格式
{
"max_token": 1024,
"temperature": 0.7
"top_p": 0.9
}
env配置示例
aitalk_api_list = '
[
{
"name": "deepseekr1",
"api_key": "sk-1145141919810",
"model_name": "deepseek-ai/DeepSeek-R1",
"api_url": "https://api.siliconflow.cn/v1",
"send_thinking": true
},
{
"name": "gemma-27b",
"api_key": "sk-1145141919810",
"model_name": "google/gemma-2-27b-it",
"api_url": "https://api.siliconflow.cn/v1"
}
]
'
aitalk_available_memes = '
[
{
"url": "D:/bots/imgs/1.png",
"desc": "很抱歉伤害到你"
}
{
"url": "D:/bots/imgs/3.png",
"desc": "啊哈哈...(感到尴尬)"
}
]
'
aitalk_default_prompt_file = "D:\\prompt\\日富美.txt"
aitalk_group_prompts_dir = "./aitalk_config/group_prompts"
aitalk_tts_enabled = true
aitalk_tts_config = '
{
"api_url": "https://api.fish.audio",
"api_key": "114514919810",
"reference_id": "fee77b5adcb840178e9596514d713a3b"
}
aitalk_message_send_delay_min = 0.3
aitalk_message_send_delay_max = 1.2
aitalk_active_reply_enabled = true
aitalk_active_reply_keywords = '["问题","请问","大佬","咋弄","咋搞","怎么","解压密码"]'
aitalk_active_reply_probability = 1.0
aitalk_active_reply_no_keyword_probability = 0.05
aitalk_group_active_reply_configs = '
{
"123456": {
"keywords": ["临时触发词temp"],
"probability": 1.0,
"no_keyword_probability": 0.05
},
"654321": {
"keywords": ["问题","请问","大佬","咋弄","咋搞","怎么"],
"probability": 1.0,
"no_keyword_probability": 0.05
}
}'
aitalk_disable_busy_prompts = Ture

指令 | 权限 | 需要@ | 范围 | 说明 |
---|---|---|---|---|
@机器人 | 群聊 | 是 | 群聊 | 艾特机器人即可聊天 |
模型选择 | 群聊 | 否 | 群聊 | 选择模型 |
ai对话 开启 | 管理员+ | 否 | 群聊 | 开启本群ai对话 |
ai对话 关闭 | 管理员+ | 否 | 群聊 | 关闭本群ai对话 |
清空聊天记录 | 群聊 | 否 | 群聊 | 清空对话记录 |
nonebot-plugin-llmchat 参考了部分代码以及prompt
之前更新
- 🆕更新多群配置主动触发关键词
- 🔧增加对AI返回的JSON字符串的解析的鲁棒性
- PR#15
- 🆕支持读取引用消息中的文本
- 🆕增加配置,允许AI在回复多条消息时增加随机延迟
- 🆕增加配置,允许在检测到关键词时询问AI,由AI自主决定是否需要主动发言回复用户。
- 🆕增加独立的JSON修复功能,用于在主聊天AI返回的JSON格式错误后,尝试使用独立对话AI自动修复该JSON格式。
- 🔧更新README.md中的配置项
- PR#14
- 🐛修复戳一戳失败的问题PR#13
- 🆕新增语音合成功能
- 🔧优化README
- 🆕新增分群不同提示词功能
- 🐛其他中量代码优化[PR#11]
- (#11)
- 🐛尝试修复思维链问题(#10)(#10)
- 🆕添加了模型描述,选择模型时发送给用户
- 🐛修复Q群管家检测BUG
- 🐛修复思维链输出
- 🐛修复超出最长上下文数量时的BUG
- 🆕增加禁言用户的功能PR#8
- 🐛修复私聊开关BUG
- 🆕支持输出思维链(不推荐开启,思维可能错乱)
- 🔧优化prompt
- 🐛再次修复读取“是否回复”配置项的BUG,并测试通过PR#5
- 🐛修复生成失败后队列未移除BUG
- 🐛修复路径BUG和配置读取BUGPR#4
- 🐛修复了设置输入状态的问题
- 🐛修复了私聊聊天的一些问题
- 🆕添加了私聊聊天支持
- 🐛更改data.py
- 😡排除Q群管家
- 🐛修复了表情包链接问题
- 🐛修复一些问题,更改README
- ⬇️修复依赖问题
- 🐛修复表情包本地路径问题
- 📝更新README
- 🎉发布