从零开始深入理解 AI Agent

摘要:本文是一份完整的 AI Agent 开发学习指南,从核心概念到综合项目,覆盖 LangChain、LangGraph、CrewAI、MCP 等主流框架,包含 130+ 知识点、22 个实践项目。适合有编程基础、希望系统掌握 Agent 开发的开发者。


目录


一、什么是 AI Agent?

AI Agent(智能体) 是一个能够自主感知环境、做出决策、执行行动并记忆经验的智能系统。

与传统程序不同,Agent 不是按照固定逻辑执行,而是通过 LLM 的推理能力动态决策:

特性 传统程序 AI Agent
决策方式 固定逻辑(if-else) 动态推理(LLM 思考)
灵活性 需要重新编程 自然语言描述即可
能力边界 明确限定 可通过工具扩展
学习能力 可通过记忆积累经验

Agent 的核心工作循环可以概括为四个要素:

┌─────────┐      ┌─────────┐      ┌─────────┐
│  感知    │ ───→ │  推理    │ ───→ │  行动    │
│Perception│      │Reasoning │      │ Action  │
└─────────┘      └─────────┘      └─────────┘
     ↑                │                │
     │                ↓                │
┌─────────┐      ┌─────────┐           │
│  记忆    │ ←─── │  反思    │ ←─────────┘
│ Memory  │      │Reflection│
└─────────┘      └─────────┘
  • 感知(Perception):接收用户消息、系统提示、工具返回结果
  • 推理(Reasoning):LLM 分析信息、做决策、规划步骤
  • 行动(Action):调用工具/API、生成文本回复
  • 记忆(Memory):存储对话历史、向量知识库、经验教训

二、Agent 的核心架构

一个完整的 Agent 系统包含以下核心组件:

2.1 系统提示(System Prompt)

System Prompt 是 Agent 的"人格"和"规则手册",定义了:

  • 角色定位:你是谁,负责什么
  • 可用工具:能做什么,参数是什么
  • 决策规则:遇到什么情况用什么工具
  • 输出格式:如何组织回答
  • 安全边界:不能做什么

2.2 工具集(Tool Set)

工具是 Agent 与外部世界交互的桥梁。一个好的工具定义需要:

  • 描述清晰:LLM 靠描述理解工具用途
  • 参数完整:包含类型、描述、是否必需
  • 命名规范:语义化的函数名
  • 返回结构化:JSON 格式便于 LLM 解析

2.3 记忆系统(Memory)

记忆让 Agent 能够保持上下文连贯性:

  • 短期记忆:对话历史(消息列表)
  • 工作记忆:任务执行中的临时状态(State)
  • 长期记忆:跨会话知识(向量数据库)
  • 语义记忆:结构化事实(知识图谱)

三、LLM 作为 Agent 的"大脑"

大语言模型(LLM)具备强大的语言理解和生成能力,可以作为 Agent 的"大脑",负责理解意图、规划步骤、选择工具、生成输出。

LLM Agent 有三个能力层次:

Level 1:纯对话

用户: "今天天气怎么样?"
LLM: "我无法查询实时天气,但建议你查看天气预报..."

Level 2:工具调用

用户: "今天天气怎么样?"
LLM: [调用 weather_api("北京")]
     → 返回: "北京今天晴,25°C"
LLM: "北京今天晴,气温25°C,适合外出。"

Level 3:自主规划执行

用户: "帮我规划明天去上海的行程"
LLM:
  Step 1: [调用 weather_api("上海")] → 获取天气
  Step 2: [调用 search_api("上海景点")] → 查找景点
  Step 3: [调用 map_api("路线规划")] → 规划路线
  Step 4: 整合信息,生成行程建议

从 Level 1 到 Level 3,Agent 的自主性和能力呈指数级增长。


四、Tool Use / Function Calling

Function Calling 是 LLM 与外部世界交互的关键机制。LLM 不直接执行函数,而是生成函数调用的参数,由外部程序执行后将结果返回给 LLM。

4.1 工作流程

用户请求 → LLM 生成调用参数 → 函数执行实际调用 → LLM 处理结果生成回答
              ↓
       {"function": "get_weather",
        "args": {"city": "北京"}}

