一、先给 Agent 下一个定义

Agent = LLM(大语言模型)+ 工具(Tools)+ 记忆(Memory)+ 规划(Planning)

简单说,Agent 就是一个能自主感知环境、做出决策、执行行动的智能体。传统 LLM 只能"回答问题",而 Agent 能"完成任务"。

两者的核心区别:

传统 LLMAgent
输入单次 prompt目标 + 环境反馈
输出一段文本一系列行动 + 最终结果
能力边界模型知识截止日期可调用工具获取实时信息
交互方式一问一答多轮自主循环

二、Agent 的核心架构

2.1 四大组件

┌─────────────────────────────────────┐
│              Agent                   │
│  ┌──────┐  ┌──────┐  ┌───────────┐  │
│  │ 记忆  │  │ 规划  │  │  工具调用  │  │
│  │Memory │  │Plan  │  │ Tool Use  │  │
│  └──┬───┘  └──┬───┘  └─────┬─────┘  │
│     │         │             │        │
│     └─────────┼─────────────┘        │
│               ▼                      │
│          ┌─────────┐                 │
│          │   LLM   │                 │
│          └─────────┘                 │
└─────────────────────────────────────┘
(1)LLM —— 大脑

负责理解任务、分解目标、推理决策。Agent 的智能上限取决于底层模型的能力。

(2)Tools —— 手脚

让 Agent 能执行 LLM 本身做不了的事:

  • 搜索工具(Google Search、Wikipedia)—— 获取实时信息

  • 代码执行器(Python Interpreter)—— 计算、数据分析

  • API 调用(数据库查询、发送邮件、操作文件)

  • 多模态工具(图片生成、语音合成)

(3)Memory —— 记忆
类型说明举例
短期记忆当前对话上下文用户刚才说了什么
长期记忆持久化存储的信息用户偏好、历史任务
工作记忆当前任务中间结果上一步工具调用的返回值
(4)Planning —— 规划

让 Agent 不仅"反应",还能"谋划":

  • 任务分解:把复杂目标拆成可执行的子任务

  • 反思与修正:根据中间结果调整后续计划

  • 多路径探索:生成多个方案并行评估


三、Agent 的工作流模式

这是面试高频考点,务必掌握。

3.1 ReAct(Reasoning + Acting)

最经典的 Agent 模式,交替进行思考(Thought)→ 行动(Action)→ 观察(Observation)

用户: 帮我查一下今天北京的天气,然后决定穿什么
​
Thought: 我需要先获取北京今天的天气
Action: search_weather("北京", "2026-06-15")
Observation: 北京今天晴,15°C ~ 28°C
​
Thought: 晴天气温适中,建议穿薄外套或长袖T恤
Action: Finish[建议穿薄外套,早晚偏凉可带一件风衣]

核心思想:让 LLM 在每一步都输出思考过程,显式推理下一步该做什么。

3.2 Plan-and-Execute

先做全局规划,再逐步执行:

用户: 帮我做一个竞品分析报告
​
Plan:
  1. 搜索竞品列表
  2. 逐一收集竞品信息
  3. 对比分析各维度
  4. 生成 PDF 报告
​
Execute: Step 1 → Step 2 → Step 3 → Step 4
每步执行后可调整后续计划。

3.3 Multi-Agent(多智能体协作)

多个 Agent 各自扮演不同角色,协作完成复杂任务:

Manager Agent: "写一份新产品发布方案"
  ├── Research Agent: 搜索市场数据
  ├── Writer Agent: 撰写文案
  └── Reviewer Agent: 审核修改

3.4 Function Calling vs Agent 的关系

很多面试官会问:Function Calling 是不是就是 Agent?

不是。 Function Calling 是 Agent 的工具调用机制,是 Agent 的"手"。真正的 Agent 还需要记忆管理和自主规划能力。可以说 FC 是实现 Agent 的关键技术,但不是 Agent 的全部。


四、动手实现一个简易 Agent(Python)

理论讲完,上代码。以下是一个基于 ReAct 模式的极简 Agent 实现:

import json
import re
​
class SimpleAgent:
    def __init__(self, llm, tools):
        self.llm = llm          # 大模型接口
        self.tools = tools      # 工具字典 {name: func}
        self.memory = []        # 对话记忆
​
    def run(self, task):
        """执行任务的主循环"""
        prompt = self._build_prompt(task)
​
        for _ in range(10):  # 防止无限循环,最多10轮
            response = self.llm(prompt)
