https://github.com/humanlayer/12-factor-agents/tree/main
核心:将用户的自然语言请求转换为结构化的工具调用。
例子:用户说“给Terri创建一个750美元的付款链接,用于2月AI聚会赞助”,转换为:
json展开代码{
"function": "create_payment_link",
"parameters": {
"amount": 750,
"customer": "cust_xxx",
"memo": "..."
}
}
然后由确定性代码执行。这是代理的基础能力。
核心:不要依赖框架的黑盒提示词,要自己编写和控制。
原因:
做法:把提示词当作代码来管理,可以测试、迭代、版本控制。就像写函数一样写提示词。
核心:自定义如何组织和传递上下文给LLM,不一定要用标准的消息格式。
要点:
例子:可以用XML标签组织上下文,而不是标准的role/content格式,让模型更容易理解。
核心:工具调用本质就是LLM输出的结构化JSON,不需要复杂抽象。
理解:
好处:简单直接,易于理解和调试。
核心:不要过度分离“执行状态”(当前步骤、重试次数等)和“业务状态”(历史记录、工具调用等),尽量统一。
做法:
好处:
核心:让代理像普通程序一样,可以通过简单API启动、暂停、恢复。
能力:
重要性:支持异步操作和人工审核,让代理更可靠。
核心:将人类交互也作为工具调用,统一处理。
做法:
request_human_input这样的工具好处:
核心:自定义控制流程,支持中断、恢复、错误处理等。
能力:
例子:
request_clarification → 中断,等待人类响应fetch_git_tags → 继续循环deploy_backend → 中断,等待人工批准核心:当工具调用失败时,将错误信息放入上下文,让LLM尝试自我修复。
做法:
python展开代码try:
result = await handle_next_step(thread, next_step)
except Exception as e:
thread.events.append({
"type": "error",
"data": format_error(e)
})
# 继续循环,让LLM看到错误并重试
注意:需要限制重试次数,避免无限循环。连续失败后应升级给人类处理。
核心:不要构建大而全的代理,要构建小而专注的代理。
原因:
策略:
核心:支持多渠道触发和响应(Slack、邮件、SMS等)。
能力:
好处:
核心:用函数式编程思想,将代理设计为无状态的归约器(reducer)。
理解:
(state, event) => newState好处:
这12个准则的核心思想:


本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!