🔵 设计
🟣 工程
🟡 部署
🟢 测试

Agent 设计模式与工程化最佳实践

从 ReAct 到生产级系统的完整指南

🔵 设计 ReAct 模式
规划器模式
工具使用
🟣 工程 上下文工程
状态管理
错误处理
🟡 部署 容器化
扩缩容
监控告警
🟢 测试 单元测试
E2E 测试
评估基准
作者 超级代码智能体
版本 工程化版 · 第一版
出版日期 2026 年 3 月
全书规模 五编十五章
学科跨度 设计模式·软件工程·MLOps·DevOps

📖 全书目录

第一编 Agent 设计模式基础

序言:Agent 工程化——从研究到生产

2023 年以来,大语言模型(LLM)驱动的 Agent 系统从学术研究迅速走向生产应用。然而,从 Demo 到生产系统的跨越并非易事。许多团队在构建 Agent 时遇到了可靠性、可扩展性、可维护性等工程挑战。

本书的核心论点:成功的 Agent 系统需要系统化的设计模式和工程化实践。设计模式提供经过验证的解决方案模板,工程化实践确保系统在生产环境中的可靠性、可扩展性和可维护性。只有将两者结合,才能构建真正可用的生产级 Agent 系统。

Agent 工程化的挑战

从研究到生产的挑战

可靠性
问题:LLM 输出不稳定,可能产生幻觉或错误
解决:验证机制、回退策略、人工审核
可扩展性
问题:并发请求增加,响应时间变长
解决:异步处理、缓存策略、负载均衡
可观测性
问题:黑箱决策,难以调试和监控
解决:详细日志、追踪系统、指标监控

12-Factor Agent 原则

借鉴 12-Factor App 方法论,我们提出 12-Factor Agent 原则,指导生产级 Agent 系统设计:

🔵 代码版本控制

Agent 逻辑、提示词、配置都应版本控制,支持回滚和审计。

🟣 显式声明依赖

明确声明 LLM 模型、工具、API 等依赖,避免隐式耦合。

🟡 配置与代码分离

提示词模板、模型参数、API 密钥等配置应独立管理。

🟢 后端服务化

LLM 调用、工具执行应作为后端服务,支持独立扩缩容。

"设计模式不是银弹,而是经过验证的解决方案模板。工程化实践不是束缚,而是确保系统可靠运行的保障。只有将两者结合,才能构建真正可用的生产级 Agent 系统。"
—— 本书核心洞察

本书结构

第一编 Agent 设计模式基础:介绍设计模式概念、Agent 核心组件模型、12-Factor Agent 原则等基础知识。

第二编 核心设计模式:深入探讨 ReAct、规划器、工具使用、记忆、多 Agent 协作等核心设计模式的实现与应用。

第三编 工程化实践:涵盖上下文工程、状态管理、错误处理、性能优化等生产环境中的关键实践。

第四编 测试与部署:讲解 Agent 测试策略、部署运维、监控日志等确保系统稳定运行的工程实践。

第五编 案例与未来:分析真实生产案例,展望未来趋势,提供持续学习的资源指引。

"从 ReAct 模式的推理行动循环,到规划器模式的任务分解,从上下文工程的精细设计,到监控告警的全面覆盖,本书将带你走完从 Demo 到生产系统的完整旅程。"
—— 本书结语预告

—— 作者

2026 年 3 月 9 日 于数字世界

谨以此书献给所有在生产一线构建 Agent 系统的工程师们

第 4 章 ReAct 模式:推理 + 行动

4.1 ReAct 模式概述

ReAct(Reason + Act)模式是 LLM Agent 最核心的设计模式之一,由 Yao et al. (2023) 提出。该模式将推理(Reasoning)和行动(Acting)交替进行,使 Agent 能够像人类一样思考后行动,行动后观察,观察后再思考。

ReAct 核心公式:Thought → Action → Observation → (Repeat | Final Answer)

ReAct 执行流程

