来提交你的插件吧!
有疑问?来看看呗!

插件详情

astrbot_plugin_retry_v2

一个基于事件钩子的、处理空回复和截断等非完整响应的重试插件

优化
版本v1.0.0
作者长安某
Star5
更新2025/11/01

插件说明

astrbot_plugin_retry_v2

重构后的基于事件钩子的、处理空回复和非完整响应的插件

这是一个为 AstrBot 设计的插件,旨在提高大型语言模型(LLM)响应的稳定性和可靠性。 当机器人从LLM收到的响应为空、不完整或包含特定错误信息时,此插件会自动进行重试,从而对用户屏蔽底层模型的瞬时故障。

主要功能

  • 自动重试:在LLM响应失败时,插件会自动重新发送请求,无需人工干预。
  • 双重失败检测机制:
    1. 响应内容检测:监控LLM的直接输出。如果响应为空、不完整(例如,因长度限制被截断)或API返回了非正常的终止原因,插件将启动重试。
    2. 错误关键词检测:监控经过 AstrBot 框架处理后的最终消息。如果在发送给用户的消息中检测到预设的错误关键词(如 “API 返回的内容为空”),插件同样会触发重试。
  • 可配置性:用户可以自定义最大重试次数、重试之间的延迟时间、是否启用指数退避策略(即每次重试的间隔时间加倍)以及触发重试的错误关键词。
  • 最终回退消息:如果所有重试尝试均告失败,插件会向用户发送一条可定制的友好提示信息,告知用户请求未能成功处理。

逻辑

插件通过监听 AstrBot 内部的事件钩子来无缝地集成到消息处理流程中:

  1. 备份请求:当一个LLM请求即将发出时 (on_llm_request 事件),插件会完整备份原始的请求数据。

  2. 执行失败检测:

    • 检测点A (on_llm_response):在收到LLM的原始响应后,检查响应体中的 finish_reason 字段是否为 "stop" 或 "tool_calls",如果不是则将其标记为一次失败的响应。
    • 检测点B (on_decorating_result):检查最终的文本内容。如果内容中包含了用户在配置文件中定义的任何“重试关键词”,则同样视为失败。
  3. 执行重试循环:

    • 一旦检测到失败,插件会启动一个重试循环。
    • 它会根据配置的延迟策略(固定延迟或指数退避)等待一段时间。
    • 使用步骤1中备份的原始请求数据,向LLM重新发起一次完全相同的请求。
    • 收到新响应后,再次进行有效性检查。如果成功,则用新响应替换掉原来的失败响应,并中断重试循环。
    • 如果依然失败,则重复此过程,直到达到最大重试次数。
  4. 最终处理:

    • 重试成功:新的、成功的LLM响应将无缝地继续其在 AstrBot 中的正常处理流程,用户将收到一个看起来一次就成功的回复。
    • 重试失败:如果达到最大重试次数后仍然失败,插件将放弃重试,并生成一条预设的“后备回复”(Fallback Reply)发送给用户,同时阻止后续的消息处理,以避免发送不完整或错误的信息。
  5. 清理:一旦最终消息成功发送给用户 (after_message_sent 事件),插件会清除之前备份的请求数据,以防止内存泄漏。

AstrBot LogoAstrBot 插件市场社区

AstrBot 插件市场 是一个开放的插件分享平台,欢迎开发者们贡献优质插件。本站致力于为 AstrBot 用户提供高质量扩展,帮助您快速找到喜欢的插件,并鼓励社区伙伴分享使用心得、提出改进建议。

相关链接

官方项目主站 官方插件市场 官方项目仓库 侧边展示主站

开发相关

插件开发文档 快速提交插件 官方项目文档

© 2026 AstrBot 插件市场 Made with by Community