fix(core): 修复人格预设对话的重复注入 (#3088)

备份Context避免供应商适配器移除Context内字段导致将预设会话存入历史。深拷贝人格预设会话防止运行时被意外修改。

#3063
This commit is contained in:
Dt8333
2025-10-19 20:13:57 +08:00
committed by GitHub
parent 3550103e45
commit 361d78247b
2 changed files with 8 additions and 1 deletions

View File

@@ -480,6 +480,9 @@ class LLMRequestSubStage(Stage):
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 @@ class LLMRequestSubStage(Stage):
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 特殊情况

View File

@@ -1,3 +1,4 @@
import copy
import astrbot.api.star as star
import builtins
import datetime
@@ -41,7 +42,7 @@ class ProcessLLMRequest:
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