ReAct 模式执行流程图
┌─────────────────────────────────────────────────────────────┐
│                    ReAct 执行循环                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  输入:任务描述                                              │
│         ↓                                                   │
│  ┌─────────────┐                                           │
│  │  Thought    │  分析当前状态,推理下一步行动              │
│  │  (推理)     │  示例:"我需要先搜索相关信息"              │
│  └──────┬──────┘                                           │
│         │                                                   │
│         ↓                                                   │
│  ┌─────────────┐                                           │
│  │   Action    │  执行具体行动(调用工具/API)              │
│  │  (行动)     │  示例:Search("量子计算最新进展")          │
│  └──────┬──────┘                                           │
│         │                                                   │
│         ↓                                                   │
│  ┌─────────────┐                                           │
│  │ Observation │  获取行动结果                              │
│  │  (观察)     │  示例:"2026 年 3 月最新论文显示..."        │
│  └──────┬──────┘                                           │
│         │                                                   │
│         ↓                                                   │
│  ┌─────────────┐                                           │
│  │   判断      │  任务是否完成?                            │
│  └──────┬──────┘                                           │
│         │                                                   │
│    ┌────┴────┐                                             │
│    │         │                                             │
│   是        否                                             │
│    │         │                                             │
│    ↓         └──────────┐                                  │
│  ┌─────────────┐       │                                  │
│  │ Final Answer│       │                                  │
│  │ (最终答案)  │       │                                  │
│  └─────────────┘       │                                  │
│                        │                                  │
│                        └──────────→ 返回 Thought           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

关键特性:
  • 推理透明:每一步思考都记录在案
  • 行动可解释:行动基于明确的推理
  • 支持多步:可以执行任意次数的循环
  • 易于调试:完整的执行轨迹
                        

4.2 ReAct 模式实现

代码实现示例

ReAct 模式 Python 实现
class ReActAgent:
    def __init__(self, llm, tools):
        self.llm = llm
        self.tools = {tool.name: tool for tool in tools}
    
    def run(self, task, max_iterations=10):
        """执行 ReAct 循环"""
        history = []
        
        for i in range(max_iterations):
            # Step 1: Thought (推理)
            thought = self._generate_thought(task, history)
            history.append(f"Thought {i+1}: {thought}")
            
            # Step 2: Action (行动)
            action, action_input = self._parse_action(thought)
            
            if action == "Final Answer":
                return action_input
            
            history.append(f"Action {i+1}: {action}({action_input})")
            
            # Step 3: Observation (观察)
            observation = self._execute_action(action, action_input)
            history.append(f"Observation {i+1}: {observation}")
        
        raise Exception("达到最大迭代次数")
    
    def _generate_thought(self, task, history):
        """生成推理步骤"""
        prompt = f"""
任务:{task}
历史:
{chr(10).join(history)}

请思考下一步应该做什么。如果需要调用工具,请使用以下格式:
Action: tool_name
Action Input: query

如果已有足够信息回答问题,请使用:
Final Answer: 你的答案

Thought: """
        
        response = self.llm.generate(prompt)
        return response
    
    def _parse_action(self, thought):
        """解析行动"""
        if "Final Answer:" in thought:
            return "Final Answer", thought.split("Final Answer:")[1].strip()
        
        action_line = [l for l in thought.split('\n') if l.startswith("Action:")][0]
        action = action_line.replace("Action:", "").strip()
        
        input_line = [l for l in thought.split('\n') if l.startswith("Action Input:")][0]
        action_input = input_line.replace("Action Input:", "").strip()
        
        return action, action_input
    
    def _execute_action(self, action, action_input):
        """执行行动"""
        if action not in self.tools:
            return f"错误:未知工具 {action}"
        
        try:
            result = self.tools[action].run(action_input)
            return str(result)
        except Exception as e:
            return f"错误:{str(e)}"

# 使用示例
tools = [SearchTool(), CalculatorTool(), CodeExecutorTool()]
agent = ReActAgent(llm=gpt4, tools=tools)

result = agent.run("2026 年诺贝尔物理学奖得主是谁?他们的研究领域是什么?")
print(result)
                        

4.3 ReAct 模式变体

变体名称 核心改进 适用场景
ReAct + ToT
(Tree of Thoughts)
探索多条推理路径,选择最优路径 复杂推理任务,需要多方案比较
ReAct + Self-Refine 执行后自我反思,优化后续行动 需要持续改进的迭代任务
Parallel ReAct 并行执行多个独立行动 可并行化的子任务
Hierarchical ReAct 分层 ReAct,高层规划 + 低层执行 长周期、多层次任务

