从我的Python项目的第一次提交开始,有一条规则比任何其他规则都重要:编码智能体绝不能看到验收标准。因此我构建了两个互不交换信息的智能体。一个根据完整规格说明编写测试,另一个则根据同一份规格说明,但去掉了验收标准,编写代码。在大多数编码环境中,同一个智能体同时编写两者,这会损害测试结果的有效性。
我通过上下文组装强制在代码层面完成这种剥离。上下文组装是构建编码智能体提示词的步骤,任务文件中的验收标准部分会在提示词构建之前被移除。有一段时间,我认为这种剥离是万无一失的。后来我发现,一行注释就能破坏它:剥离在那一行停止,之后的每一条标准都会传给编码智能体。一周后,一条换行到第二行的标准也造成了同样的问题。两个漏洞都是我自己的错误。这一次,修复之后我添加了测试,确保今后任何构建在剥离未按预期执行时都会失败。
Skill和MCP服务器常被相互比较,但对于我的项目所依赖的这条规则而言,答案是两者都不是。我希望用户能够从Claude Code或Cursor等AI助手中调用我的命令行工具qikly。这样一来就涉及两个LLM,而两者都不应看到验收标准。助手本来就能运行qikly,但它不知道何时使用它,因此我编写了一个Skill:这是一个包含Markdown说明的文件夹,当用户请求与其描述匹配时,助手会加载它。
编写Skill使两项工作分开。Skill的作用是提供建议,说明哪些内容应归入需求,哪些应归入验收标准。这种建议只能通过教导来传达,无法保证。上下文组装的作用则是每次都剥离验收标准,无论是否安装了Skill。这些建议仍然重要,因为如果某条标准同时写入了需求,它仍会传给编码智能体,因此我增加了一项检查:qikly --validate会对此类重复内容发出警告。
常见问题
问:为什么不依靠更好的模型或将温度设为零来防止LLM看到标准?
答:更好的模型更常遵循建议,但并非总是如此;将温度设为零只会让回答更可重复,而不会更听话。必须始终成立的规则应当由代码强制执行,例如上下文组装;而基于判断的指导则可以放在Skill中。
来源: Towards Data Science · 由HeadlinesBriefing整理摘要