AstrBot 智能重试插件 (Intelligent Retry)
一个为 AstrBot 设计的高性能智能重试插件,专门解决大语言模型(LLM)交互中的不稳定问题。通过三层智能检测系统和并发重试机制,显著提升对话体验和响应速度。
当前版本:v3.0.1 - 🔥 重要修复:人格丢失和TTS插件兼容性问题
✨ 核心特性
🔍 三层智能检测系统
- 第一层:字符级检测 - 优化的正则表达式,识别异常结尾
- 第二层:结构完整性检测 - 检测括号、引号匹配,代码块完整性
- 第三层:内容类型自适应 - 根据内容类型(代码、列表、JSON等)使用专门策略
⚡ 并发重试机制
- 显著减少响应延迟 - 第一次重试失败后启用并发模式
- 指数增长并发数 - 2→4→8→16个请求,快速获得有效回复
- 智能资源管理 - 首个有效回复立即返回,自动取消其他请求
- 用户可控开关 - 考虑token成本,提供完全的用户控制权
🎯 精准错误处理
- 空回复检测 - 自动识别并重试空响应
- 错误关键词检测 - 可配置的错误关键词识别
- HTTP状态码控制 - 支持状态码白名单/黑名单机制
- 工具调用兼容 - 检测到function_call时不干预
🔧 高级配置选项
- 双钩子架构 - 请求存储 + 响应检测,提升性能
- 多种检测模式 - Basic/Enhanced/Strict三种强度
- 灵活重试策略 - 固定间隔或指数退避
- 完整的日志系统 - 详细的调试和监控信息
🚀 性能优势
| 特性 | 传统重试 | 智能并发重试 |
|---|---|---|
| 响应延迟 | 单次延迟 × N次 | 单次延迟 + 最快响应时间 |
| 成功率 | 逐次尝试 | 并行尝试,成功率更高 |
| 资源利用 | 串行消耗 | 智能管控,首个成功立即停止 |
| 用户体验 | 长时间等待 | 快速响应,明显改善 |
典型场景:配置10次重试
- 传统模式:可能需要60+秒
- 并发模式:通常15-20秒内完成
📦 安装方法
方法一:AstrBot 插件市场(推荐)
在 AstrBot 插件市场搜索 intelligent_retry 直接安装。
方法二:手动安装
cd /path/to/AstrBot/data/plugins
git clone https://github.com/muyouzhi6/astrbot_plugin_retry.git
# 重启 AstrBot 或在 WebUI 中重载插件
⚙️ 配置选项
所有配置可在 WebUI → 插件管理 → Intelligent Retry → 配置 中设置
基础配置
| 配置项 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| 最大重试次数 | 整数 | LLM回复异常时的最大重试次数,0=禁用 | 3 |
| 重试间隔(秒) | 整数 | 重试间隔时间,单位秒 | 2 |
| 重试间隔模式 | 字符串 | fixed=固定间隔,exponential=指数退避 |
exponential |
| 兜底回复 | 文本 | 所有重试失败时的用户提示 | 预设友好提示 |
智能检测配置
| 配置项 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| 启用截断重试 | 布尔 | 是否启用智能截断检测功能 | false |
| 截断检测模式 | 字符串 | basic/enhanced/strict 检测强度 |
enhanced |
| 结构完整性检测 | 布尔 | 检测括号、引号匹配 | true |
| 内容类型自适应检测 | 布尔 | 根据内容类型使用专门策略 | true |
| 代码块检测 | 布尔 | 检测Markdown代码块完整性 | true |
| 引号匹配检测 | 布尔 | 检测引号配对完整性 | true |
| 最小合理长度 | 整数 | 有效回复的最小字符数 | 10 |
并发重试配置
| 配置项 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| 启用并发重试 | 布尔 | 是否启用并发重试功能(建议开启) | false |
| 并发重试触发阈值 | 整数 | 第几次失败后启动并发模式,0=直接并发 | 1 |
| 基础并发数量 | 整数 | 第一批并发请求数量(后续指数增长) | 2 |
| 并发重试超时 | 整数 | 并发重试的最大等待时间(秒) | 30 |
错误检测配置
| 配置项 | 类型 | 描述 | 默认值 |
|---|---|---|---|
| 错误关键词 | 文本 | 触发重试的错误关键词,每行一个 | 预设常见错误 |
| 允许重试的状态码 | 文本 | HTTP状态码白名单,每行一个 | 400,429,502,503,504 |
| 禁止重试的状态码 | 文本 | HTTP状态码黑名单,每行一个 | 空 |
🔄 工作原理
双钩子架构
用户请求 → [请求钩子: 存储参数] → LLM处理 → [响应钩子: 检测&重试] → 用户回复
智能重试流程
第1次失败 → 检查并发阈值设置
↓
┌─ 阈值=0:直接启动并发模式 ──→ 并发批次1: 2个请求
│ ↓ 失败
└─ 阈值>0:顺序重试N次 ──→ 失败 → 并发批次1: 2个请求
↓ 失败
并发批次2: 4个请求 → 任意成功 → 立即返回
↓ 失败
并发批次3: 8个请求 → 任意成功 → 立即返回
↓ 全部失败
兜底回复
📊 三层检测详解
第一层:字符级检测
- 检测异常结尾字符
- 支持中英文标点、数字、字母
- 识别文件扩展名、URL等合法结尾
第二层:结构检测
- 括号匹配:
()[]{}<> - 引号配对:
"'"""''' - 代码块:Markdown
```结构 - 数据格式:JSON、XML完整性
第三层:内容自适应
- 代码内容:语法结构、缩进检测
- 自然语言:句子完整性、语义检查
- 列表内容:编号、项目符号检测
- 表格数据:分隔符、对齐检测
📈 版本更新
v2.9.7 (当前版本)
✅ 修复人格丢失问题
✅ 修复TTS插件兼容性
✅ 优化上下文保持
✅ 代码风格规范
🔧 内部优化改进
v2.9.1
- ✨ 简化插件架构,移除强制人设和上下文预览等冗余功能
- 🔧 使用原始请求参数确保完整重试,提升透明性
- 📊 配置项从21个精简到16个,降低用户配置复杂度
- 🛠️ 优化代码结构,提升维护性和性能
v2.9.0
- ✨ 新增并发重试机制,显著减少响应延迟
- 🔧 实现指数增长的并发请求策略
- 🛠️ 修复并发重试中的任务管理bug
- 📊 完善资源管理和异常处理
v2.8.0
- ✨ 新增三层智能截断检测系统
- 🔧 实现内容类型自适应检测
- 🛠️ 重构代码架构,提升性能
🙏 致谢与借鉴
本插件的双钩子架构设计借鉴了 @zgojin 开发的 astrbot_plugin_retry_v2 项目的优秀思路。
该项目采用了先进的"请求存储 + 响应检测"双钩子机制,为我们的架构优化提供了重要的技术启发。
推荐大家为这个优秀的项目点个 ⭐ Star:
👉 https://github.com/zgojin/astrbot_plugin_retry_v2
感谢开源社区的互相学习与共同进步!
💡 使用建议
推荐配置
- 日常使用:启用并发重试,设置3-5次重试
- 成本敏感:关闭并发重试,使用传统模式
性能优化
- 合理设置并发数量(2-4个通常足够)
- 根据实际需要调整超时时间
- 在稳定网络环境下可适当减少重试次数
❓ 常见问题
Q: 并发重试会浪费很多token吗?
A: 插件设计了"首个成功立即停止"机制,并提供用户开关控制,可根据需求平衡性能和成本。
Q: 如何判断插件是否正常工作?
A: 启用调试日志,观察重试过程和检测结果。正常情况下插件对用户透明。
Q: 支持哪些LLM服务商?
A: 支持所有AstrBot兼容的LLM服务商,包括OpenAI、Gemini、Claude等。
Q: 可以只启用截断检测而不启用错误重试吗?
A: 可以,通过配置不同的检测选项实现精确控制。
🤝 贡献与支持
- 🐛 问题反馈:GitHub Issues
- 🚀 功能建议:欢迎提交Pull Request
- ⭐ 支持项目:给个Star是最大的鼓励!
� 更新日志
v2.9.7 (2025-09-02) 🔥 重要修复
- ✅ 修复人格丢失问题:重试时现在使用完整的人格信息,确保角色设定在重试过程中不会丢失
- ✅ 修复TTS插件兼容性:重试结果现在正确标记为
LLM_RESULT类型,TTS插件能正常识别并生成语音 - ✅ 优化上下文保持:完整保存
conversation、system_prompt等关键参数 - ✅ 代码风格规范:通过ruff格式化,符合AstrBot项目规范
- 🔧 内部优化:统一导入路径,提升插件生态兼容性
v2.9.6 (2024-12-XX)
- 新增智能截断检测与并发重试功能
- 简化架构移除冗余功能,提升性能
�📄 许可证
本项目基于 MIT License 开源。
✍️ 作者
- 原作者:@muyouzhi6
- 优化贡献:@长安某
- 当前版本:智能检测与并发优化增强版
让AI对话更稳定,让等待时间更短暂 🚀