From b2fff64b6f4301cc683f9d94c67f171631ba254e Mon Sep 17 00:00:00 2001 From: Dt8333 Date: Sat, 18 Oct 2025 15:52:21 +0800 Subject: [PATCH] =?UTF-8?q?fix(core):=20=E4=BF=AE=E5=A4=8D=E4=BA=BA?= =?UTF-8?q?=E6=A0=BC=E9=A2=84=E8=AE=BE=E5=AF=B9=E8=AF=9D=E7=9A=84=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E6=B3=A8=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 备份Context避免供应商适配器移除Context内字段导致将预设会话存入历史。深拷贝人格预设会话防止运行时被意外修改。 #3063 --- astrbot/core/pipeline/process_stage/method/llm_request.py | 6 ++++++ packages/astrbot/process_llm_request.py | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) 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