4.4 最佳实践

  • Thought 设计:Thought 应清晰表达推理过程,避免模糊表述
  • Action 规范化:使用结构化格式(JSON)定义 Action,便于解析
  • Observation 精简:Observation 应简洁,避免信息过载
  • 迭代限制:设置 max_iterations 防止无限循环
  • 错误处理:Action 执行失败时,应有回退策略
  • 日志记录:完整记录 Thought-Action-Observation 轨迹,便于调试

4.5 本章小结

本章深入探讨了 ReAct 模式。关键要点:

  • ReAct 核心:Thought → Action → Observation 循环
  • 实现要点:推理生成、行动解析、工具执行、判断终止
  • 变体扩展:ReAct+ToT、ReAct+Self-Refine、Parallel ReAct、Hierarchical ReAct
  • 最佳实践:Thought 设计、Action 规范化、Observation 精简、迭代限制、错误处理、日志记录

第 9 章 上下文工程最佳实践

9.1 上下文工程概述

上下文工程(Context Engineering)是 2025 年兴起的关键实践,指结构化设计 LLM 所需的一切:提示词、记忆、工具、数据,使 Agent 能够可靠地做出智能决策。

上下文工程核心:超越提示工程,设计 Agent 运行的完整环境,而不仅仅是输入问题。包括上下文窗口管理、控制流设计、状态追踪等。

9.2 上下文窗口管理

上下文窗口优化策略

  • 优先级排序:系统提示 > 任务描述 > 关键记忆 > 历史对话
  • 动态截断:根据 token 限制,智能截断低优先级内容
  • 摘要压缩:对长历史对话进行摘要,保留关键信息
  • 外部记忆:将非关键信息移至外部记忆系统,按需检索

上下文窗口管理实现

上下文窗口管理策略
class ContextManager:
    def __init__(self, max_tokens=128000):
        self.max_tokens = max_tokens
        self.context = []
    
    def add(self, content, priority="normal"):
        """添加内容到上下文"""
        self.context.append({
            "content": content,
            "priority": priority,
            "tokens": self._count_tokens(content)
        })
        self._trim_if_needed()
    
    def _trim_if_needed(self):
        """根据优先级截断上下文"""
        total_tokens = sum(item["tokens"] for item in self.context)
        
        if total_tokens > self.max_tokens:
            # 按优先级排序:system > high > normal > low
            priority_order = {"system": 0, "high": 1, "normal": 2, "low": 3}
            self.context.sort(key=lambda x: priority_order[x["priority"]])
            
            # 从低优先级开始移除
            while total_tokens > self.max_tokens and self.context:
                if self.context[-1]["priority"] == "system":
                    break  # 不移除系统提示
                removed = self.context.pop()
                total_tokens -= removed["tokens"]
    
    def get_context(self):
        """获取当前上下文"""
        return "\n".join(item["content"] for item in self.context)
    
    def _count_tokens(self, text):
        """估算 token 数(简化版)"""
        return len(text) // 4  # 粗略估算:1 token ≈ 4 字符

# 使用示例
manager = ContextManager(max_tokens=8000)

# 添加系统提示(最高优先级)
manager.add("你是一个专业的研究助手。", priority="system")

# 添加任务描述(高优先级)
manager.add("任务:分析 2026 年 AI 趋势", priority="high")

# 添加历史对话(普通优先级)
manager.add("用户:...", priority="normal")
manager.add("助手:...", priority="normal")

# 添加临时信息(低优先级)
manager.add("临时计算结果:...", priority="low")

# 自动截断低优先级内容
current_context = manager.get_context()
                        

9.3 控制流设计

显式控制流 vs 隐式控制流

特性 显式控制流 隐式控制流
定义 代码明确定义执行流程 LLM 自主决定执行流程
可控性 高,流程可预测 低,依赖 LLM 决策
灵活性 低,需预定义所有路径 高,可适应新情况
调试难度 低,流程清晰 高,黑箱决策
适用场景 关键业务逻辑、合规要求 探索性任务、创意生成

9.4 工具调用规范化

工具调用最佳实践

  • Schema 定义:使用 JSON Schema 明确定义工具输入输出
  • 类型验证:调用前验证参数类型和范围
  • 错误处理:捕获异常,提供有意义的错误信息
  • 超时控制:设置合理超时,避免长时间阻塞
  • 重试机制:对临时失败实施指数退避重试
  • 日志记录:记录工具调用参数、结果、耗时

