xDocxDoc
AI
前端
后端
iOS
Android
Flutter
AI
前端
后端
iOS
Android
Flutter
  • 驯服AI智能体:规范驱动与实战指南

驯服AI智能体:规范驱动与实战指南

在AI技术飞速发展的今天,AI智能体(AI agents)能够以闪电速度生成代码,但往往缺乏构建高质量生产级代码所需的内存和判断力。这种矛盾催生了对规范(specifications)的新需求——不是瀑布时代繁重的需求文档,而是基于Markdown的轻量级规范,旨在管理AI智能体的行为。本文基于一场专家讨论(参与者包括Tessl CEO Guy Podjarny、Anchore前DevRel总监Alan Pope和GitHub首席研究员Don Syme),深入探讨规范驱动开发(Spec Driven Development, SDD)的核心问题,从理论到实践,提供详尽的解析。文章将涵盖意图与实现的差距、验证挑战、历史类比、规范设计原则、规范谱系、灵活性权衡、团队协作、测试策略、智能体自治级别以及行业过渡挑战,并通过案例辅助说明,旨在为开发者提供可操作的见解。

引言:AI智能体开发的现状与挑战

AI原生开发(AI-Native Development)正成为软件工程的新范式。智能体如大型语言模型(LLM)能够根据自然语言提示生成代码,大幅提升开发效率。然而,智能体往往表现出“健忘症”和不一致性:它们快速产出代码,却难以保持决策的连贯性,导致代码质量参差不齐。例如,一个智能体可能在一次构建中多次修复同一问题,但每次采用不同方法,造成混乱。这种问题源于智能体缺乏对意图(intent)的深层理解,以及实现(implementation)细节的随意性。

专家讨论指出,规范是桥接这一差距的关键。规范不再是静态文档,而是动态的、机器可读的指南,能够约束智能体的行为,确保输出符合预期。本文将从多个维度展开,首先探讨意图与实现之间的本质差距。

意图与实现:丢失了什么

在软件开发中,代码是意图的具象化表现,但意图本身往往在实现过程中流失。Guy Podjarny强调:“代码是意图的表示——它是一种选择。你要求构建一个电子商务网站,得到的是其实现之一,即多个可行决策中的一个。问题在于,一旦代码存在,这些决策背后的‘为什么’就蒸发掉了。” 这反映了软件工程的长期挑战:代码混合了意图和实现决策,而意图常转化为机构知识,存在于文档或开发者脑中,但文档易过时,人脑易遗忘。

Alan Pope分享了一个 relatable 场景:“我几个月或几年后回顾代码,需要调整时,完全忘记了编写时的所有选择。” 他的解决方案是使用Tessl等工具,将旧代码输入生成规范,既文档化已构建内容,又建议如何更好重建。这突出了规范的追溯价值——它不仅指导未来开发,还能修复历史债务。

理论上,意图与实现的差距源于信息熵:意图是高层次、抽象的概念,而实现是低层次、具体的代码。在AI时代,这一差距被放大,因为智能体缺乏人类的上下文理解。实践案例中,如一个团队使用智能体生成API,智能体可能选择RESTful设计,但未记录为何不选用GraphQL,导致后续维护困难。规范通过捕获意图(如“API应支持高效查询”),约束实现选择,减少歧义。

验证差距:从灵感规范到规范规范

智能体开发中,一个关键痛点是验证差距:你写下指令,LLM读取后产出完全不同的内容。缺失的不仅是准确性,更是系统化验证方法,确保创建物匹配意图。Guy Podjarny将规范分为“灵感规范”(inspirational specs)和“规范规范”(canonical specs)。灵感规范是初始请求和澄清,仍具模糊性;规范规范则通过验证层(如测试)变得权威。

例如,在原型开发中,开发者可能写下“构建用户登录功能”,智能体生成代码,但如果没有验证(如测试登录流程),就无法确认匹配意图。Guy建议引入多级验证:“需要引入验证级别,以知悉另一侧创建的内容是否匹配。” 这包括静态检查、动态测试和回归测试。一个案例是Tessl工具的工作流:先生成规范,构建产品,检查通过后生成测试,这些测试成为真相源,后续变更需通过测试验证。

