技术深度分析报告

12-Factor Agents

构建可靠 LLM 应用的工程原则——
在 AI Agent 时代,重新定义「十二要素」。

github.com/humanlayer/12-factor-agents 方法论 非框架 Markdown 内容

HumanLayer 出品 · 致敬 12factor.net · AI Engineer World's Fair 演讲

← 返回汇总
项目速览

一句话定义

让 Agent 回归软件工程。

12
工程原则
0
运行时依赖
框架兼容
npx
脚手架

不是框架,是一套原则。任何语言、任何框架都可应用。

核心洞察

生产级 Agent 不是你想的那样

作者 Dex 试过所有 Agent 框架,访谈众多 YC 创始人后发现:大多数自称"AI Agent"的产品并不那么 agentic

使命

一个核心问题

用什么原则,才能构建出
真正敢交付给生产用户的 LLM 软件?

答案不是更聪明的模型,而是工程方法。即便 LLM 指数级变强,这些核心工程技巧仍让 LLM 软件更可靠、可扩展、易维护。

思想源头

致敬 12-Factor App

2011 年 Heroku 发布 12-Factor App,定义了云原生应用最佳实践,深刻影响了 Docker/Kubernetes 时代。

12-Factor App (2011)

云原生应用 → 配置分离、无状态、日志即事件流...

12-Factor Agents (2024+)

LLM 应用 → 上下文工程、状态统一、人是工具...

核心原则 · 上

十二要素(1-6)

FACTOR 1
自然语言 → 工具调用

Agent 的入口是把自然语言转化为结构化工具调用。

FACTOR 2
掌控你的 Prompts

不要让框架黑盒管理 prompt,自己写、自己调。

FACTOR 3
掌控上下文窗口

主动构建上下文,而非被动接收。Context Engineering。

FACTOR 4
工具即结构化输出

工具调用本质是结构化输出,统一对待。

FACTOR 5
统一执行态与业务态

Agent 执行状态与业务状态用同一套机制管理。

FACTOR 6
启动/暂停/恢复

用简单 API 实现可中断、可恢复的执行。

核心原则 · 下

十二要素(7-12)

FACTOR 7
用工具联系人类

Human-in-the-loop 也是一次工具调用,而非特殊机制。

FACTOR 8
掌控控制流

不要把流程逻辑交给 LLM 隐式决策,自己编排。

FACTOR 9
压缩错误进上下文

错误是上下文的一部分,要压缩后纳入而非丢弃。

FACTOR 10
小而专注的 Agent

单 Agent 单职责,避免塞所有逻辑。

FACTOR 11
随处触发

从任何渠道触发,在用户所在之处响应。

FACTOR 12
无状态 Reducer

把 Agent 做成 stateless reducer,状态外置可恢复。

批判对象

它反对什么

反模式问题
Prompt + 工具袋 + 无脑循环不可控、不可预测、难调试
框架黑盒管理 prompt无法精细调优,迁移成本高
把流程逻辑交给 LLM非确定性,每次跑不一样
单个巨型 Agent难扩展、难维护、难测试
状态内置于 Agent崩溃即丢失,无法水平扩展
Factor 3 深读

Own Your Context Window

上下文不是给出来的,是构建出来的。

Factor 12 深读

Make Your Agent a Stateless Reducer

借鉴 Redux 思想:Agent 是一个 (state, event) → state 的纯函数。状态外置存储,Agent 本身无状态。

好处

可水平扩展、崩溃可恢复、可重放调试、易测试。

代价

需把状态显式建模,不能依赖内存中的隐式状态。

为什么值得关注

方法论而非框架

不绑定技术栈

Python/TS/Go,LangGraph/自研栈都能用。

实战提炼

来自 HumanLayer 构建真实客户面 Agent 的踩坑总结。

填补空白

Agent 工程化尚无成熟标准,这是早期权威参考。

可操作

每条原则有具体实践,create-12-factor-agent 脚手架。

理性看待

需要警惕

潜力评估

未来空间

AI Agent 工程化方法论的开源定义者。若社区采纳,将成为构建生产级 Agent 的参考标准——类似 12-Factor App 之于云原生。即便具体原则演进,其"用工程方法驯服 LLM 不确定性"的核心思想长期有效。对任何严肃做 Agent 的人,这是必读。


上一个
LiteLLM
下一个
ADR-Tools
1 / 13