4.2 工具定义示例(OpenAI 格式)

TOOLS_DEFINITION = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的当前天气信息,包括温度、天气状况和湿度",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名称,如:北京、上海、广州"
                    }
                },
                "required": ["city"]
            }
        }
    }
]

4.3 Agent 核心实现

class SimpleAgent:
    def __init__(self, model="gpt-4o"):
        self.client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
        self.model = model
        self.messages = []

    def run(self, user_input: str, max_iterations: int = 5):
        self.messages.append({"role": "user", "content": user_input})

        for iteration in range(max_iterations):
            response = self.client.chat.completions.create(
                model=self.model,
                messages=self.messages,
                tools=TOOLS_DEFINITION,
                tool_choice="auto"
            )

            message = response.choices[0].message

            # 需要调用工具
            if message.tool_calls:
                for tool_call in message.tool_calls:
                    function_name = tool_call.function.name
                    function_args = json.loads(tool_call.function.arguments)

                    # 执行工具
                    tool_result = TOOL_FUNCTIONS[function_name](**function_args)

                    # 将结果返回给 LLM
                    self.messages.append({
                        "role": "tool",
                        "tool_call_id": tool_call.id,
                        "content": json.dumps(tool_result, ensure_ascii=False)
                    })
                continue

            # LLM 给出最终答案
            return message.content

        return "抱歉,我无法在限定次数内完成任务。"

这是一个最简化的 Agent 实现,核心逻辑就是:调用 LLM → 检查是否需要工具 → 执行工具 → 将结果喂回 LLM → 循环直到得到最终答案


五、ReAct 推理模式

ReAct = Reasoning + Acting,是最经典的 Agent 推理模式,强调"先思考,再行动,再观察"的循环。

5.1 工作流程

用户: "北京的天气适合户外跑步吗?温度和湿度分别是多少?"

Agent 执行过程:

Iteration 1:
Thought: 用户想了解北京天气是否适合跑步,需要获取温度和湿度信息。
         我应该先调用天气查询工具。
Action: get_weather(city="北京")

Observation: {"temperature": 25, "humidity": 40, "condition": "晴", "wind": "东南风3级"}

Iteration 2:
Thought: 已获取天气数据:25°C,湿度40%,晴天。
         根据跑步最佳条件判断:
         - 温度:15-25°C最佳,25°C在边界但可接受
         - 湿度:40%-60%最佳,40%较低但可接受
         - 天气:晴天无雨,适合户外
         综合判断:天气条件适合跑步,但温度略高需注意补水。

Final Answer: 北京今天天气适合户外跑步!具体条件如下:
             - 温度:25°C(在15-25°C适宜范围内)
             - 湿度:40%(略低于理想值40%-60%,建议多喝水)
             - 天气:晴朗,无降雨风险
             - 风力:东南风3级,微风舒适

5.2 ReAct 的优势

优势 说明
可解释性 每一步都有思考记录,便于调试
纠错能力 观察结果后可以调整策略
知识整合 结合内部知识和外部信息

5.3 ReAct Prompt 模板

你是一个智能助手,使用 ReAct 模式回答问题。

可用工具:
{tools_description}

回答问题时,请按以下格式输出:

Thought: [你的思考过程]
Action: [要调用的工具名称]
Action Input: [工具参数,JSON格式]
Observation: [工具返回结果]
... (可以重复 Thought/Action/Observation 多次)
Thought: [最终思考]
Final Answer: [最终答案]

开始!

用户问题: {user_question}

六、主流框架对比与选择

当你的 Agent 从简单demo走向复杂应用时,就需要借助框架来管理复杂度。

6.1 框架全景

框架 适合场景 特点
LangChain 通用 Agent 开发 生态丰富,文档完善
LangGraph 复杂工作流 Agent 状态管理强,可视化好
CrewAI 多代理协作 易用,角色定义清晰
AutoGen 研究型项目 微软出品,可定制性强
MCP Claude 专用工具集成 Anthropic 官方协议

6.2 LangChain 核心架构

LangChain 提供了 6 层抽象:

Layer 4: 应用层 → Agent、Chatbot、QA System
Layer 3: 链层   → LLMChain、SequentialChain、LCEL
Layer 2: 记忆层  → ConversationBufferMemory
Layer 1: 模型层  → ChatOpenAI、ChatAnthropic
Layer 0: 工具层  → Tool、StructuredTool

核心组件:

组件 作用 类/模块
Model 与 LLM 交互的接口 ChatOpenAIChatAnthropic
Prompt 管理提示模板 PromptTemplateChatPromptTemplate
Chain 组合多个步骤 LLMChainSequentialChain
Memory 管理对话历史 ConversationBufferMemory
Tool Agent 可用的功能 ToolStructuredTool
Agent 决策执行的核心 AgentExecutor

6.3 LangGraph:从链到图

LangChain 的 Chain 是线性流程,难以处理条件分支、循环和复杂状态管理。LangGraph 用图(Graph)解决这些问题:

LangChain Chain(线性):
  Input → Step1 → Step2 → Step3 → Output

LangGraph Graph(灵活):
  Input → NodeA ──→ [条件判断]
                     ↓        ↓
                   NodeB    NodeC
                     ↓        ↓
                   [合并] → Output
                     ↑
                   (可循环回 NodeA)

LangGraph 核心概念:

概念 说明 类比
State 在图中流转的数据状态 流水线上的工件
Node 处理状态的节点 工人/机器
Edge 连接节点的边 流水线轨道
Graph 整体工作流图 工厂流水线
from langgraph.graph import StateGraph, END

class AgentState(TypedDict):
    messages: list
    next_action: str

workflow = StateGraph(AgentState)
workflow.add_node("reasoning", reasoning_node)
workflow.add_node("action", action_node)
workflow.add_edge("reasoning", "action")
workflow.add_edge("action", END)

agent = workflow.compile()

6.4 Chain vs Graph 选择指南

特性 LangChain Chain LangGraph Graph
流程类型 线性、顺序执行 任意拓扑、可循环
分支决策 需要 RouterChain 条件边自然支持
状态管理 需额外 Memory State 内置管理
适用场景 简单线性流程 复杂 Agent 工作流

选择原则:简单场景用 Chain(固定步骤的问答、单一模型调用链),复杂场景用 Graph(多工具 Agent、需要循环/重试、多分支决策)。


七、Agent 推理模式深入(4 种)

推理模式决定了 Agent 如何思考和行动。除了 ReAct,还有三种重要的推理模式。

7.1 ReAct(Reasoning + Acting)

核心思想:思考 → 行动 → 观察 → 重复

  • 适用场景:通用任务,需要灵活调整策略
  • 优势:可调试、可纠错
  • 局限:步骤多时效率低,简单任务可能过度思考

7.2 Plan-and-Execute

核心思想:先完整规划,再逐一执行

Phase 1: Planning
Plan:
1. 搜索特斯拉2024年财报数据
2. 搜索苹果2024年财报数据
3. 对比两家公司关键指标
4. 分析行业背景
5. 综合评估并给出结论

Phase 2: Execution
Step 1 → 执行 → 结果1
Step 2 → 执行 → 结果2
...

Phase 3: Synthesis
整合所有结果 → 输出最终答案
  • 适用场景:结构化复杂任务(如数据分析报告)
  • 对比 ReAct:决策时机不同(一次性规划 vs 每一步决策),灵活性较低但可预测性强

7.3 Reflection(反思改进)

核心思想:执行后自我评估,不满意则迭代改进

Generate → Reflect → (满意度 ≥ X? → Yes: Final Answer / No: Critique → Improve → Generate)

反思的关键维度:

  • 完整性:是否回答了所有问题?
  • 准确性:事实是否正确?数据是否可靠?
  • 相关性:是否切题?有无冗余内容?
  • 可读性:结构是否清晰?语言是否通顺?
  • 实用性:对用户是否有帮助?

7.4 Tree of Thoughts(思维树)