验证差距的根源是智能体的非确定性(non-determinism)。与传统编译器不同,LLM输出可能随提示微调而变化。专家提到“稳定再生”(stable regeneration)概念——智能体能否一致产出相同结果?实践中,团队需平衡验证成本与收益:过度验证可能导致僵化,而不足验证引发错误。例如,金融系统需高验证级别,而内部工具可容忍一定模糊性。

编译器革命 revisited:历史视角下的AI过渡

Don Syme从历史角度类比当前AI变革:他回忆与子程序发明者Maurice Wilkes在剑桥的时光,“回想过去,编程是什么样?他们有机代码,然后编译器突然出现。人们说,‘我们不能信任它。机器代码才是现实。’” 这类似于今天对AI的怀疑。意图与现实之间的光谱一直存在,变化的是可行工作点:几十年来,代码是唯一层次;现在,我们发现在更高抽象层次工作,虽更模糊、更非确定,却能交付前所未有价值。

理论层面,这体现了抽象层次的演进。编译器将高级语言翻译为机器代码,隐藏底层细节;AI智能体进一步抽象,将自然语言转为代码。但AI引入的概率性挑战了传统确定性范式。案例中,Docker的FROM something:latest指令每次构建获取不同内容,虽令人沮丧,但保持系统更新。Don指出,行业将分化为两派:一派拥抱模糊性获得适应性,另一派坚持确定性用于内核或安全关键系统。

这一过渡要求开发者重新思考信任模型。在编译器时代,信任建立在语法和语义规则上;AI时代,信任需通过规范和多层验证建立。例如,GitHub Copilot已集成代码建议,但需规范约束其输出范围。

什么是好的规范?范围、生命周期与设计原则

规范的质量取决于其范围、生命周期和粒度。专家讨论围绕“规范应存活多久?”展开,答案依赖上下文。Alan Pope描述其演变:“最初设想一个巨大文本文档,但笨重;现在拥抱原子工作单元为规范。” 他将应用分解为微规范:前端一个,后端多个,每个代表成功检查点。“如果我能丢弃所有源代码,让Tessl从头再生整个应用,且它能工作——那才是双重成功。” 这体现了规范的模块化和可丢弃性。

Guy Podjarny区分用例:变更规范(如从状态A到B的规划)是短暂的,而长期指导规范(如产品意图、架构决策)应持久。理论原则包括:

  • 模块化:规范应分解为独立单元,便于维护和复用。
  • 可验证性:规范需关联测试,使其可执行。
  • 适应性:规范应允许进化,而非僵化。

实践案例:AWS Kiro的工作常引用实现计划规范,这些规范聚焦变更,完成后失效;而企业架构规范可能存活数年。Don Syme强调,无论场景,高级声明性指导、护栏和成功条件(存入仓库定义用途)总有助益,为智能体提供所需约束。

设计好规范需平衡详细度。过于详细近似写代码,失去抽象价值;过于模糊则缺乏指导力。例如,规范可能指定“API响应时间<100ms”,而不规定具体算法,留给智能体优化空间。

规范谱系:从规范辅助到规范中心

Guy Podjarny提出一个有用框架,描述规范承诺的深度:

  • 规范辅助开发(Spec-assisted development):基线层次,如Claude.md文件、光标规则或注册表的使用规范。这只是帮助——信息供智能体使用,可能是产品意图、API定义或公司政策。它是指导,非福音。
  • 规范驱动开发(Spec-driven development):更深承诺,定义部分功能,承诺保持良好捕获,变更时先修改规范,再应用代码变更。
  • 规范中心开发(Spec-centric development):未来状态,代码可丢弃,规范包含所有重要细节,有足够测试引用,可信任结果,然后可丢弃并创建其他语言。

专家一致认为,我们尚未达到规范中心,但规范辅助是桌赌注,规范驱动对许多用例日益可行。理论支持这一谱系:它反映了抽象层次的成熟度,类似从汇编到高级语言的演进。案例中,Tessl工具支持规范辅助模式,开发者逐步增加规范深度;而研究项目如GitHub的Codex探索规范中心愿景。

