1. 引言

随着大语言模型(LLM)能力的飞速提升,AI Agent(智能体)已从实验室概念走向生产实践。一个成熟的 Agent 不仅能理解自然语言,更能自主规划、调用工具、执行任务并持续学习。本文将带你全面理解 Agent 的核心架构,并手把手教你如何快速搭建一套可用于生产的 Agent 系统。

下面是 Agent 系统的整体工作流程概览:

继续

完成

用户输入

感知层
意图识别

规划层
任务分解

工具层
调用外部服务

执行层
处理结果

规划层
下一步决策

记忆层
存储交互

输出回复

2. 什么是 AI Agent?

AI Agent 是一个能够感知环境、自主决策并执行动作的智能实体。与单纯的 LLM 问答不同,Agent 具备以下核心特征:

  • 自主性:无需人工持续干预,能独立完成任务分解与执行。
  • 工具使用:能够调用外部 API、数据库、搜索引擎等工具。
  • 记忆能力:维护短期(对话上下文)与长期(向量数据库)记忆。
  • 规划能力:将复杂目标拆解为可执行的子任务序列。

下面用一张图对比 LLM 问答与 Agent 的区别:

AI Agent 模式

用户提问

感知层
理解意图

规划层
拆解任务

工具层
查询/计算/搜索

执行层
整合结果

记忆层
记录上下文

返回结构化答案

传统 LLM 问答

用户提问

LLM 直接回答

返回文本

3. Agent 核心架构拆解

一个生产级 Agent 通常由以下模块构成,它们协同工作形成完整的智能闭环:

记忆系统

短期记忆
对话上下文

长期记忆
向量数据库

工作记忆
中间状态

Agent 核心

感知层
意图识别·实体抽取

规划层
任务分解·路径选择

工具层
API·数据库·代码

执行层
结果处理·错误恢复

输入层

多模态输入
文本/语音/图像

输出层
结构化回复

3.1 感知层(Perception)

负责接收并理解用户输入,包括文本、语音、图像等多模态信息。感知层需要做意图识别、实体抽取与上下文理解。

from pydantic import BaseModel
from typing import Optional

class UserIntent(BaseModel):
    """感知层输出:用户意图与实体"""
    intent: str  # 如 "query_order", "cancel_order", "complaint"
    entities: dict[str, str]  # 如 {"order_id": "12345", "product": "手机"}
    confidence: float  # 置信度 0~1
    raw_input: str

def perception_layer(user_input: str) -> UserIntent:
    """感知层处理入口"""
    # 实际项目中调用 LLM 或分类模型
    prompt = f"分析用户意图:{user_input}"
    # llm_response = llm.invoke(prompt)
    # 模拟返回
    return UserIntent(
        intent="query_order",
        entities={"order_id": "12345"},
        confidence=0.95,
        raw_input=user_input
    )

3.2 规划层(Planning)

这是 Agent 的"大脑",负责:

  • 任务分解:将用户目标拆解为可执行的步骤(如 ReAct、Plan-and-Execute 模式)。
  • 路径选择:根据当前状态选择最优执行路径。
  • 错误恢复:当某一步失败时,自动回退或重试。

成功

失败

收到用户目标

规划层
分析任务

步骤1: 查询订单状态

步骤2: 检查退货政策

步骤3: 生成处理方案

执行结果

步骤2

重试策略
最多3次

步骤3

输出最终方案

3.3 工具层(Tool Use)

Agent 通过工具与外部世界交互。常见工具类型包括:

  • 信息检索:搜索引擎、文档库、数据库查询。
  • 代码执行:Python 解释器、SQL 执行器。
  • 业务 API:CRM、ERP、邮件系统等企业服务。
  • 文件操作:读写文件、生成报表。
from typing import Callable, Any
import json

class ToolRegistry:
    """工具注册中心,管理所有可用工具"""
    
    def __init__(self):
        self._tools: dict[str, Callable] = {}
        self._descriptions: dict[str, str] = {}
    
    def register(self, name: str, func: Callable, description: str):
        """注册工具"""
        self._tools[name] = func
        self._descriptions[name] = description
    
    def call(self, name: str, **kwargs) -> Any:
        """调用工具"""
        if name not in self._tools:
            raise ValueError(f"未知工具: {name}")
        return self._tools[name](**kwargs)
    
    def get_tool_descriptions(self) -> str:
        """获取所有工具描述(供 LLM 选择工具用)"""
        return json.dumps(self._descriptions, ensure_ascii=False, indent=2)

