diff --git a/astrbot/core/pipeline/process_stage/method/llm_request.py b/astrbot/core/pipeline/process_stage/method/llm_request.py index 6cb59674b..b2245e4da 100644 --- a/astrbot/core/pipeline/process_stage/method/llm_request.py +++ b/astrbot/core/pipeline/process_stage/method/llm_request.py @@ -480,6 +480,9 @@ async def process( new_tool_set.add_tool(tool) req.func_tool = new_tool_set + # 备份 req.contexts + backup_contexts = copy.deepcopy(req.contexts) + # run agent agent_runner = AgentRunner() logger.debug( @@ -529,6 +532,9 @@ async def process( async for _ in run_agent(agent_runner, self.max_step, self.show_tool_use): yield + # 恢复备份的 contexts + req.contexts = backup_contexts + await self._save_to_history(event, req, agent_runner.get_final_llm_resp()) # 异步处理 WebChat 特殊情况 diff --git a/packages/astrbot/process_llm_request.py b/packages/astrbot/process_llm_request.py index 2b785fd4d..8f17dd0dc 100644 --- a/packages/astrbot/process_llm_request.py +++ b/packages/astrbot/process_llm_request.py @@ -1,3 +1,4 @@ +import copy import astrbot.api.star as star import builtins import datetime @@ -41,7 +42,7 @@ def _ensure_persona(self, req: ProviderRequest, cfg: dict): if persona: if prompt := persona["prompt"]: req.system_prompt += prompt - if begin_dialogs := persona["_begin_dialogs_processed"]: + if begin_dialogs := copy.deepcopy(persona["_begin_dialogs_processed"]): req.contexts[:0] = begin_dialogs # tools select