如果说大模型(LLM)是大脑,RAG是记忆,MCP是工具箱,那么Agent就是让这三者协同起来、真正去"做事"的执行力系统。本文把AI Agent从概念到代码彻底讲清楚。


一、为什么需要Agent?

ChatGPT、Claude这类大模型非常聪明,但有一个根本限制:它们只会"说",不会"做"

你问它"北京今天天气怎么样",它只能根据训练数据给出一个大概回答,无法真正查询实时天气。你让它"帮我写一个Flask项目并跑起来",它只能生成代码片段,无法帮你创建文件、安装依赖、运行服务、调试错误。

Agent(智能体)要解决的问题就是:让AI具备观察环境、制定计划、调用工具、执行动作、反思结果并持续迭代的能力

一句话总结:

LLM负责思考,Agent负责行动。


二、什么是AI Agent?

AI Agent是一个以大模型为核心控制器,能够自主感知环境、进行推理决策、调用外部工具并执行任务的系统。

一个最小可用的Agent通常包含四个核心组件:

组件 作用 类比
规划(Planning) 把复杂任务拆解成可执行的子步骤 项目经理
记忆(Memory) 保存短期上下文和长期知识 笔记本+知识库
工具(Tools) 调用外部API、数据库、代码执行等能力 手和工具箱
行动(Action) 真正执行操作并反馈结果 执行者

这四个组件协同工作,形成"观察→思考→行动→反馈"的循环。


三、Agent vs LLM vs RAG vs MCP:别再混淆了

这几个概念经常一起出现,但定位完全不同。

概念 本质 解决什么问题
LLM 通用语言模型 理解、生成、推理自然语言
RAG 检索增强生成技术 让LLM能引用私有/实时知识
MCP 工具连接协议 统一Agent与外部系统的接口标准
Agent 任务执行系统 让AI能自主规划、调用工具、完成目标

关系可以这样理解:

  • LLM是Agent的"大脑",负责思考。
  • RAG是Agent的"长期记忆",提供背景知识。
  • MCP是Agent的"万能插头",让它能连接各种工具。
  • Agent是把这些整合起来、真正干活的"人"。

四、Agent的核心工作原理:ReAct范式

当前最流行的Agent设计模式是ReAct(Reasoning + Acting),即"推理+行动"。

它的基本流程是:

任务输入 → 思考(Thought) → 行动(Action) → 观察(Observation) → 思考(Thought) → ... → 完成

举个简单例子:

任务:帮我查一下北京明天会不会下雨,如果下雨就提醒我带伞。

Agent的思考过程可能是:

  1. Thought: 用户想知道北京明天天气,我需要调用天气API查询。
  2. Action: 调用get_weather("北京", "明天")
  3. Observation: 返回结果——明天北京有雨,气温22-28度。
  4. Thought: 明天有雨,按用户要求需要提醒带伞。
  5. Final Answer: 明天北京有雨,记得带伞。

这个循环可以无限进行,直到任务完成或达到最大步数。


五、动手实现一个最小Agent

下面用一个纯Python示例展示Agent的核心逻辑。假设我们有两个工具:搜索和计算器。

import json
import re

def search(query: str) -> str:
    """模拟搜索工具"""
    facts = {
        "北京人口": "北京常住人口约2180万",
        "Python创始人": "Python由Guido van Rossum于1991年创建"
    }
    return facts.get(query, f"未找到关于'{query}'的信息")

def calculator(expr: str) -> str:
    """安全计算器工具"""
    try:
        # 只允许数字和运算符,避免代码注入
        if not re.match(r'^[\d\+\-\*\/\.\(\)\s]+$', expr):
            return "表达式不合法"
        return str(eval(expr))
    except Exception as e:
        return f"计算错误: {e}"

# 工具注册表
TOOLS = {
    "search": search,
    "calculator": calculator
}