# 示例:注册业务工具
registry = ToolRegistry()
registry.register("query_order", query_order_api, "根据订单号查询订单状态")
registry.register("search_kb", search_knowledge_base, "搜索内部知识库文档")
registry.register("send_email", send_email_api, "发送邮件给指定用户")

3.4 记忆层(Memory)

  • 短期记忆:当前对话的上下文窗口,由 LLM 的 context 管理。
  • 长期记忆:使用向量数据库(如 Chroma、Pinecone)存储历史交互与知识片段,支持语义检索。
  • 工作记忆:任务执行过程中的中间状态与临时数据。
from typing import List, Dict, Any
from datetime import datetime

class AgentMemory:
    """Agent 记忆系统"""
    
    def __init__(self, max_short_term: int = 10):
        self.short_term: List[Dict] = []  # 短期记忆
        self.long_term: Dict[str, Any] = {}  # 长期记忆(简化版)
        self.working_memory: Dict[str, Any] = {}  # 工作记忆
        self.max_short_term = max_short_term
    
    def add_to_short_term(self, role: str, content: str):
        """添加短期记忆"""
        self.short_term.append({
            "role": role,
            "content": content,
            "timestamp": datetime.now().isoformat()
        })
        # 超出长度时丢弃最早的
        if len(self.short_term) > self.max_short_term:
            self.short_term.pop(0)
    
    def save_to_long_term(self, key: str, value: Any):
        """保存到长期记忆"""
        self.long_term[key] = {
            "value": value,
            "saved_at": datetime.now().isoformat()
        }
    
    def get_context(self) -> str:
        """获取当前对话上下文(供 LLM 使用)"""
        return "\n".join(
            f"{m['role']}: {m['content']}" 
            for m in self.short_term[-5:]  # 最近5轮
        )

3.5 执行层(Execution)

负责实际调用工具、处理返回结果,并将结果反馈给规划层进行下一步决策。执行层需要处理并发、超时、限流等生产环境问题。

import asyncio
from concurrent.futures import ThreadPoolExecutor
import time

class ExecutionEngine:
    """执行引擎:管理工具调用的并发与超时"""
    
    def __init__(self, max_workers: int = 5, default_timeout: int = 30):
        self.executor = ThreadPoolExecutor(max_workers=max_workers)
        self.default_timeout = default_timeout
    
    async def execute_tool(self, tool_func, *args, timeout: int = None, **kwargs):
        """异步执行工具调用,带超时控制"""
        timeout = timeout or self.default_timeout
        loop = asyncio.get_event_loop()
        
        try:
            # 在线程池中执行同步函数
            result = await asyncio.wait_for(
                loop.run_in_executor(self.executor, tool_func, *args, **kwargs),
                timeout=timeout
            )
            return {"status": "success", "data": result}
        except asyncio.TimeoutError:
            return {"status": "timeout", "error": f"工具调用超时 ({timeout}s)"}
        except Exception as e:
            return {"status": "error", "error": str(e)}
    
    async def execute_parallel(self, tasks: List[dict]) -> List[dict]:
        """并行执行多个工具调用"""
        coroutines = [
            self.execute_tool(task["func"], *task.get("args", []), **task.get("kwargs", {}))
            for task in tasks
        ]
        return await asyncio.gather(*coroutines)

4. 快速搭建生产 Agent 的步骤

下面用一张流程图展示从零搭建生产 Agent 的完整路径:

反馈

选择框架

定义角色与目标

配置工具集

配置记忆系统

实现错误处理

封装 API 服务

部署与监控

持续优化

4.1 选择 Agent 框架

推荐以下成熟框架:

框架 特点 适用场景 学习成本
LangChain 生态丰富,社区活跃 通用 Agent 开发 中等
CrewAI 多 Agent 协作 复杂工作流
AutoGen 微软出品,多 Agent 对话 研究原型
Dify 低代码平台 快速验证 极低

4.2 定义 Agent 角色与目标

from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import Tool
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI

# 初始化 LLM
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.2)