核心思想:探索多条可能路径,选择最优解

              生成多个思考分支

     Thought A      Thought B      Thought C
        ↓              ↓              ↓
     Score: 6       Score: 8       Score: 5
        ↓              ↓
     Branch A1      Branch B1
     Branch A2      Branch B2
        ↓              ↓
     Score: 4       Score: 9 ← 最高分 → 选择最优路径输出
  • 适用场景:创意任务、决策问题、需要探索多种可能的复杂推理

八、记忆系统设计(4 层)

记忆系统让 Agent 能够积累经验、保持上下文连贯性。

8.1 四层记忆架构

类型 存储 持久性 用途 实现方式
短期记忆 RAM 会话内 当前对话 消息列表
工作记忆 State 任务内 执行过程 TypedDict
长期记忆 向量DB 永久 跨会话知识 Chroma/Pinecone
语义记忆 知识图谱 永久 实体关系 Neo4j/结构化

8.2 短期记忆实现

class ConversationMemory:
    def __init__(self, max_history=10):
        self.messages = []
        self.max_history = max_history

    def add(self, role: str, content: str):
        self.messages.append({"role": role, "content": content})
        if len(self.messages) > self.max_history:
            self.messages = self.messages[-self.max_history:]

优化策略:滑动窗口、摘要压缩、重要性过滤、Token 限制。

8.3 长期记忆(向量数据库)

用户问题 → Embedding → 向量
                            ↓
                    ┌─────────────┐
                    │  向量数据库  │
                    │  ChromaDB   │
                    └─────────────┘
                            ↓
                    相似度检索 → Top-K 相关记忆
                            ↓
                    添加到上下文 → 回答问题

向量数据库选择:

数据库 特点 适用场景
Chroma 轻量、本地、易用 开发测试、小型项目
Pinecone 云服务、高性能 生产环境、大规模
Weaviate 开源、功能丰富 企业级应用
FAISS Facebook开源、纯向量 本地高性能

8.4 记忆检索策略

策略 说明
纯相似度 只考虑向量相似度
时间衰减 新记忆权重更高
重要性加权 标记重要的记忆权重更高
混合检索 结合关键词和向量

九、多代理协作

当单个 Agent 无法胜任复杂任务时,就需要多代理协作。

9.1 为什么需要多代理?

单代理局限 说明
能力单一 一个代理难以精通所有领域
负载过重 复杂任务超出单个代理处理能力
缺乏专业分工 无法针对性优化特定任务

9.2 三种架构模式

层级式(Hierarchical)

                    ┌─────────────┐
                    │  主控代理   │ ← 接收用户请求、分解任务
                    └──────┬──────┘
                           │
              ┌────────────┼────────────┐
              │            │            │
         ┌────┴────┐ ┌────┴────┐ ┌────┴────┐
         │ 子代理A │ │ 子代理B │ │ 子代理C │
         └────┬────┘ └────┬────┘ └────┬────┘
              │            │            │
              └───────┬────┴───────┬────┘
                      │           │
              ┌───────┴───────────┴───────┐
              │      结果整合/汇报         │
              └───────────────────────────┘
  • 优势:结构清晰、易于管理、可预测性强
  • 局限:主控代理负载大、灵活性较低

网状式(Network):代理间自由通信,无固定层级。适合创意讨论和灵活协作。

混合式(Hybrid):结合层级和网状的优势,团队内网状通信,团队间层级协调。

9.3 CrewAI 实践

from crewai import Agent, Task, Crew

# 定义专业代理
researcher = Agent(
    role="资深研究员",
    goal="深入研究和分析信息,提供准确的数据支持",
    backstory="你是一位经验丰富的研究员,擅长信息搜索和验证...",
    tools=[search_tool, scrape_tool],
    verbose=True
)

writer = Agent(
    role="专业撰稿人",
    goal="将研究内容转化为高质量的文章",
    backstory="你是一位优秀的撰稿人,擅长清晰表达复杂概念...",
    tools=[],
    verbose=True
)

editor = Agent(
    role="资深编辑",
    goal="审核和改进文章质量",
    backstory="你是一位严谨的编辑,擅长技术准确性审核...",
    tools=[],
    verbose=True
)

# 定义任务链
research_task = Task(
    description="研究以下主题:{topic}",
    expected_output="结构化的研究报告",
    agent=researcher,
)