​
            # 解析 LLM 输出,提取 Action
            action, action_input = self._parse_action(response)
​
            if action == "Finish":
                return action_input
​
            # 执行工具调用
            tool = self.tools.get(action)
            if tool:
                observation = tool(action_input)
                prompt += f"\nObservation: {observation}\n"
                self.memory.append((action, action_input, observation))
            else:
                prompt += f"\n错误: 工具 '{action}' 不存在\n"
​
        return "任务超出轮次限制"
​
    def _build_prompt(self, task):
        """构造 ReAct 格式的 prompt"""
        tools_desc = "\n".join(
            f"- {name}: {func.__doc__}" for name, func in self.tools.items()
        )
        return f"""你是一个智能助手,可以使用工具完成任务。
​
可用工具:
{tools_desc}
​
请按以下格式响应:
Thought: 你的思考过程
Action: 工具名称
Action Input: 工具输入
...(可重复多轮)
Thought: 我现在知道最终答案了
Action: Finish
Action Input: 最终答案
​
任务: {task}
"""
​
    def _parse_action(self, text):
        """从 LLM 输出中提取 Action 和 Action Input"""
        action_match = re.search(r"Action:\s*(.+?)\n", text)
        input_match = re.search(r"Action Input:\s*(.+)", text)
​
        action = action_match.group(1).strip() if action_match else "Finish"
        action_input = input_match.group(1).strip() if input_match else text
        return action, action_input
​
​
# ========== 使用示例 ==========
​
def search_weather(city):
    """搜索指定城市的天气信息"""
    return f"{city}今天晴,15°C ~ 28°C,微风"
​
def calculate(expression):
    """执行数学计算,参数为数学表达式"""
    return str(eval(expression))
​
# 模拟 LLM(实际使用时应替换为真实 API 调用)
def mock_llm(prompt):
    """简易模拟 LLM —— 实际项目中替换为 API 调用"""
    if "天气" in prompt and "Observation" not in prompt:
        return """Thought: 我需要查询天气
Action: search_weather
Action Input: 北京
"""
    elif "Observation" in prompt:
        return """Thought: 查询到天气了,可以给出穿衣建议
Action: Finish
Action Input: 今天北京晴天,15~28°C,建议穿薄外套,早晚可加一件风衣。
"""
    return "Thought: 我理解了\nAction: Finish\nAction Input: 任务完成"
​
agent = SimpleAgent(
    llm=mock_llm,
    tools={
        "search_weather": search_weather,
        "calculate": calculate,
    }
)
​
result = agent.run("查一下北京的天气,告诉我穿什么")
print(result)

实际项目中,把 mock_llm 替换为 openai.ChatCompletion.create() 或其他 LLM API 即可。


五、主流 Agent 框架对比

框架特点适用场景
LangChain生态最丰富,组件化设计快速原型、复杂链路
LangGraph有状态图编排,支持循环/分支复杂多步 Agent 流程
AutoGen (微软)多 Agent 对话,角色分工明确协作型任务
CrewAI角色驱动的多 Agent 协作团队模拟
OpenAI Agents SDK原生支持,简洁 API基于 OpenAI 的 Agent
Anthropic Claude APITool Use 原生支持,简洁单 Agent 任务

选型建议:简单任务直接用 LLM 原生 Function Calling;复杂工作流用 LangGraph;多角色协作考虑 AutoGen 或 CrewAI。


六、Agent 当前面临的挑战

面试中如果被问到"Agent 有什么局限性",可以从以下几个角度回答:

6.1 可靠性问题

  • 幻觉:LLM 可能生成错误的工具调用或结论

  • 循环死锁:Agent 可能陷入无限思考-行动的循环

  • 上下文窗口:长任务会导致上下文溢出

6.2 工程化挑战

  • 评估困难:Agent 的输出是非确定性的,难以用传统指标衡量

  • 成本控制:多步推理意味着多次 LLM 调用,Token 消耗大

  • 延迟问题:多轮交互导致响应变慢

6.3 安全与对齐

  • 权限管控:Agent 拥有工具执行权,需要沙箱和权限控制

  • 对抗攻击:Prompt Injection 可能让 Agent 执行恶意指令



七、总结

理解 Agent,抓住一条主线:

LLM 提供智能,Tools 提供能力,Memory 提供连贯性,Planning 提供策略。


本文写于 2026 年 6 月,技术迭代快,建议结合最新的框架文档和论文持续学习。

推荐阅读:

更多推荐