无限对话插件 (Infinite Dialogue)
简介
这是一个为 AstrBot 设计的插件,旨在通过自动总结对话历史来实现"无限对话"功能。当对话轮数达到设定阈值时,插件会自动调用 LLM 对之前的对话进行总结,并将总结作为"前情提要"注入到新的对话中,同时清理旧的对话历史。这样既能保持上下文连贯,又能避免 Context Window 溢出,节省 Token 消耗。
功能特性
- 自动总结:达到设定阈值后自动触发总结。
- 无感衔接:总结内容自动注入到下一条消息中,AI 能够无缝衔接之前的上下文。
- 智能重试与降级:总结失败时自动重试,若指定模型不可用,会自动降级使用当前会话的模型。
- 故障保护:若所有重试均失败,系统会发出警告并保留当前对话历史,确保信息不丢失,等待下次触发。
- 白名单机制:支持配置白名单,仅允许特定的群组或用户触发无限对话功能。
配置说明
在 AstrBot 的插件配置界面中,你可以设置以下参数:
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
max_conversation_length |
整数 | 40 | 触发总结的对话次数阈值 (N)。当历史记录达到此数量时触发。 |
summary_provider_id |
字符串 | (空) | 用于总结的模型提供商 ID (如 openai, gemini)。留空则使用当前会话的模型。 |
max_retries |
整数 | 3 | 总结失败时的最大重试次数。 |
whitelist |
列表 | [] | 白名单列表。填写群号或 QQ 号。留空则对所有会话生效。 |
故障处理机制
插件内置了健壮的故障处理流程:
- 首选尝试:尝试使用配置的
summary_provider_id进行总结。 - 自动降级:如果首选模型失败,立即尝试使用当前会话正在使用的模型提供商。
- 循环重试:上述过程会重复进行,直到达到
max_retries次数。 - 最终失败保护:如果所有尝试都失败,插件会向用户发送一条警告消息,告知总结系统故障。此时不会清理对话历史,而是保留所有记录,等待下一次触发时再次尝试总结(届时将包含更多历史记录)。
安装方法
- 将
astrbot_plugin_infinite_dialogue文件夹放置在 AstrBot 的data/plugins/目录下。 - 重启 AstrBot。
- 在控制台或 WebUI 中启用插件。
常见问题
- Q: 总结后 AI 忘记了之前的细节?
- A: 总结必然会丢失部分细节,但会保留关键信息。你可以尝试调大
max_conversation_length来减少总结频率。
- A: 总结必然会丢失部分细节,但会保留关键信息。你可以尝试调大
- Q: 收到"总结系统故障"的警告怎么办?
- A: 这说明插件无法连接到任何可用的 LLM 进行总结。请检查你的网络连接、模型配置或 API Key 是否过期。
作者
Alan Backer