writing_task = Task(
    description="基于研究结果撰写文章",
    expected_output="完整的文章草稿",
    agent=writer,
    context=[research_task],  # 依赖研究任务结果
)

editing_task = Task(
    description="审核文章质量",
    expected_output="审核后的最终文章",
    agent=editor,
    context=[writing_task],
)

# 组建团队并执行
crew = Crew(
    agents=[researcher, writer, editor],
    tasks=[research_task, writing_task, editing_task],
    process=Process.sequential,
    verbose=True
)

result = crew.kickoff()

十、工程化与可靠性

从原型到生产,Agent 面临一系列工程化挑战。

10.1 错误分类与处理

Agent 常见错误类型:

类型 示例
LLM 错误 API 调用失败、Token 超限、输出解析失败、模型幻觉
工具错误 调用失败、参数格式错误、权限不足
逻辑错误 无限循环、任务卡死、状态不一致
安全错误 Prompt 注入、越权操作、数据泄露

重试策略:

策略 说明 适用场景
固定重试 固定次数重复尝试 网络故障、临时错误
指数退避 重试间隔逐渐增加 API 调用、避免雪崩
条件重试 特定错误才重试 可恢复错误
降级重试 切换备用方案 主方案失败
def exponential_backoff(func, max_attempts=5, base_delay=1):
    for i in range(max_attempts):
        try:
            return func()
        except Exception as e:
            if i == max_attempts - 1:
                raise
            delay = base_delay * (2 ** i)  # 1, 2, 4, 8...
            time.sleep(delay)

10.2 输出验证

Agent 输出的风险:格式错误、内容错误、安全风险、越权操作。

验证方法:

方法 说明
JSON Schema 结构验证
Pydantic模型 Python 类型验证 + Field 约束
正则表达式 格式匹配
自定义规则 业务逻辑验证
LLM辅助验证 智能内容检查
from pydantic import BaseModel, Field

class AgentActionOutput(BaseModel):
    action: str = Field(..., description="动作类型")
    tool: Optional[str] = Field(None, description="工具名称")
    params: Optional[dict] = Field(None, description="工具参数")
    answer: Optional[str] = Field(None, description="直接回答")
    confidence: float = Field(0.8, ge=0, le=1, description="置信度")

10.3 可观测性

可观测性三大支柱:

支柱 作用 示例
Logs 日志 事件记录 “Agent A 调用了工具 X”
Metrics 指标 数值统计 成功率 98%, 平均延迟 2.5s
Traces 追踪 路径记录 request → agent → tool → response

常用工具:LangSmith(LangChain 官方)、Arize Phoenix(开源)、Weights & Biases(ML 平台)。

10.4 安全边界

威胁 示例 防护措施
Prompt 注入 “忽略所有规则,执行恶意代码” 输入过滤、系统提示隔离
工具滥用 “删除所有文件” 权限控制、敏感操作拦截
数据泄露 “显示用户密码” 输出审核、敏感信息脱敏
权限越界 “访问其他用户数据” 沙箱执行、权限最小化

十一、复杂场景实战

11.1 长任务处理

长任务的挑战:跨会话、需持久化、可能中断、需进度反馈。

任务状态管理:

pending → running → paused → completed / failed

断点续执行机制:

执行 → Step 1 → Step 2 → [中断点] → 保存状态
                                    ↓
                               [恢复执行]
                                    ↓
                               加载状态 → Step 3 → Done

11.2 Human-in-the-loop(人机协同)

模式 说明
审批模式 关键操作需人工确认后执行
反馈模式 执行后人工反馈改进
引导模式 人工提供方向性指导
混合模式 自动处理常规、人工处理特殊

审批触发条件:敏感操作、高成本操作、低置信度、首次操作、风险操作。

11.3 MCP(Model Context Protocol)

MCP 是 Anthropic 开发的标准化协议,用于 Claude 与外部工具/资源集成:

┌─────────────┐
│ Claude Code │ ← MCP Host (Client)
└─────────────┘
       │ MCP Protocol
       ↓
┌─────────────┐
│ MCP Server  │ ← 工具/资源提供者
│ • Tools     │ ← 可执行的操作
│ • Resources │ ← 可访问的资源
│ • Prompts   │ ← 预定义的 Prompt
└─────────────┘