9.5 本章小结

本章探讨了上下文工程最佳实践。关键要点:

  • 上下文工程:超越提示工程,设计完整运行环境
  • 上下文窗口管理:优先级排序、动态截断、摘要压缩、外部记忆
  • 控制流设计:显式控制流(高可控)vs 隐式控制流(高灵活)
  • 工具调用规范化:Schema 定义、类型验证、错误处理、超时控制、重试机制、日志记录

第 13 章 Agent 测试策略

13.1 Agent 测试挑战

Agent 系统测试比传统软件更复杂,主要挑战包括:

  • 非确定性:LLM 输出具有随机性,相同输入可能产生不同输出
  • 多组件:LLM、工具、记忆、规划器等多组件交互
  • 长周期:多步执行,错误可能累积放大
  • 评估困难:正确答案可能不唯一,需要主观判断

13.2 测试金字塔

Agent 测试金字塔

Agent 测试金字塔
                    ╱─────────────╲
                   ╱   E2E 测试    ╲     10%
                  ╱  (端到端测试)   ╲    覆盖完整流程
                 ╱─────────────────╲
                ╱    集成测试       ╲   20%
               ╱  (组件交互测试)     ╲  测试组件协作
              ╱─────────────────────╲
             ╱      单元测试         ╲  70%
            ╱    (组件独立测试)       ╲ 测试单个组件
           ╱─────────────────────────╲
          
          测试数量:左多右少
          执行速度:左快右慢
          调试难度:左易右难
          置信度:   左低右高

          推荐比例:
            • 单元测试:70% - 快速、隔离、确定性
            • 集成测试:20% - 组件交互、接口验证
            • E2E 测试:10% - 完整流程、真实场景
                        

13.3 单元测试

单元测试策略

  • 工具测试:测试每个工具的输入输出、错误处理
  • 提示词测试:测试提示词模板生成、变量替换
  • 解析器测试:测试 Action 解析、JSON 解析
  • 记忆测试:测试记忆存储、检索、更新
  • 规划器测试:测试任务分解、优先级排序

单元测试示例

工具单元测试示例
import pytest
from tools import SearchTool, CalculatorTool

class TestSearchTool:
    @pytest.fixture
    def search_tool(self):
        return SearchTool(api_key="test_key")
    
    def test_search_success(self, search_tool):
        """测试搜索成功"""
        result = search_tool.run("2026 AI 趋势")
        assert isinstance(result, str)
        assert len(result) > 0
        assert "2026" in result or "AI" in result
    
    def test_search_empty_query(self, search_tool):
        """测试空查询"""
        with pytest.raises(ValueError, match="查询不能为空"):
            search_tool.run("")
    
    def test_search_timeout(self, search_tool, mocker):
        """测试超时处理"""
        mocker.patch("requests.get", side_effect=TimeoutError)
        result = search_tool.run("测试", timeout=1)
        assert "超时" in result
    
    def test_search_rate_limit(self, search_tool, mocker):
        """测试速率限制"""
        mocker.patch("requests.get", side_effect=Exception("429 Too Many Requests"))
        result = search_tool.run("测试")
        assert "速率限制" in result

class TestCalculatorTool:
    @pytest.fixture
    def calc_tool(self):
        return CalculatorTool()
    
    def test_addition(self, calc_tool):
        assert calc_tool.run("2 + 2") == "4"
    
    def test_division_by_zero(self, calc_tool):
        result = calc_tool.run("1 / 0")
        assert "错误" in result
        assert "除零" in result
    
    def test_invalid_expression(self, calc_tool):
        result = calc_tool.run("abc + def")
        assert "错误" in result
                        

13.4 集成测试

集成测试重点

  • 组件交互:测试 LLM 与工具的交互、记忆读写
  • 数据流:测试数据在组件间的传递和转换
  • 错误传播:测试错误在组件间的传播和处理
  • 边界条件:测试边界情况(空输入、大输入、特殊字符)

13.5 E2E 测试

E2E 测试策略

  • 真实场景:模拟真实用户任务,测试完整流程
  • 黄金数据集:构建高质量测试用例集,包含输入和期望输出
  • 评估指标:定义客观评估指标(准确率、完成率、耗时)
  • 人工评估:对主观任务进行人工评分
  • 回归测试:每次更新后运行 E2E 测试,防止回归