# 工具描述,告诉LLM每个工具能做什么
TOOL_DESCRIPTIONS = """
可用工具:
1. search(query: str) - 搜索事实信息,返回简短文本
2. calculator(expr: str) - 计算数学表达式,如"2+3*4"

调用格式必须严格如下:
Action: <工具名>
Action Input: <参数>
"""

class SimpleAgent:
    def __init__(self, llm_call, max_steps=5):
        self.llm_call = llm_call  # 模拟LLM调用
        self.max_steps = max_steps

    def run(self, task: str) -> str:
        history = f"任务:{task}\n"
        for step in range(self.max_steps):
            prompt = history + "\n请思考下一步。如果需要工具,按格式输出Action和Action Input。如果已完成,直接输出Final Answer:" + TOOL_DESCRIPTIONS
            response = self.llm_call(prompt)
            history += f"\n{response}"

            # 解析Action
            action_match = re.search(r'Action:\s*(\w+)\s*Action Input:\s*(.+)', response, re.DOTALL)
            if action_match:
                tool_name = action_match.group(1).strip()
                tool_input = action_match.group(2).strip()
                if tool_name in TOOLS:
                    result = TOOLS[tool_name](tool_input)
                    history += f"\nObservation: {result}"
                else:
                    history += f"\nObservation: 工具{tool_name}不存在"
            else:
                # 没有Action,认为已完成
                return response

        return history + "\n达到最大步数,任务未完成"

# 模拟LLM(实际用OpenAI/Claude等API)
def mock_llm(prompt):
    # 简单规则:根据prompt内容返回Action或Final Answer
    if "北京人口" in prompt and "Observation" not in prompt:
        return "Thought: 需要查询北京人口。\nAction: search\nAction Input: 北京人口"
    elif "Observation" in prompt:
        return "Final Answer: 北京常住人口约2180万。"
    return "Final Answer: 我无法回答。"

agent = SimpleAgent(mock_llm)
print(agent.run("北京有多少常住人口?"))

运行结果:

北京常住人口约2180万。

这个例子展示了Agent最核心的模式:

  1. LLM根据任务决定下一步动作。
  2. 如果涉及外部信息,调用对应工具。
  3. 观察工具返回,继续推理或直接给出最终答案。

六、Agent的Memory:短期记忆与长期记忆

Memory是Agent能够持续完成任务、而不是一次性问答的关键。

1. 短期记忆(Short-term Memory)

通常就是对话历史。Agent把用户输入、自己的思考、工具返回结果都保留在上下文窗口里,供后续推理使用。

messages = [
    {"role": "system", "content": "你是一个能调用工具的AI助手。"},
    {"role": "user", "content": "帮我查下上海天气,然后推荐一个适合的地方去玩"},
    {"role": "assistant", "content": "Action: weather_api\nAction Input: 上海"},
    {"role": "tool", "content": "上海明天晴,25-32度"},
    # ...
]

2. 长期记忆(Long-term Memory)

包括用户画像、偏好、历史任务结果、领域知识库等。常见实现方式:

  • 向量数据库 + Embedding:把知识向量化存储,检索时语义匹配。
  • 传统数据库/文件系统:结构化存储用户配置、历史记录。
  • RAG系统:作为Agent记忆的一部分,在需要时检索补充。

七、Agent的Planning:从单步到多步任务

复杂任务需要拆解。Planning模块让Agent把目标变成可执行的计划。

常见规划策略

策略 说明 适用场景
Zero-shot ReAct 直接让LLM边思考边行动 简单任务
Plan-and-Execute 先制定完整计划,再执行 复杂多步骤任务
Tree of Thoughts 生成多个候选路径,评估最优 需要探索的问题
Reflection 执行后自我反思,修正错误 容易出错的任务

Plan-and-Execute示例

# 第一步:制定计划
plan = llm("请把以下任务拆解为3-5个步骤:\n任务:帮我用Python写一个爬取CSDN热榜的脚本并运行")
# 输出:
# 1. 分析CSDN热榜页面结构
# 2. 编写requests+BeautifulSoup爬虫代码
# 3. 保存为.py文件
# 4. 安装依赖并运行脚本
# 5. 检查输出结果