实践上,团队可从规范辅助起步,例如在IDE中集成规范提示,逐步过渡到驱动模式,其中规范成为代码变更的门控点。

指定什么,留什么灵活:规范粒度的艺术

规范内容的选择是微妙平衡。Guy Podjarny阐述关键原则:“有实现细节,我们用.impl标记表示低重要性位。应尝试保留它们以稳定,但不超越规范。” 例如,按钮颜色可红可绿,规范初始不关心,但一旦选择,应保持稳定。“我不希望每个版本变颜色。” 然而,如果后续规范更新明确按钮应绿色,则超越先前实现细节。

Guy还指出,有时数据结构如向量或数组可互换,无关紧要;但有时因数据集大小优化而重要。获取正确粒度是关键。Alan Pope采用极简主义:“我尽量保持规范技术细节轻量,仅足够胁迫智能体保持正轨。” 他放入框架选择和API端点,但避免过度指定。“我一般不查看规范。规范是大脑通过对话创建文本的中间步骤……只是原始文本,如意识流。”

理论层面,这涉及规范与自由的权衡。规范应捕获“什么”(what)而非“如何”(how),但边界模糊。案例:在微服务架构中,规范可能定义API契约,而实现细节如数据库选型可灵活。反例是过度指定导致智能体创新受限。

实践建议:使用标签(如.impl)区分核心与细节,并建立团队公约,确保一致性。

确定性与适应性的权衡

Don Syme框架核心张力:“在确定性和适应性之间存在直接权衡。你越希望代码行为确定,它越僵化,适应性越差。” 他以Docker的FROM something:latest为例,每次构建获取不同内容,虽烦恼但保持系统补丁和最新。“通常,它 annoy 人,不确定,某些人不容忍,转而固定版本。但然后他们得到僵化系统,常易受攻击或无法进步。”

这一权衡根植于软件工程本质。确定性带来可预测性,适用于安全关键系统;适应性支持快速迭代,适用于Web应用。观众问及幂等规范(idempotent specs)——问题显示我们对确定性的执着。但Don noted:“如果想100%幂等,这不是游戏。但行业许多案例中那不重要,你可交付巨大价值而无须它,模糊性真有用。”

行业将分叉:一些团队拥抱更松规范获得适应性;其他从事内核、安全关键系统和高确定性需求的团队坚持传统方法。“对于一半人当前工作,它不合适,”Don警告。“对另一半,它将是最好事物。” 关键是知悉你属于哪半。

案例:金融交易系统需确定性,规范必须精确;而内容管理系统可容忍模糊,规范可侧重业务逻辑。理论支持混合方法,如使用特性开关(feature toggles)平衡两者。

团队协作:标准化问题

团队协作规范挑战标准化。Don Syme承认:“关于团队如何实际协作,这是好问题。有时需要多视角如何规范。” Guy Podjarny直接解决:“想象团队中每人用不同语言编程。当然,它们编译相同,但我不认为那是快乐现实。我想让人能拾起并继续他人留下工作。”

解决方案非全局标准化,而是团队级公约。Guy比较法律合同:“好律师能读任何合同理解它,但生态系统有规范。例如,商业合同中你期望找到责任部分——所以拾起它直接跳至。” 类似,软件规范需公约:期望API定义在特定部分,以少数方式表达;期望版本元素。“现在,它是狂野西部,合法地,因一切在形成。但我想能协作,你需要一些标准元素。”

未解问题包括:在拉取请求中修改规范,同事建议变更时发生什么?立即再生代码?如何视代码为构建产物 versus 真相源?当软件可适应且可轻松以Rust或Python创建时,版本如何工作?

理论建议建立规范模板和评审流程。案例:某团队使用Markdown规范仓库,定义结构如“## API-Endpoints”,并工具自动验证合规。实践上,公约减少认知负荷,提升协作效率。

测试、信任和开发的未来

测试在规范驱动世界中角色关键。观众问:在迭代开发中,我们依赖回归测试。在规范驱动世界,如何确保测试稳定、添加并继续表达系统意图?Guy解释Tessl方法:“你从原型模式开始,故尚无测试。生成规范,捕获意图,构建它,检查产品。如果看起来好——然后生成测试。” 这些测试然后锁定为真相源。“当做出另一变更,新代码尚无测试。但你构建它,回归测试运行,如果失败,智能体再生代码直到所有测试通过。”

