<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>12-Factor Agents - 构建可靠LLM应用的设计原则</title>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<style>
:root {
--primary: #1565c0;
--primary-light: #e3f2fd;
--secondary: #5c6bc0;
--accent: #03a9f4;
--text-primary: #263238;
--text-secondary: #455a64;
--background: #f5f7fa;
--card-bg: #ffffff;
--shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
--shadow-hover: 0 8px 15px rgba(0, 0, 0, 0.2);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Noto Sans SC', sans-serif;
background-color: var(--background);
color: var(--text-primary);
line-height: 1.6;
}
.poster-container {
width: 720px;
min-height: 960px;
margin: 0 auto;
padding: 40px 20px;
background: linear-gradient(135deg, #f5f7fa 0%, #e4ecf7 100%);
position: relative;
overflow: hidden;
}
.poster-container::before {
content: "";
position: absolute;
top: -150px;
right: -150px;
width: 400px;
height: 400px;
border-radius: 50%;
background: linear-gradient(135deg, rgba(21, 101, 192, 0.1) 0%, rgba(3, 169, 244, 0.1) 100%);
z-index: 0;
}
.poster-container::after {
content: "";
position: absolute;
bottom: -100px;
left: -100px;
width: 300px;
height: 300px;
border-radius: 50%;
background: linear-gradient(135deg, rgba(92, 107, 192, 0.1) 0%, rgba(3, 169, 244, 0.1) 100%);
z-index: 0;
}
.header {
text-align: center;
margin-bottom: 30px;
position: relative;
z-index: 1;
}
.title {
font-size: 42px;
font-weight: 700;
color: var(--primary);
margin-bottom: 10px;
letter-spacing: -0.5px;
}
.subtitle {
font-size: 18px;
color: var(--text-secondary);
max-width: 600px;
margin: 0 auto;
}
.intro {
background-color: var(--card-bg);
border-radius: 12px;
padding: 20px;
margin-bottom: 30px;
box-shadow: var(--shadow);
position: relative;
z-index: 1;
}
.intro p {
font-size: 16px;
color: var(--text-secondary);
margin-bottom: 0;
}
.principles-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20px;
margin-bottom: 30px;
position: relative;
z-index: 1;
}
.principle-card {
background-color: var(--card-bg);
border-radius: 12px;
padding: 20px;
box-shadow: var(--shadow);
transition: transform 0.3s ease, box-shadow 0.3s ease;
display: flex;
align-items: flex-start;
}
.principle-card:hover {
transform: translateY(-5px);
box-shadow: var(--shadow-hover);
}
.principle-number {
font-size: 24px;
font-weight: 700;
color: var(--primary);
margin-right: 15px;
min-width: 30px;
text-align: center;
}
.principle-content {
flex: 1;
}
.principle-title {
font-size: 18px;
font-weight: 700;
color: var(--primary);
margin-bottom: 8px;
}
.principle-desc {
font-size: 14px;
color: var(--text-secondary);
margin-bottom: 0;
}
.footer {
background-color: var(--card-bg);
border-radius: 12px;
padding: 20px;
box-shadow: var(--shadow);
text-align: center;
position: relative;
z-index: 1;
}
.footer p {
font-size: 16px;
color: var(--text-secondary);
margin-bottom: 0;
}
.accent-text {
color: var(--accent);
font-weight: 500;
}
.icon-container {
display: flex;
justify-content: center;
margin-bottom: 20px;
}
.icon-circle {
width: 80px;
height: 80px;
border-radius: 50%;
background-color: var(--primary-light);
display: flex;
justify-content: center;
align-items: center;
margin: 0 10px;
}
.material-icons {
font-size: 40px;
color: var(--primary);
}
</style>
</head>
<body>
<div class="poster-container">
<div class="header">
<h1 class="title">12-Factor Agents</h1>
<p class="subtitle">构建可靠LLM应用的设计原则</p>
</div>
<div class="intro">
<p>12-Factor Agents是一套<span class="accent-text">方法论</span>,就像软件开发领域的"12-Factor App"原则一样,它把传统软件工程里经过验证的最佳实践,创造性地用到了大模型驱动的Agent开发里。其核心目标是弥补Agent从原型开发到生产级应用的鸿沟,让Agent在<span class="accent-text">可靠性、可伸缩性、可维护性、可调试性和安全性</span>上,达到企业级应用的标准。</p>
</div>
<div class="icon-container">
<div class="icon-circle">
<i class="material-icons">psychology</i>
</div>
<div class="icon-circle">
<i class="material-icons">settings</i>
</div>
<div class="icon-circle">
<i class="material-icons">integration_instructions</i>
</div>
</div>
<div class="principles-grid">
<div class="principle-card">
<div class="principle-number">1</div>
<div class="principle-content">
<h3 class="principle-title">自然语言到工具调用</h3>
<p class="principle-desc">将用户自然语言指令结构化转换为API调用,利用LLM的意图识别能力</p>
</div>
</div>
<div class="principle-card">
<div class="principle-number">2</div>
<div class="principle-content">
<h3 class="principle-title">掌控你的提示词</h3>
<p class="principle-desc">开发者应完全控制LLM的提示词,提示词应像代码一样被设计、版本控制和测试</p>
</div>
</div>
<div class="principle-card">
<div class="principle-number">3</div>
<div class="principle-content">
<h3 class="principle-title">掌控你的上下文窗口</h3>
<p class="principle-desc">主动管理和构建传递给LLM的上下文信息,包含LLM决策所需的一切信息</p>
</div>
</div>
<div class="principle-card">
<div class="principle-number">4</div>
<div class="principle-content">
<h3 class="principle-title">工具只是结构化输出</h3>
<p class="principle-desc">Agent中工具调用的本质是LLM生成的结构化数据,触发确定性代码执行</p>
</div>
</div>
<div class="principle-card">
<div class="principle-number">5</div>
<div class="principle-content">
<h3 class="principle-title">统一执行状态和业务状态</h3>
<p class="principle-desc">简化并统一执行状态和业务状态,Agent执行状态可从上下文窗口推断</p>
</div>
</div>
<div class="principle-card">
<div class="principle-number">6</div>
<div class="principle-content">
<h3 class="principle-title">通过简单API启动/暂停/恢复</h3>
<p class="principle-desc">为Agent提供简单、直观的API接口,方便各种系统轻松交互</p>
</div>
</div>
<div class="principle-card">
<div class="principle-number">7</div>
<div class="principle-content">
<h3 class="principle-title">通过工具调用联系人工</h3>
<p class="principle-desc">LLM通过工具调用明确与人工交互,而不是直接输出自然语言请求</p>
</div>
</div>
<div class="principle-card">
<div class="principle-number">8</div>
<div class="principle-content">
<h3 class="principle-title">掌控你的控制流</h3>
<p class="principle-desc">开发者应完全控制Agent的控制流,而不是依赖框架的预设流程</p>
</div>
</div>
<div class="principle-card">
<div class="principle-number">9</div>
<div class="principle-content">
<h3 class="principle-title">将错误压缩到上下文窗口</h3>
<p class="principle-desc">将错误信息压缩并整合到上下文窗口中,以便LLM能够理解和处理错误</p>
</div>
</div>
<div class="principle-card">
<div class="principle-number">10</div>
<div class="principle-content">
<h3 class="principle-title">小而专注的Agent</h3>
<p class="principle-desc">构建小型、专注的Agent,每个Agent负责特定任务,而不是大型多功能Agent</p>
</div>
</div>
<div class="principle-card">
<div class="principle-number">11</div>
<div class="principle-content">
<h3 class="principle-title">从任何地方触发,在用户所在的地方与他们见面</h3>
<p class="principle-desc">Agent应能从各种渠道触发,并在用户所在的地方交互</p>
</div>
</div>
<div class="principle-card">
<div class="principle-number">12</div>
<div class="principle-content">
<h3 class="principle-title">使你的Agent成为一个无状态的reducer</h3>
<p class="principle-desc">Agent应设计为无状态的reducer,接收输入状态并返回新状态</p>
</div>
</div>
</div>
<div class="footer">
<p>这套原则不是一个像LangChain这样可以直接拿来用的"工具箱",而是一套<span class="accent-text">"方法论"</span>,帮助开发者构建生产级的LLM应用。</p>
</div>
</div>
</body>
</html>
登录后可参与表态
讨论回复
13 条回复
✨步子哥 (steper)
#1
09-16 12:55
登录后可参与表态
✨步子哥 (steper)
#2
09-16 13:05
登录后可参与表态
✨步子哥 (steper)
#3
09-16 13:09
登录后可参与表态
✨步子哥 (steper)
#4
09-16 13:29
登录后可参与表态
✨步子哥 (steper)
#5
09-16 13:33
登录后可参与表态
✨步子哥 (steper)
#6
09-16 13:33
登录后可参与表态
✨步子哥 (steper)
#7
09-16 13:37
登录后可参与表态
✨步子哥 (steper)
#8
09-16 13:38
登录后可参与表态
✨步子哥 (steper)
#9
09-16 13:39
登录后可参与表态
✨步子哥 (steper)
#10
09-16 13:39
登录后可参与表态
✨步子哥 (steper)
#11
09-16 13:40
登录后可参与表态
✨步子哥 (steper)
#12
09-16 13:55
登录后可参与表态
✨步子哥 (steper)
#13
09-16 14:07
登录后可参与表态