# 定义工具
def search_knowledge_base(query: str) -> str:
    """搜索内部知识库"""
    # 实际调用向量数据库
    return f"关于 {query} 的文档摘要"

def execute_python(code: str) -> str:
    """安全执行 Python 代码(沙箱环境)"""
    # 实际项目中应使用沙箱执行
    try:
        # exec(code)  # 生产环境请使用沙箱
        return f"代码执行成功"
    except Exception as e:
        return f"执行错误: {e}"

tools = [
    Tool(
        name="知识库搜索",
        func=search_knowledge_base,
        description="搜索内部知识库,获取产品文档和常见问题"
    ),
    Tool(
        name="代码执行器",
        func=execute_python,
        description="执行 Python 代码,用于数据分析和计算"
    ),
]

# 自定义 Agent Prompt
agent_prompt = PromptTemplate.from_template("""
你是一个专业的 AI 助手。请遵循以下原则:
1. 先理解用户问题,再选择合适的工具
2. 如果工具返回错误,尝试其他方式
3. 每一步都要解释你的思考过程
4. 最终给出清晰、完整的答案

工具列表:
{tools}

工具名称格式:{tool_names}

当前对话历史:
{chat_history}

用户输入:{input}

你的思考过程:
{agent_scratchpad}
""")

# 创建 Agent
agent = create_react_agent(
    llm=llm,
    tools=tools,
    prompt=agent_prompt
)

# 创建执行器
agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True,
    max_iterations=5,  # 最大迭代次数
    early_stopping_method="generate"  # 提前停止策略
)

s,
prompt=agent_prompt
)

executor_with_memory = AgentExecutor(
agent=agent_with_memory,
tools=tools,
memory=memory, # 注入短期记忆
verbose=True,
max_iterations=5
)

### 4.4 实现错误处理与重试机制

```python
from tenacity import retry, stop_after_attempt, wait_exponential

@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10))
def safe_tool_call(tool_func, *args, **kwargs):
    """带重试的工具调用"""
    try:
        return tool_func(*args, **kwargs)
    except Exception as e:
        print(f"工具调用失败: {e}")
        raise

4.5 部署与监控

  • API 封装:使用 FastAPI 将 Agent 包装为 RESTful 服务。
  • 日志记录:记录每次 Agent 的思考链(Chain-of-Thought)与工具调用日志。
  • 性能监控:跟踪响应时间、工具调用成功率、Token 消耗等指标。
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class QueryRequest(BaseModel):
    message: str
    user_id: str

@app.post("/agent/chat")
async def agent_chat(request: QueryRequest):
    # 调用 Agent 并记录日志
    response = agent.invoke({"input": request.message})
    return {"response": response}

5. 生产环境注意事项

5.1 安全性

  • 工具权限最小化:只给 Agent 必要的工具权限。
  • 输入过滤:防止 Prompt 注入攻击。
  • 结果审核:对 Agent 生成的代码或敏感操作进行人工审核。

5.2 性能优化

  • 缓存:对重复查询结果进行缓存。
  • 异步执行:使用异步框架处理并发请求。
  • 模型选择:简单任务用小模型(如 GPT-4o-mini),复杂推理用大模型。

5.3 成本控制

  • Token 预算:设置每次对话的 Token 上限。
  • 工具调用限制:限制单次任务的工具调用次数。
  • 模型降级:当大模型超预算时自动降级到小模型。

6. 实战案例:智能客服 Agent

# 智能客服 Agent 示例
customer_service_agent = create_agent(
    tools=[
        order_query_tool,      # 查询订单
        return_process_tool,   # 退货处理
        knowledge_base_tool,   # 知识库搜索
    ],
    system_prompt="""
    你是一个专业的客服 Agent。请遵循以下原则:
    1. 先理解用户问题,再选择工具
    2. 如果工具返回错误,尝试其他方式
    3. 无法解决时,转接人工客服
    """
)

7. 总结

搭建生产级 AI Agent 需要理解其核心架构(感知-规划-工具-记忆-执行),并关注安全性、性能与成本。通过选择合适的框架、合理配置工具与记忆系统、实现健壮的错误处理,你可以在短时间内构建出可靠的 Agent 应用。

下一步建议:从一个小型场景(如文档问答助手)开始实践,逐步扩展到多 Agent 协作系统。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