Agent 开发需要多少规格说明?O'Reilly 的观点
Stack Overflow 博客发布了对 O'Reilly 的访谈,探讨了 Agent 开发中规格说明(spec)的合适量。核心观点是:当代码变得便宜时,困难的部分变成了定义"正确"是什么意思,以及建立可靠的检查方式。在 Agent 开发中,详细的规格说明不是旧时代的负担,而是确保 Agent 正确行为的关键。
背景:代码变便宜了
随着 AI 编程工具的普及,生成代码的成本大幅降低。以前需要开发者花费数小时编写的代码,现在 AI 可以在几分钟内生成。这带来了一个根本性的变化:
代码不再是瓶颈,定义"正确"才是瓶颈。
在传统的软件开发中,开发者需要花大量时间编写代码,规格说明可能相对简略。但在 AI 辅助开发的时代,代码生成变得容易,真正的挑战变成了:
- 如何明确地描述需求?
- 如何验证 AI 生成的代码是否正确?
- 如何确保 Agent 的行为符合预期?
- 如何建立可靠的测试和验证机制?
常见误区:规格说明是旧时代的负担
在 Agent 开发社区中,有一种常见的观点:
"详细的规格说明是旧时代的 overhead。给模型一个粗略的目标,让它自己探索和发现就好。"
这种观点有一定的道理——过度详细的规格说明可能限制 Agent 的创造力,增加维护成本。但 O'Reilly 的访谈指出,这种观点如果走向极端,会导致严重的问题:
1. 行为不可预测
没有清晰的规格说明,Agent 的行为就不可预测:
- 不同的运行可能产生不同的结果
- 边缘案例的处理方式不确定
- 错误的表现形式不可预期
- 难以调试和复现问题
2. 验证困难
没有规格说明,就无法判断 Agent 的行为是否正确:
- 什么是"正确"的输出?
- 如何衡量 Agent 的性能?
- 如何检测回归(regression)?
- 如何知道改进是否真的改进了?
3. 迭代无方向
没有规格说明,Agent 的改进就没有方向:
- 应该优化哪些方面?
- 如何评估变更的影响?
- 优先级如何确定?
- 什么时候算"足够好"?
4. 团队协作困难
没有规格说明,团队协作就变得困难:
- 不同成员对"正确"的理解不同
- 代码审查缺乏标准
- 知识传递困难
- 新人上手慢
合适的规格说明量
那么,Agent 开发到底需要多少规格说明?O'Reilly 的观点是:不是越多越好,也不是越少越好,而是要找到合适的平衡点。
规格说明的层次
可以将规格说明分为几个层次,每个层次有不同的详细程度:
第一层:目标和约束(必须有)
这是最基本的规格说明,定义 Agent 的目标和约束:
- 目标:Agent 要完成什么任务?
- 输入输出:Agent 接收什么输入?产生什么输出?
- 约束条件:有哪些硬性约束(时间、成本、安全、合规)?
- 成功标准:如何判断 Agent 是否成功完成了任务?
- 失败模式:Agent 可能以哪些方式失败?失败时应该如何处理?
这个层次的规格说明是必须的,没有它 Agent 就没有明确的方向。
第二层:行为规范(强烈建议)
这个层次定义 Agent 在各种情况下的行为方式:
- 正常流程:典型情况下的处理步骤
- 边缘案例:非典型输入或情况的处理方式
- 错误处理:各种错误情况下的响应策略
- 交互规范:与用户或其他系统的交互方式
- 优先级规则:多个目标冲突时的优先级
- 超时和重试:长时间运行或失败时的处理策略
这个层次的规格说明对于确保 Agent 行为的一致性和可预测性非常重要。
第三层:实现细节(按需)
这个层次涉及具体的实现细节:
- 算法选择:使用什么算法或方法
- 数据结构:使用什么数据结构
- 工具调用顺序:调用工具的具体顺序
- 提示词模板:具体的提示词内容
- 模型参数:温度、top-p 等模型参数
这个层次的规格说明应该按需提供。对于需要精确控制的部分,可以详细说明;对于 Agent 可以自主决策的部分,可以留给 Agent 自己决定。
规格说明的形式
规格说明不一定是冗长的文档。可以采用多种形式:
- 自然语言描述:简洁的需求描述
- 示例:输入输出示例(few-shot examples)
- 测试用例:可执行的测试用例,既是规格说明又是验证手段
- 状态机:定义 Agent 的状态和转换
- 流程图:可视化的处理流程
- 约束清单:必须满足的约束条件列表
- 评估指标:量化的性能指标和目标
最好的规格说明往往是多种形式的组合。
规格说明与 Agent 自主性的平衡
关键问题是:规格说明和 Agent 自主性之间如何平衡?
过度规格说明的问题
如果规格说明过于详细,可能会:
- 限制创造力:Agent 无法探索更好的解决方案
- 增加维护成本:规格说明本身需要维护,变更成本高
- 降低适应性:Agent 无法灵活应对未预料到的情况
- 扼杀涌现:无法利用 Agent 的涌现能力
- 本末倒置:花在写规格说明上的时间超过了节省的时间
规格说明不足的问题
如果规格说明不足,可能会:
- 行为不可预测:Agent 的行为不一致,难以信任
- 验证困难:无法判断 Agent 是否正确工作
- 调试困难:问题难以复现和定位
- 迭代无方向:改进缺乏明确的目标和衡量标准
- 安全风险:Agent 可能做出不安全或不合规的行为
找到平衡点
找到平衡点的方法是:
- 明确什么必须控制:安全、合规、核心业务逻辑必须精确控制
- 明确什么可以放手:实现细节、优化方法、探索路径可以放手给 Agent
- 使用测试作为规格:可执行的测试用例既是规格说明又是验证手段,比自然语言描述更精确
- 渐进式细化:从粗略的规格开始,在发现问题时逐步细化
- 定期回顾:定期回顾规格说明,移除不必要的细节,补充缺失的部分
规格说明驱动的 Agent 开发流程
基于合适的规格说明,可以建立以下开发流程:
1. 定义目标和约束
首先明确 Agent 的目标和约束:
- 要解决什么问题?
- 有哪些硬性约束?
- 成功的标准是什么?
- 可能的失败模式有哪些?
2. 编写测试用例
在实现 Agent 之前,先编写测试用例:
- 正常情况的测试
- 边缘案例的测试
- 错误处理的测试
- 性能和安全的测试
测试用例既是规格说明,又是验证手段。
3. 实现 Agent
基于规格说明和测试用例,实现 Agent:
- 使用 AI 辅助生成代码
- 让 Agent 在测试用例上运行
- 根据测试结果调整 Agent
4. 验证和迭代
持续验证和迭代:
- 运行测试用例,确保所有测试通过
- 监控 Agent 在生产环境中的行为
- 发现问题时,先补充测试用例,再修复问题
- 定期回顾和更新规格说明
5. 持续改进
随着对问题理解的深入,持续改进:
- 细化规格说明中模糊的部分
- 添加新的测试用例
- 优化 Agent 的性能和可靠性
- 扩展 Agent 的能力范围
总结
O'Reilly 关于 Agent 开发中规格说明的观点,可以总结为以下几点:
- 代码变便宜了,定义"正确"变难了:AI 让代码生成变得容易,但明确需求和验证正确性变得更加重要
- 规格说明不是旧时代的负担:在 Agent 开发中,合适的规格说明是确保 Agent 正确行为的关键
- 不是越多越好,也不是越少越好:需要在规格说明和 Agent 自主性之间找到平衡
- 测试是最好的规格说明:可执行的测试用例既是规格说明又是验证手段,比自然语言描述更精确
- 渐进式细化:从粗略的规格开始,在实践中逐步细化,避免过度设计
- 明确什么必须控制,什么可以放手:安全、合规、核心逻辑必须控制,实现细节可以放手
对于正在构建 AI Agent 的团队来说,这个观点提供了有价值的参考。在 AI 让代码变得便宜的时代,规格说明和验证机制的价值反而上升了。好的规格说明不是限制 Agent 的创造力,而是为 Agent 的创造力提供明确的方向和可靠的保障。
正如 O'Reilly 所说:当代码变得便宜时,困难的部分是决定"正确"是什么意思,以及建立可靠的方式来检查它。 这正是规格说明的价值所在。
原文链接:https://stackoverflow.blog/2026/08/21/dispatches-from-o-reilly-the-right-amount-of-spec-for-agentic-development/