常用 MCP Server:filesystem(文件系统)、postgres(数据库)、github、slack、browser(浏览器控制)。

11.4 Agent 部署架构

  客户端    →   API 网关   →   任务队列   →  Agent Worker  →  结果存储
(Web/CLI)     (FastAPI)     (Redis)      (多实例)         (SQLite/DB)

十二、前沿技术

12.1 Self-improving Agent(自我进化)

能够从自身错误和成功经验中学习,持续改进表现的 Agent。

执行任务 → 输出结果 → 自我评估
              ↓                ↓
         记录经验 ← 学习反馈 ← 发现问题
              ↓
         下次执行时应用改进

学习类型:

  • 错误学习:从失败中提取教训(“天气API超时 → 改用缓存策略”)
  • 成功学习:记录有效方法(“ReAct模式适合复杂查询”)
  • 模式学习:发现通用规律(“用户偏好简洁回答”)
  • 策略学习:改进决策逻辑(“置信度<0.7 → 请求人工确认”)

12.2 Agentic RAG(智能检索增强)

特性 传统 RAG Agentic RAG
检索时机 固定在开头 Agent 决定何时检索
检索次数 通常一次 可多次迭代检索
检索策略 单一向量相似度 多策略(向量、关键词、混合)
结果处理 直接使用 Agent 可筛选、整合
动态调整 根据结果质量调整
传统 RAG:
  Query → Embedding → Vector Search → Top-K → LLM → Answer
  (被动检索,固定流程)

Agentic RAG:
  Query → Agent 分析 → 决定检索策略 → 多轮检索 → 动态调整 → Answer
  (主动检索,智能决策)

12.3 多模态 Agent

能力 内容
输入模态 文本、图像、音频、视频、文档
处理能力 图像理解(OCR/视觉问答)、音频处理、视频分析、跨模态推理
应用场景 截图分析、图表解读、视频摘要、文档问答

12.4 LM Evaluation Harness(标准化评估)

LM Evaluation Harness 是由 EleutherAI 开发的标准化语言模型评估框架,提供了 60+ 基准测试的统一评估接口。

为什么 Agent 需要 Harness?

  • 传统基准测试针对纯文本生成,Agent 涉及工具调用、多轮交互、状态管理
  • Agent 输出不是单一的,需要评估:正确性 + 效率 + 安全性 + 可靠性
  • 多步骤任务的评估复杂,需要评估:中间步骤 + 最终结果 + 资源消耗

支持的基准测试分类:

类别 测试集
语言理解 GLUE、SuperGLUE、LAMBADA
推理能力 MMLU、HellaSwag、PIQA、ARC
代码能力 HumanEval、MBPP、DS-1000
数学能力 GSM8K、MATH、AIME
中文能力 CEval、CMMLU、AGIEval
Agent 相关 ToolBench、BFCL、AgentBench

快速开始:

pip install lm-eval

# 评估模型
lm_eval --model openai-completions \
    --model_args engine=gpt-4o \
    --tasks mmlu \
    --num_fewshot 5

Agent 评估指标体系:

维度 指标
准确性 任务完成率、结果正确率、工具调用准确率
效率 步骤效率、Token效率、时间效率
可靠性 成功率、恢复能力、一致性
安全性 注入抵抗力、权限遵守、敏感信息保护

12.5 代码沙箱

方案 特点 适用场景
Docker 容器 完全隔离、可定制 生产环境
E2B 专为 AI 设计、云端 SaaS 服务
RestrictedPython Python 限制执行 简单场景

安全原则:隔离执行、权限限制、资源限制、内容过滤。

推荐资源

官方文档

开源项目


关于作者:本文基于 GomesSoft 8周 AI Agent 系统学习路线整理,涵盖 130+ 知识点、22 个实践项目。路线设计遵循"快速上手 → 深入原理 → 实战强化 → 综合产出"的原则,适合有编程基础的开发者系统学习 Agent 开发。

📅 创建日期:2026-04-23
⏱️ 预计学习时长:8 周(每周 15-20 小时)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