问题描述

在做一个自动化代码审查的Agent,流程是:读取diff → 分析改动 → 调用多个工具收集上下文 → 生成审查意见。

实际跑到第5、6步之后,模型开始忽略system prompt里定好的输出格式约束,返回纯文本而不是约定的JSON,多轮之后越来越明显。

运行环境

  • Python 3.11 / langchain 0.2.x
  • 模型:gpt-4o(deepseek-chat 复现了同样现象)

关键代码

SYSTEM_PROMPT = """ 你是一个代码审查助手。 【重要】所有输出必须是合法 JSON:{"risk": [...], "suggestion": [...]} """ for step in workflow_steps: result = agent.invoke( {"messages": state["messages"] + [step.to_message()]} ) state["messages"].append(result) # 上下文随步骤线性增长

期望结果

经过10+轮工具调用后,模型仍稳定遵守JSON输出约束。

已尝试

  1. 关键指令在每轮user message里重复 —— 有效,但token消耗接近翻倍
  2. 定期摘要压缩历史上下文 —— 摘要时容易把格式约束一起压掉
  3. 换长上下文模型 —— 成本接受不了

想听听大家在工程实践里是怎么处理长任务下的指令遵循问题的?有没有比"暴力重贴prompt"更优雅的方案?