[P1/高] compressMessages 用 user 角色注入摘要,导致语义混淆 #30

Open
opened 2026-07-21 21:55:56 +08:00 by thzxx · 0 comments
Owner

问题类型

缺陷 / 高 / Agent 引擎

文件位置

electron/harness/agent-loop/engine.ts

问题描述

上下文压缩时,将历史消息摘要作为 user 消息注入:

messages = [
  { role: 'user', content: 'Summary of previous conversation: ...' },
  ...recentMessages,
];

问题:

  1. 语义混淆:LLM 可能将摘要视为新的用户指令
  2. 行为偏移:模型可能基于"Summary of previous conversation"字面意思执行奇怪操作
  3. 角色错乱:摘要应保持 system 角色或 assistant 角色以保持中立

影响

  • 上下文压缩后模型行为不稳定
  • 可能误执行摘要中提到的操作

建议修复

方案 A(推荐):注入为 system 角色

messages = [
  { role: 'system', content: `[Context Summary]\n${summary}` },
  ...recentMessages,
];

方案 B:保持原角色顺序,仅替换内容

// 保留前 N 条的 role,仅替换 content
const compressed = [
  { role: messages[0].role, content: summary },
  ...messages.slice(-recentCount),
];

方案 A 更清晰,推荐采用。

## 问题类型 缺陷 / 高 / Agent 引擎 ## 文件位置 `electron/harness/agent-loop/engine.ts` ## 问题描述 上下文压缩时,将历史消息摘要作为 user 消息注入: ```ts messages = [ { role: 'user', content: 'Summary of previous conversation: ...' }, ...recentMessages, ]; ``` 问题: 1. **语义混淆**:LLM 可能将摘要视为新的用户指令 2. **行为偏移**:模型可能基于"Summary of previous conversation"字面意思执行奇怪操作 3. **角色错乱**:摘要应保持 system 角色或 assistant 角色以保持中立 ## 影响 - 上下文压缩后模型行为不稳定 - 可能误执行摘要中提到的操作 ## 建议修复 方案 A(推荐):注入为 system 角色 ```ts messages = [ { role: 'system', content: `[Context Summary]\n${summary}` }, ...recentMessages, ]; ``` 方案 B:保持原角色顺序,仅替换内容 ```ts // 保留前 N 条的 role,仅替换 content const compressed = [ { role: messages[0].role, content: summary }, ...messages.slice(-recentCount), ]; ``` 方案 A 更清晰,推荐采用。
thzxx added the ??Agent??? labels 2026-07-21 21:55:56 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MetonaTeam/metona-ai-desktop#30