编程与软件开发

如何在长期项目中保持编程代理的可靠性

Stack Overflow Blog 提出了一套实用框架,通过运行规则、可更新的记忆与上下文,以及多视角审查,减少编程代理的质量衰退。该指南强调,代理的可靠性既取决于模型本身,也取决于围绕模型构建的架构。

2026-10-07
2 分钟阅读
398 浏览量
certi.news Editorial Team
如何在长期项目中保持编程代理的可靠性

编程代理的质量下降,往往不是因为模型的能力变弱,而是因为项目缺少明确的运行系统,来规范代理读取什么、执行什么,以及如何审查其变更。随着工作持续数周并累积数千次修改,如果不强制要求这些步骤,代理可能会反复发现相同文件、与先前的决定相矛盾、猜测测试命令,或停止编写测试。

在《在生产环境中运行 LLM 系统》系列的第六部分中,Stack Overflow Blog 建议围绕模型构建一层组织架构,包括简明的项目章程、自主权限边界、多层级上下文、持久记忆、审查委员会,以及每次修改后运行的钩子。当多个代理在同一代码仓库上运行时,还应加入文件所有权图、提示词日志和共享决策记录。

问题在于运行带,而不只是模型本身

文章将代理定义为:模型加上指令、工具、上下文策略、钩子、隔离机制、子代理和监控机制。文章引用了 Terminal-Bench 2.0 基准的一项普遍性结果:LangChain 仅通过改变运行带,就将一个代理从前 30 名之外提升到前 5 名,得分从 52.8% 提升至 66.5%,增加了 13.7 个百分点,而模型本身保持不变。

Advertisement

实际意义在于,不完整的工具、模糊的规则或拥挤的上下文,可能是最容易解决的失败原因。与模型不同,开发团队可以调整这一层,并使其适配自己的代码仓库。

一个受约束的单代理的六个要素

  • 项目章程:使用 CLAUDE.md 或 AGENTS.md 之类的文件规定工作流程:规划、记录、实施、测试、审查,然后提交。文件还应包含质量标准和供应商软件包的使用边界,并且应保持简短,因为每次会话都会读取它。
  • 自主权限边界:允许代理执行可逆操作,例如读取、编辑、测试和创建提交;而推送、部署和应用基础设施变更则需要批准。还必须核验命令匹配的语义,以免 npm:* 之类的宽泛规则意外允许部署。
  • 多层级上下文:根目录的 CONTEXT.md 包含项目结构图及其运行和测试方式,而每个模块的文件则说明该模块的职责、文件和依赖关系。DECISIONS.md 记录决策、决策原因以及被拒绝的替代方案。过时的上下文属于错误,应在同一次变更中修复。
  • 持久记忆:文章建议为每条事实分别建立记忆文件,配备简明索引,并使用 graph.jsonl 文件,通过“依赖于”或“替代”等关系连接模块与决策。
  • 多视角审查委员会:由子代理从产品、工程、基础设施、安全和测试等角度审查变更。只有高置信度的阻碍或严重问题才会阻止变更。
  • 修改后钩子:PostToolUse 会在每次 Edit、Write 或 MultiEdit 后运行,并输出一份清单,提醒在同一次变更中更新上下文、记忆和决策记录,而不是悄无声息地重写文件。

运行代理集群时

当多个代理在同一代码仓库上工作时,会出现新的问题:修改相同文件,或撤销其他代理的决定。文章不建议依赖代理之间的直接对话,而是依赖可审计的书面共享状态,包括路径所有权图、CLAIM 和 RELEASE 记录、进度日志,以及每项任务的独立分支,并由人工进行合并。

这些声明并不是真正的锁;两个代理可能同时读取相同状态,并在同一时间声明同一路径。当需要真正隔离时,文章建议采用原子机制,例如使用唯一名称的 Git 分支,或在协调存储中进行条件写入。

为什么这种方法很重要?

这里真正的变化,是将重点从代理编写函数的能力,转移到周围系统能否让代理长期保持有方向性并可供审查。决策记录不仅具有记录作用,还具有契约作用:不修改旧决策,而是添加新的决策来替代它们,并说明原因和被拒绝的替代方案。这样,设计历史始终可见,并且可以与自动化检查关联起来,例如禁止特定导入。

这种方法仍然是组织性指导,而不是对输出正确性的保证。文章还承认,当冲突同时发生时,基于文件的声明只是建议性的;在合并、推送和部署环节,人工审查仍然是控制点。文章的结论是:限制模型并构建可审计的痕迹,可能比等待更智能的模型,对长期工作的可靠性产生更大的影响。

新闻来源
Stack Overflow Blog
查看原始来源 ↗
c
作者

certi.news Editorial Team

你需要知道的

编程代理在长期项目中的可靠性并不只取决于模型本身,还取决于一套规定上下文、权限、记忆和审查的运行系统。文章建议采用项目宪章、可更新的决策记录和记忆、多视角审查,以及修改后的钩子,同时将合并、推送和部署置于人工监督之下。

  • 代理质量下降可能源于缺乏明确的运行规则、上下文拥挤或工具不足,而不一定是模型能力弱。
  • 项目宪章应规定工作流程、质量标准和软件包使用边界,并保持简短,以便在每次会话中读取。
  • 使用 CONTEXT.md、DECISIONS.md、记忆文件和 graph.jsonl 索引等文件,有助于保存项目地图、决策以及模块之间的关系。
  • 文章建议从产品、工程、基础设施、安全和测试等角度审查变更;如果存在阻碍或高置信度的严重问题,则应禁止变更。
  • 运行多个代理时,应使用所有权地图、CLAIM 和 RELEASE 记录以及独立分支;但发生冲突时,原子隔离和人工合并仍然不可或缺。
  • 这种方法属于组织性和指导性方案,并不保证输出正确;在合并、推送和部署环节,人工审查仍是控制点。

常见问题

什么是编程代理的运行护栏?

它是围绕模型的一组指令、工具、上下文策略、钩子、隔离机制、子代理和监控机制。

哪些操作应要求人工批准?

文章建议对推送、部署和应用基础设施变更要求批准;对于读取、编辑、测试和创建提交等可逆操作,则可以允许执行。

为什么使用 CONTEXT.md 和 DECISIONS.md 文件?

CONTEXT.md 说明项目地图以及运行和测试方式,而 DECISIONS.md 记录决策、决策原因和被否决的替代方案。

仅靠提示或所有权记录能否防止代理冲突?

不能;文章指出,在并发读写时它们具有咨询性质,因此可能需要原子隔离,例如唯一的 Git 分支,或在协调存储中进行条件写入。

同一分类

你可能还喜欢

查看所有新闻