一、什么是Agent?

核心定义:Agent(智能体)是一种能够自主感知环境、进行规划、执行决策并与外部系统交互的AI系统。与传统LLM的"被动问答"不同,Agent具备"主动行动"能力,是LLM能力的放大器

1.1 Agent的定义

Agent是LLM能力的放大器

  • LLM:提供"思考"能力(理解、推理、生成)
  • Agent:提供"行动"能力(规划、执行、交互)
  • 二者结合:构建真正有用的AI应用

1.2 Agent在AI生态中的位置

AI应用层:ChatBot | Agent系统 | RAG系统 | Agent Swarm
                    ↓
           大语言模型 (LLM)
                    ↓
        基础设施层 (GPU/向量数据库/云计算)

1.3 Agent vs 传统AI应用

特性 纯LLM Agent
交互方式 被动问答 主动执行
任务范围 单轮对话 多步任务
外部集成 有限 丰富
自主性
容错能力 有(重试/回退)
典型场景 问答/写作 自动化任务/研究助手

典型应用场景:🔍 研究助手、💻 代码助手、📊 数据分析助手、🌐 自动化办公


二、Agent核心架构

下图展示了一个完整Agent系统的核心架构,包含用户交互层、核心处理层、LLM推理层和工具生态。

🔧 工具生态

💾 记忆系统

🧠 LLM推理层

⚙️ 核心处理层

👤 用户交互层

① 输入

② 查询

③ 推理请求

④ 工具调用

⑤ 执行结果

⑤ 执行结果

⑤ 执行结果

⑤ 执行结果

⑥ 结果汇总

⑦ 生成响应

⑧ 更新记忆

用户请求

返回结果

感知模块
意图识别

规划模块
ReAct/CoT

执行模块
任务调度

Prompt
构建器

LLM
推理引擎

Function
Calling

工作记忆
当前上下文

短期记忆
会话历史

长期记忆
向量数据库

内置工具
计算器/搜索

外部API
HTTP/GraphQL

代码执行
Sandbox

自定义插件
业务逻辑

▲ Agent系统架构图

2.1 架构组件说明

层级 组件 核心职责
用户交互层 用户输入/Agent响应 意图识别、实体提取、任务分解
核心处理层 感知模块 理解用户意图、提取上下文
规划模块 制定执行计划(ReAct/CoT/Plan)
工具调用 选择合适的工具执行
执行模块 运行工具、收集结果
LLM推理层 LLM Core 理解、推理、生成
Prompt Engine 构建完整上下文
Context Manager 管理对话历史/Token限制
工具生态 内置工具 Calculator、Search等
外部API REST/GraphQL集成
自定义插件 业务逻辑扩展
代码执行 Code Interpreter
数据库查询 DB Query

2.2 数据流转过程

Agent的核心工作流:感知 → 规划 → 执行 → 反馈

1. 用户输入 → 感知模块(解析意图)
         ↓
2. 查询记忆系统(工作记忆 → 短期记忆 → 长期记忆)
         ↓
3. LLM推理(构建Prompt → Function Calling → 流式输出)
         ↓
4. 工具调用(内置工具/外部API/自定义插件)
         ↓
5. 结果反馈 → LLM总结 → 返回用户
         ↓
6. 更新记忆 → 完成闭环

三、Agent与LLM的调用关系

3.1 调用模式对比

模式 适用场景 特点
单次调用 简单一次性任务 快速响应,无需上下文
多轮调用 复杂多步骤任务 支持工具调用、迭代推理

3.2 关键技术点

Function Calling机制是Agent与外部工具交互的核心:

# 工具定义示例(OpenAI格式)
CALCULATOR_TOOL = {
    "name": "calculate",
    "description": "执行数学计算",
    "parameters": {
        "type": "object",
        "properties": {
            "expression": {"type": "string", "description": "数学表达式"}
        },
        "required": ["expression"]
    }
}

核心要点

  • 工具定义需包含namedescriptionparameters三要素
  • 通过tool_calls机制实现LLM与工具的解耦
  • 支持多工具并行调用

3.3 上下文管理策略

