12-factor-agents
一套构建生产级 AI Agent 的 12 条工程原则,助你从框架依赖走向工程基本功
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
一套构建生产级 AI Agent 的 12 条工程原则,助你从框架依赖走向工程基本功
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
**想象这样一个场景:**你花了两周时间,用 LangChain 搭建了一个看似完美的 AI Agent。测试时一切正常,一上线却发现:上下文窗口爆了、工具调用随机失败、用户中断后状态全丢。更糟糕的是,你根本不知道哪里出了问题——框架替你封装了太多细节,反而成了调试的黑箱。
这正是 12-Factor Agents 项目想要解决的痛点。
作者 Dex(GitHub @nateb2024,活跃于 YC 生态)在 AI 工程领域深耕多年,试用过 LangChain、CrewAI、SmolAgents、Griptape 等几乎所有主流 Agent 框架,也与大量 YC 创业者在生产环境中真实部署 AI 的经验进行了深入交流。
他发现一个反直觉的结论:真正在生产环境中表现良好的 AI 产品,往往不是那些「标榜 Agent 化」的应用,而更多是「在关键节点巧妙嵌入 LLM 能力」的确定性系统。 换句话说,最成功的 AI Agent,其实更像「有 LLM 加持的自动化脚本」,而非「自主决策的智能体」。
受 12-Factor App 方法论的启发,Dex 提炼出了 12 条构建可靠 AI Agent 应用的核心原则,旨在帮助开发者从框架依赖中解放出来,写出真正经得起生产环境考验的代码。

Agent 的本质能力之一,是将用户的自然语言意图,翻译成对工具的结构化调用。简单一句话「给 Terri 创建一个 750 美元的支付链接」,背后对应的是 Stripe API 的结构化参数。好的 Agent 应该让这个翻译过程透明、可控、可测试,而不是依赖 LLM「自行决定」。

Prompt 不是一次性写死的静态字符串,而是需要版本化管理、可复现、可测试的代码资产。Factor 2 倡导将 Prompt 视为一等公民,像管理代码一样管理它们:版本控制、自动化测试、A/B 对比一个都不能少。

这是整个体系最核心的原则之一。LLM 是无状态的数学函数——给同样的输入,永远得到同样的输出。好的上下文工程,就是为 LLM 提供最好的输入,从而得到最好的输出。上下文窗口不是越大越好,精打细算地使用 token,预取必要信息、压缩冗余内容,是生产级 Agent 的必备技能。

传统的工具调用范式是「告诉 Agent 你有哪些工具」,而 Factor 4 倡导一种更优雅的模式:让工具本身成为结构化输出的载体。这意味着工具的定义、执行和结果处理都遵循统一的 schema,减少 Agent 解析成本,提高可靠性。

生产环境中的 Agent 需要应对复杂的中间状态:部分完成的任务、等待用户确认的步骤、跨会话的上下文延续。Factor 5 建议用统一的状态模型管理所有执行状态,而非散落在代码各处的全局变量和副作用。

用户的请求可能随时被中断,网络可能随时断开。Factor 6 强调:Agent 必须具备幂等的暂停/恢复能力。API 设计要足够简单,任何时候重启都能从上一个稳定状态继续,而不是从头开始。

Agent 不应该是封闭的自动化系统。Factor 7 建议在关键节点引入人工介入机制:通过 Webhook、邮件、通知等工具,让人类在需要时介入审批、纠错或补充信息,真正实现人机协同。
不要把控制流完全交给 LLM。Factor 8 主张:控制流的决策由代码做出,LLM 只负责需要「智能」判断的节点。确定性逻辑用代码,不确定性逻辑用 LLM,分工明确才能写出可维护的系统。

当 Agent 遇到错误时,错误信息需要经过「面向 Agent 重写」——将原始的错误堆栈转化为 Agent 能理解的简短描述。原始堆栈可能包含 500 行,而 Agent 只需要知道「Stripe 支付链接创建失败,原因是余额不足」这一句话。

不要试图构建一个「全能型」Agent。Factor 10 建议将 Agent 的职责范围尽可能缩小,每个 Agent 只做一件事。多个小 Agent 通过 DAG 协作,比一个大一统 Agent 的效果和可靠性都要好得多。

Agent 的触发源不应该是唯一的。Factor 11 倡导多源触发架构:支持 Webhook、API、定时任务、用户手动触发等多种启动方式,解除触发器的耦合,让 Agent 真正成为灵活可组合的服务。

这是最具数学美感的一条原则。Factor 12 将 Agent 的执行过程类比为 函数式编程中的 fold/reduce 操作:给定当前状态和一条新消息,输出新的状态。这使得 Agent 的行为完全可预测、可回放、可测试——就像 Redux 的状态管理模式一样,只不过应用到 AI Agent 领域。

从代码仓库结构来看,项目分为几个主要部分:
content/:12 条原则的详细文档,每条原则独立 Markdown 文件,图文并茂packages/walkthroughgen/:用于生成交互式引导的工具,基于 TypeScript + Jest 测试框架packages/create-12-factor-agent/:脚手架生成工具,帮助快速初始化符合原则的 Agent 项目workshops/:实践工作坊材料,包含从 Hello World 到完整 API 端点的渐进式教程整个项目以 TypeScript 为主要开发语言,文档使用 CC BY-SA 4.0 许可证,内容可自由引用和改编。
对于 AI 爱好者而言,直接阅读 content/ 目录下的 12 个 Markdown 文件即可,不需要任何技术基础。这份文档的设计初衷就是让不同背景的读者都能理解:代码示例是 TypeScript,但核心思想用自然语言解释得非常清晰。
对于 AI 开发者,可以 clone 仓库后,通过工作坊材料(workshops/)进行动手实践,体验每条原则在真实代码中的落地方式。如果你想基于这些原则构建自己的 Agent 项目,可以使用脚手架快速启动。
必须坦诚地说,这套原则并不是银弹。首先,它强烈建议脱离框架,这对新手开发者来说门槛较高——没有框架的约束,意味着需要有更丰富的工程经验才能写出可靠的代码。其次,这些原则目前主要基于作者的个人经验和观察,缺乏大规模实证数据支撑。行业对这些原则的接受度也在持续讨论中,并非所有人都认同「Agent 应该尽可能简单」这一核心理念。
此外,作为纯文档/知识库项目,它本身没有提供开箱即用的代码库或 SDK,需要开发者自己阅读理解后二次开发。
12-Factor Agents 的出现,折射出 AI 工程领域正在经历一场范式转变:从「追逐最新框架」到「回归工程基本功」。随着 Claude API、GPT-4 等基础模型能力越来越强,真正的竞争壁垒不再是「用了哪个 Agent 框架」,而是如何将 LLM 能力与真实业务场景深度结合。
这条原则体系的价值,不在于它是否绝对正确,而在于它提供了一套共同语言:让不同背景的开发者可以用同一套框架来讨论和评估 AI 系统的可靠性。从这个意义上说,它与 12-Factor App 对现代 Web 开发的深远影响,有着相似的潜力。