From 8e4e49df20b775795cd910172306d4afd4e5d976 Mon Sep 17 00:00:00 2001 From: Oscar Shaw Date: Fri, 5 Dec 2025 16:13:46 +0800 Subject: [PATCH] fix: not invoke on_llm_response hook when LLM request has error (#3871) * fix: handle on_agent_done in error responses - Introduced an LLMResponse for error messages to be processed by agent hooks, ensuring better error reporting and handling. * fix: improve error logging in on_agent_done hook --------- Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com> --- astrbot/core/astr_agent_run_util.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/astrbot/core/astr_agent_run_util.py b/astrbot/core/astr_agent_run_util.py index 7857042f3..d94d96a82 100644 --- a/astrbot/core/astr_agent_run_util.py +++ b/astrbot/core/astr_agent_run_util.py @@ -9,6 +9,7 @@ from astrbot.core.message.message_event_result import ( MessageEventResult, ResultContentType, ) +from astrbot.core.provider.entities import LLMResponse AgentRunner = ToolLoopAgentRunner[AstrAgentContext] @@ -72,7 +73,20 @@ async def run_agent( except Exception as e: logger.error(traceback.format_exc()) + err_msg = f"\n\nAstrBot 请求失败。\n错误类型: {type(e).__name__}\n错误信息: {e!s}\n\n请在平台日志查看和分享错误详情。\n" + + error_llm_response = LLMResponse( + role="err", + completion_text=err_msg, + ) + try: + await agent_runner.agent_hooks.on_agent_done( + agent_runner.run_context, error_llm_response + ) + except Exception: + logger.exception("Error in on_agent_done hook") + if agent_runner.streaming: yield MessageChain().message(err_msg) else: