[agent][maker-core] 用户消息内嵌输出约束与追加真实问题冲突时,轻量模型回答抖动——建议 system prompt 增加指令冲突裁决规则
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 395
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
## 环境
- 平台:Windows(Global 版桌面客户端)
- 模型:`z-ai/glm-5.3-flash`(cindy provider)
- 场景:会话恢复与消息操作测试——「编辑最后一条消息后重发」
## 现象
用户把一条 QA 测试用例作为最后一条用户消息编辑重发。该消息同时包含两段互相冲突的指令:
1. 测试用例模板自带的验证指令(预期结果第 4 条):**「关掉面板后仍可正常发:只回复这6个字:模型连通成功」**
2. 用户随后追加的真实问题:**「现在这个新版本@会变成什么,@a会弹出文件列表,单独是一个工具栏」**
结果:模型**只回复了「模型连通成功」六个字**,没有回答追加的 @ 问题。
## 关键证据:同一输入行为抖动
- 第一次重发:只回复「模型连通成功」
- 第二次重发(内容相同):完整回答了 @ 问题(「模型连通成功 ✅ 关于你问的『新版本 @ 的行为』…」)
模型的 thinking(会话文件落盘记录)显示它**读到了**追加的 @ 问题,但把模板内的「只回复这6个字」当成了约束性输出指令并选择服从:
> The instruction "只回复这6个字:模型连通成功" is part of their test protocol step 4 … So they want me to verify normal sending works by replying exactly those 6 characters. I should comply.
## 已排除的方向(供 triage 参考)
已核对会话文件(`pi-agent-home/sessions/*.jsonl` 的 parentSession 分支链),**不是**会话恢复/分支机制问题:
- 消息原文完整落盘,无截断改写
- 编辑重发的历史回放完整,旧分支回复正确丢弃,无冲突残留
- 撤回后剩余上下文回放正确
- 该轮 `usage.input=8104`,模型确实看到完整消息(thinking 中复述了 @ 问题)
初步结论:harness 传输与会话层无缺陷,问题出在模型对冲突指令的裁决,轻量 flash 档模型表现不稳定(同一 prompt 两次解析结果不同)。对照:同消息在 Codex 类 harness + 更强模型下不会出现此现象。
## 建议
1. **system prompt 护栏(maker-core 组装层)**:增加一条冲突裁决规则,例如:
> 当用户消息中同时包含输出格式约束(如「只回复 N 个字」「只回答是/否」)与实际问题时,优先响应实际问题,格式约束仅作为回答长度/形式的参考;无法判断用户意图时先澄清,而不是机械执行格式约束。
2. **QA 用例编写指引**:连通性验证指令(「只回复这6个字」类)与功能提问不要拼在同一条消息里,拆开发送。
## 复现步骤
1. 与 agent 完成一轮普通对话
2. 编辑最后一条用户消息,在 QA 用例模板(含「只回复这6个字:模型连通成功」字样)末尾追加一个真实问题后重发
3. 使用 glm-5.3-flash:大概率只收到六个字的回复,追加的问题被忽略;重发同一消息可能又正常回答,行为不一致
## 预期
追加的真实问题应得到回答;格式约束在存在真实问题时不应吞掉回答内容。行为应在多次重发间保持一致。
Contributor guide
Research direction
Start in the maker-core system-prompt assembly layer and reproduce the edit-and-resend flow with z-ai/glm-5.3-flash using the conflicting QA instruction and appended @ question. Review the session JSONL evidence to confirm the full message reaches the model. Done means the appended question is answered consistently across repeated resends, without changing the session or branch history behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- ai
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100