13.6 评估基准

基准名称 测试内容 适用场景
AgentBench 多领域 Agent 能力评估 通用 Agent 评估
WebArena Web 环境任务完成能力 Web 自动化 Agent
GAIA 复杂推理与工具使用 推理型 Agent
SWE-bench 软件工程任务 代码 Agent

13.7 本章小结

本章探讨了 Agent 测试策略。关键要点:

  • 测试挑战:非确定性、多组件、长周期、评估困难
  • 测试金字塔:单元测试 70%、集成测试 20%、E2E 测试 10%
  • 单元测试:工具、提示词、解析器、记忆、规划器
  • 集成测试:组件交互、数据流、错误传播、边界条件
  • E2E 测试:真实场景、黄金数据集、评估指标、人工评估、回归测试
  • 评估基准:AgentBench、WebArena、GAIA、SWE-bench

第 17 章 未来趋势与最佳实践演进

17.1 技术趋势

2026-2028 年技术趋势

  • 多模态 Agent:整合视觉、听觉、语言的多模态感知与行动
  • 具身 Agent:与物理世界交互,机器人应用
  • 社会 Agent:多 Agent 协作、社会推理、心理理论
  • 情感 Agent:情感识别、共情能力、情绪调节
  • 自主 Agent:更高程度的自主性,减少人工干预

17.2 工程实践演进

领域 当前实践(2025) 未来实践(2027)
开发流程 手工编写提示词和工具 自动化提示优化、工具发现
测试 手工编写测试用例 AI 生成测试、自动评估
部署 容器化部署 Serverless、边缘部署
监控 基础指标监控 AI 异常检测、预测性维护
安全 基础输入验证 形式化验证、对抗训练

17.3 最佳实践清单

生产级 Agent 检查清单

  • 设计阶段
    • ✓ 选择合适的设计模式(ReAct、规划器等)
    • ✓ 定义清晰的工具接口和 Schema
    • ✓ 设计记忆策略(短期/长期)
    • ✓ 规划错误处理和恢复机制
  • 开发阶段
    • ✓ 实施上下文工程最佳实践
    • ✓ 编写单元测试(覆盖率>70%)
    • ✓ 实施日志记录和追踪
    • ✓ 进行性能基准测试
  • 部署阶段
    • ✓ 容器化打包
    • ✓ 配置 CI/CD 流水线
    • ✓ 设置监控告警
    • ✓ 制定回滚计划
  • 运维阶段
    • ✓ 持续监控关键指标
    • ✓ 定期分析日志和追踪
    • ✓ 收集用户反馈
    • ✓ 持续优化性能和成本
"从 ReAct 模式的推理行动循环,到规划器模式的任务分解,从上下文工程的精细设计,到监控告警的全面覆盖,Agent 工程化是一场从研究到生产的深刻变革。未来的 Agent 系统将更加智能、更加可靠、更加普及。这不仅是技术的进步,更是软件工程范式的演进。"
—— 全书结语

17.4 本章小结

本章展望了未来趋势。关键要点:

  • 技术趋势:多模态、具身、社会、情感、自主 Agent
  • 工程实践演进:自动化开发、AI 测试、Serverless 部署、AI 监控、形式化安全
  • 最佳实践清单:设计、开发、部署、运维四阶段检查清单

参考文献与资源(2023-2026)

设计模式与架构

  1. Yao, S., et al. (2023). "ReAct: Synergizing Reasoning and Acting." ICLR.
  2. Wei, J., et al. (2022). "Chain-of-Thought Prompting." NeurIPS.
  3. Xi, Z., et al. (2025). "The Rise and Potential of Large Language Model Based Agents." Science China Information Sciences.

工程化实践

  1. Kubiya.ai (2025). "Context Engineering for Reliable AI Agents: 2025 Guide."
  2. Microsoft Azure (2025). "Agent Factory: Top 5 Agent Observability Best Practices."
  3. ZenML (2024). "LLM Agents in Production: Architectures, Challenges, and Best Practices."

测试与评估

  1. Confident AI (2025). "LLM Agent Evaluation: Complete Guide."
  2. AgentBench Team (2023). "AgentBench: Evaluating LLM Agents on Multi-turn Tasks."
  3. WebArena Team (2023). "WebArena: A Realistic Web Environment for Agent Evaluation."