# 第二步:逐个执行每个步骤
for step in plan:
    result = agent.execute(step)
    if result.failed:
        plan = replan(step, result.error)

八、Multi-Agent:多个Agent协作

当任务足够复杂时,一个Agent可能不够。Multi-Agent系统把不同能力分配给不同Agent,由它们协作完成。

典型角色分工:

  • Planner Agent:负责任务拆解和调度。
  • Coder Agent:负责写代码。
  • Reviewer Agent:负责代码审查和测试。
  • Tool Agent:负责调用外部API和工具。

开源框架如AutoGenCrewAILangGraph都支持这种多Agent协作模式。


九、AI Coding场景下的Agent应用

Agent在AI Coding领域有巨大价值。下面是几个典型应用。

1. 自动化编程助手

Agent可以:

  • 读取项目代码和文档
  • 理解需求并生成代码
  • 运行测试和修复错误
  • 循环迭代直到任务完成

代表工具:Devin、OpenAI Codex CLI、WorkBuddy的Agent模式等。

2. 智能运维Agent

  • 监控日志和告警
  • 自动排查故障根因
  • 调用脚本或API修复问题
  • 把处理结果写入工单

3. 代码审查Agent

  • 读取PR代码变更
  • 检查代码规范、安全漏洞、性能问题
  • 给出修改建议或自动修复

4. 文档和测试生成Agent

  • 分析代码结构和注释
  • 自动生成API文档
  • 根据函数签名生成单元测试

十、Agent开发框架推荐

框架 特点 适用场景
LangChain 生态最丰富,工具链完整 快速原型和通用Agent
LangGraph 支持复杂状态机和多Agent 需要精确控制流程的项目
AutoGen 微软出品,多Agent对话 多角色协作系统
CrewAI 角色扮演式Agent编排 业务流程自动化
SmolAgents HuggingFace出品,极简 快速搭建简单Agent

十一、Agent设计常见坑与最佳实践

常见坑

  1. 循环调用不收敛:Agent陷入反复调用工具的死循环。需要设置最大步数和终止条件。
  2. 工具描述不清:LLM不知道工具怎么用,导致调用格式错误。
  3. 上下文爆炸:长期运行后消息历史过长,超出模型上下文限制。需要摘要或截断。
  4. 幻觉工具返回:LLM可能编造工具结果,需要严格区分Observation和生成内容。
  5. 安全问题:Agent调用代码执行工具可能带来代码注入风险,必须做好权限隔离。

最佳实践

  1. 工具要少而精:每个工具职责单一,描述清晰。
  2. 输出格式要结构化:用JSON或固定格式方便解析。
  3. 日志要全面:记录每次Thought、Action、Observation,方便调试。
  4. 人工确认关键操作:删除文件、转账、部署生产等操作需要人类确认。
  5. 容错和回退:工具调用失败时,Agent要能重试或换方案。

十二、总结

AI Agent不是单一技术,而是一种让大模型从"会聊天"进化到"能干活"的系统设计思想。

核心要点回顾:

  1. Agent = LLM大脑 + 规划 + 记忆 + 工具 + 行动反馈循环。
  2. ReAct模式是主流:思考→行动→观察→再思考。
  3. RAG和MCP是Agent的重要支撑,但Agent本身解决的是"执行"问题。
  4. 实际开发中要注意工具设计、记忆管理、上下文控制和安全性。
  5. Multi-Agent能处理更复杂的协作任务,是未来的重要方向。

如果你已经掌握了Prompt工程、RAG和MCP,那么下一步最值得深入的就是Agent——它可能是AI Coding时代真正改变工作方式的关键技术。


参考阅读:ReAct论文《ReAct: Synergizing Reasoning and Acting in Language Models》,LangChain/LangGraph官方文档,OpenAI Function Calling文档。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