关键地:“只有人类用户应能说,‘是的,这回归测试是失败’。” 后来,另一观众问从规范生成测试 versus 从测试生成代码。Guy确认:“规范肯定是测试创建源,然后测试成为规范部分。它们将灵感规范转为规范规范。”

理论层面,测试作为验证层,使规范可执行。这 aligns with 行为驱动开发(BDD),其中规范即测试。案例:Cucumber等工具用Gherkin语言写规范,直接映射测试。在AI时代,测试生成自动化提升,但需人类监督以防误判。

未来,信任模型演变:从代码为中心到规范为中心,测试为桥梁。这要求更新开发流程,如将规范测试集成CI/CD。

智能体自治级别

Guy Podjarny引用其近期文章《AI智能体自治的5级:从自动驾驶车学习》,适配熟悉自动驾驶框架(0-5级)描述智能体能力阶段。今日,他认为我们仍处AI智能体自治低层,回归应失败并 surfaced 给人类。“我想象未来,当我们进入4级、5级自治水平,代理有足够信息处置,例如关于产品如何使用,业务上下文,它们被允许打破回归。就像,它们知悉应用如何使用。我认为这值得。不认为我们已到那。”

理论基于自治谱系:0级无自治,5级全自治。在AI开发中,这映射到智能体决策权。案例:当前工具如GitHub Copilot是1级(辅助),而研究型智能体可能达3级(条件自治)。实践上,团队应设定自治级别匹配风险容忍度。

例如,内部工具可允许更高级别自治,而客户面向系统需保留人类监督。这要求规范明确自治边界,如“智能体可自动修复非关键bug,但需人工审核安全变更”。

过渡挑战:行业分叉与适应策略

基于Don观点行业分叉,真实挑战是知悉哪些问题欢迎适应性,哪些需求精确性。行业已开始排序:一些领域受益于更松规范和更大灵活性;其他仍需绝对精度。“你不想Linux内核仅以规范驱动模式完成,”Don强调。“你想要绝对精度,所有这一切建于精确编程海洋上。”

但对于集成工作、业务应用、无数系统其中按钮颜色和实现细节不重要只要业务价值交付?规范驱动开发提供引人前进路径。痛点真实:智能体健忘症、实现不一致、验证差距。这些是驱动采用的问题。解决方案仍在浮现。

答案可能老如Maurice Wilkes的子程序:创建正确抽象,信任其下工具,工作在交付最大价值层次。理论支持渐进过渡:团队可从低风险项目试点规范驱动开发,逐步扩展。案例:某电商公司先用规范生成前端组件,验证后扩展至后端。

实践建议评估项目特征:需求稳定性、风险级别和团队技能,决定规范深度。混合方法可能最优,如核心模块用传统开发,外围用规范驱动。

总结

通过专家讨论和深度分析,规范驱动开发代表AI原生演进的關鍵一步。它不是取代代码,而是提升抽象层次,使智能体更可控和可预测。核心洞察包括:

  • 意图与实现差距需通过规范桥接,规范捕获“为什么”而不仅是“什么”。
  • 验证差距要求多层检查,从灵感规范到规范规范,测试作为真相源。
  • 历史类比显示AI过渡类似编译器革命,信任需通过工具和流程建立。
  • 规范设计应模块化、可验证和适应,平衡粒度以避免僵化或模糊。
  • 规范谱系从辅助到驱动再到中心,提供渐进采用路径。
  • 确定性与适应性权衡要求项目评估,分叉行业策略。
  • 团队协作依赖公约而非全局标准,减少认知负荷。
  • 测试与信任进化,人类监督保持关键角色。
  • 智能体自治级别框架帮助设定期望,指导规范深度。
  • 过渡挑战需谨慎规划,混合方法平衡风险与收益。

规范驱动开发仍处早期,但已展示潜力管理AI智能体。未来,随着工具成熟和规范标准化,它可能成为软件工程的主流范式。开发者应主动学习、实验和贡献,以抓住这一变革机遇。