From a75776f085604eca5f96630489edcc75c4f927d5 Mon Sep 17 00:00:00 2001 From: SXP-Simon Date: Sat, 4 Apr 2026 20:18:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(analyzer):=20=E5=A2=9E=E5=BC=BA=E4=BA=BA?= =?UTF-8?q?=E6=A0=BC=E8=AE=BE=E5=AE=9A=E6=B3=A8=E5=85=A5=E7=AD=96=E7=95=A5?= =?UTF-8?q?=EF=BC=8C=E9=87=87=E7=94=A8=E9=A6=96=E5=B0=BE=E5=8F=8C=E9=87=8D?= =?UTF-8?q?=E6=B3=A8=E5=85=A5=E6=8F=90=E5=8D=87=E8=A7=92=E8=89=B2=E4=BF=9D?= =?UTF-8?q?=E6=8C=81=E8=83=BD=E5=8A=9B=EF=BC=8C=E9=81=BF=E5=85=8D=E8=81=8A?= =?UTF-8?q?=E5=A4=A9=E8=AE=B0=E5=BD=95=E4=B8=8A=E4=B8=8B=E6=96=87=E8=BF=87?= =?UTF-8?q?=E9=95=BF=E5=AF=BC=E8=87=B4=E7=9A=84=20LLM=20=E5=AF=B9=E4=BA=8E?= =?UTF-8?q?=E4=BA=BA=E6=A0=BC=E6=8F=90=E7=A4=BA=E8=AF=8D=E7=9A=84=E6=B3=A8?= =?UTF-8?q?=E6=84=8F=E5=8A=9B=E4=B8=8B=E9=99=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../analysis/analyzers/base_analyzer.py | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/infrastructure/analysis/analyzers/base_analyzer.py b/src/infrastructure/analysis/analyzers/base_analyzer.py index b4fb762..8c87eb1 100644 --- a/src/infrastructure/analysis/analyzers/base_analyzer.py +++ b/src/infrastructure/analysis/analyzers/base_analyzer.py @@ -308,6 +308,24 @@ class BaseAnalyzer(ABC, Generic[TDataObject]): except Exception as e: logger.error(f"保存调试数据失败: {e}", exc_info=True) + def _apply_persona_reinforcement( + self, prompt: str, system_prompt: str | None + ) -> str: + """ + 核心的人格强化注入逻辑。采用首尾双重注入(双倍强度)。 + """ + if not system_prompt or not system_prompt.strip(): + return prompt + + logger.info(f"[{self.get_data_type()}分析] 已启用人格设定(首尾双倍强度强化)") + return ( + f"【角色设定激活】\n你接下来的分析回复必须全程严格保持以下人格设定:\n{system_prompt}\n\n" + "--- 任务指令与数据开始 ---\n" + f"{prompt}\n" + "--- 任务指令与数据结束 ---\n\n" + f"【再次强制强调:请务必沉浸并以此人设口吻进行输出】\n{system_prompt},并且严格遵守任务指令部分的要求进行分析输出。" + ) + async def analyze( self, data: object, umo: str | None = None, session_id: str | None = None ) -> tuple[list[TDataObject], TokenUsage]: @@ -362,16 +380,8 @@ class BaseAnalyzer(ABC, Generic[TDataObject]): # 获取人格设定 system_prompt = await self._build_system_prompt(umo) - # 如果开启了人格设定且成功获取到 Prompt,我们将其注入到主提示词中,以确保最佳效果 - if system_prompt: - logger.info(f"[{self.get_data_type()}分析] 已启用人格设定") - # 在主提示词前添加人格说明,并要求 LLM 保持风格 - prompt = ( - f"你可以扮演以下人格:\n{system_prompt}\n\n" - f"请在接下来的分析工作中,保持上述人格的角色定位和说话风格。\n" - "--- 任务开始 ---\n" - f"{prompt}" - ) + # 应用人格强化注入 + prompt = self._apply_persona_reinforcement(prompt, system_prompt) logger.info(f"[{self.get_data_type()}分析] 开始发起 LLM 请求, umo: {umo}")