class ContextManager:
    def __init__(self, max_tokens: int = 128000):
        self.max_tokens = max_tokens
        self.messages = []

    def trim_if_needed(self):
        """超出上下文窗口时自动裁剪"""
        while self.get_total_tokens() > self.max_tokens:
            if len(self.messages) <= 2:
                break
            self.messages.pop(1)  # 移除最早的非system消息

四、Agent开发注意事项

开发Agent系统时,需要从设计层面工程层面性能层面三个维度综合考虑。

4.1 设计层面要点

  • 任务拆解:将复杂任务分解为可独立执行的原子子任务
  • 规划能力:根据任务特点选择合适的规划策略(ReAct/Plan-and-Execute)
  • 记忆设计:采用三层记忆架构(工作记忆→短期记忆→长期记忆)
  • 工具抽象:统一的工具注册和调用机制

4.2 工程层面要点

  • 错误处理:完善的try-catch + 重试机制
  • 超时控制:设置任务最大执行时间,防止无限循环
  • 日志可观测:结构化日志 + 链路追踪
  • 安全隔离:敏感操作授权验证 + 沙箱执行
# 错误恢复策略
ERROR_STRATEGIES = {
    "rate_limit": "等待后重试",
    "timeout": "使用部分结果或询问用户",
    "invalid_input": "澄清用户意图",
    "tool_not_found": "回退到默认方案"
}

4.3 性能层面要点

  • 并发控制:使用Semaphore限制并发数
  • 缓存策略:语义缓存减少重复调用
  • 成本优化:简单任务用小模型,复杂任务用大模型
任务复杂度 推荐模型 成本
简单 gpt-3.5-turbo
中等 gpt-4-turbo
复杂 gpt-4

五、关键功能模块

5.1 规划模块对比

策略 原理 适用场景 优势 劣势
ReAct Thought→Action→Observation循环 动态环境、交互式任务 灵活、实时调整 可能陷入局部最优
Plan-and-Execute 先规划后执行 复杂长任务 全局视野、便于审核 计划可能过时
Chain of Thought 显式推理过程 逻辑推理任务 可解释性强 延迟较高

ReAct核心流程

Thought: 分析当前情况
Action: 选择工具X执行
Observation: 获取结果
→ 循环直到任务完成

5.2 记忆模块设计

三层记忆架构

层级 存储内容 特点
工作记忆 当前任务上下文 完全访问、低延迟、易失
短期记忆 近期交互历史 TTL过期、语义压缩
长期记忆 结构化知识 向量索引+知识图谱、持久化

5.3 工具模块设计

class ToolRegistry:
    def register(self, name: str, func: callable, schema: dict):
        """统一工具注册"""
        self._tools[name] = Tool(name, func, schema)

    def get_schema(self) -> List[dict]:
        """生成OpenAI格式的工具定义"""
        return [{"type": "function", "function": t.to_openai_format()}
                for t in self._tools.values()]

六、代码示例

精简版Agent核心流程(20行以内):

class SimpleAgent:
    def __init__(self, llm, tools: dict):
        self.llm = llm
        self.tools = tools
        self.memory = []

    async def run(self, task: str) -> str:
        # 1. 添加到记忆
        self.memory.append({"role": "user", "content": task})

        # 2. LLM推理循环
        for _ in range(10):
            response = await self.llm.chat(self.memory, tools=self.tools)

            if tool_calls := response.get("tool_calls"):
                # 3. 执行工具
                for call in tool_calls:
                    result = await self.tools[call["name"]](**call["args"])
                    self.memory.append({"role": "tool", "content": result})
            else:
                # 4. 返回结果
                return response["content"]
        return "任务超时"

七、总结

Agent是LLM从"思考"到"行动"的关键跨越

核心要点回顾

模块 关键点
架构设计 分层解耦:感知→规划→执行→反馈
LLM调用 合理选择单轮/多轮,注意上下文窗口管理
规划策略 ReAct适合动态环境,Plan-and-Execute适合复杂长任务
记忆系统 三层架构:工作记忆→短期记忆→长期记忆
工具系统 良好的工具定义、错误处理、超时控制
Logo

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

更多推荐