1. 什么是 Agent
Agent(智能体)是当前人工智能领域最热门的概念之一。简单来说,Agent 是一个能够感知环境、做出决策并执行行动的系统。它不仅仅是简单地回答问题,而是能够自主地规划任务、调用工具、获取反馈,并根据反馈调整自己的行为,最终完成一个相对复杂的目标。
与传统的大语言模型(LLM)不同,传统 LLM 只能根据输入生成文本输出,而 Agent 则在此基础上增加了行动能力。它可以通过调用外部工具(如搜索引擎、代码解释器、数据库、API 等)来获取信息、执行操作,从而真正地“做事”,而不只是“说话”。
一个典型的 Agent 通常包含以下核心组件:
- 大脑(LLM):负责理解任务、进行推理、制定计划和生成决策。
- 规划(Planning):将复杂任务拆解为多个子步骤,并确定执行顺序。
- 记忆(Memory):保存对话历史、中间结果和长期知识,帮助 Agent 保持上下文一致性。
- 工具(Tools):Agent 可以调用的外部函数或 API,如搜索、计算、代码执行等。
- 行动(Action):根据决策调用相应的工具,并处理工具返回的结果。
下面这张图展示了 Agent 的基本工作流程:
flowchart TD A[用户输入任务] --> B[LLM 理解与规划] B --> C[拆解子任务] C --> D[调用工具执行] D --> E[获取工具结果] E --> F{任务是否完成} F -->|否| B F -->|是| G[输出最终结果]2. Agent 的核心原理
要深入理解 Agent,需要掌握几个关键原理:ReAct 模式、工具调用和记忆机制。
2.1 ReAct 模式
ReAct(Reasoning + Acting)是 Agent 最核心的工作模式。它让 LLM 在推理(Reasoning)和行动(Acting)之间交替进行:先思考当前状态,再决定采取什么行动,观察行动结果后继续思考,如此循环直到任务完成。
ReAct 的循环过程可以概括为:
- Thought(思考):分析当前问题,决定下一步该做什么。
- Action(行动):选择一个工具并传入参数。
- Observation(观察):获取工具返回的结果。
- 重复以上步骤,直到得出最终答案。
2.2 工具调用(Function Calling)
工具调用是 Agent 与外部世界交互的桥梁。LLM 本身不具备执行能力,但它可以生成结构化的调用指令,指定要调用的函数名和参数。外部系统解析这些指令后执行相应的函数,并把结果返回给 LLM。
例如,当用户问“北京现在天气怎么样”时,Agent 会生成一个调用天气 API 的指令,获取数据后再组织成自然语言回答。
2.3 记忆机制
Agent 的记忆分为短期记忆和长期记忆:
- 短期记忆:当前对话的上下文,通常通过把历史消息拼接到 Prompt 中实现。
- 长期记忆:跨会话的知识,通常存储在向量数据库中,通过语义检索获取相关片段。
3. 代码实战:用 Python 从零实现一个 Agent
下面我们通过一个完整的 Python 示例,从零实现一个简单的 Agent。这个 Agent 能够调用两个工具:计算器和当前时间查询,并通过 ReAct 模式自主完成任务。
3.1 环境准备
首先安装必要的依赖库:
pip install openai然后导入相关模块并配置 API Key:
import json import datetime from openai import OpenAI 请替换为你的真实 API Key client = OpenAI(api_key="your-api-key")3.2 定义工具函数
我们定义两个简单的工具函数:一个用于数学计算,一个用于获取当前时间。
def calculator(expression: str) -> str: """计算数学表达式的结果""" try: # 注意:实际项目中应使用更安全的计算方式 result = eval(expression) return str(result) except Exception as e: return f"计算错误: {str(e)}" def get_current_time() -> str: """获取当前日期和时间""" now = datetime.datetime.now() return now.strftime("%Y-%m-%d %H:%M:%S") 工具注册表:Agent 可用的工具列表 TOOLS = { "calculator": { "description": "计算数学表达式,例如 '2 + 3 * 4'", "function": calculator, "parameters": { "type": "object", "properties": { "expression": { "type": "string", "description": "要计算的数学表达式" } }, "required": ["expression"] } }, "get_current_time": { "description": "获取当前的日期和时间", "function": get_current_time, "parameters": { "type": "object", "properties": {} } } }3.3 构建 Agent 核心循环
接下来实现 Agent 的核心循环。我们使用 OpenAI 的 Function Calling 能力,让模型自主决定是否调用工具以及调用哪个工具。
class SimpleAgent: def __init__(self, model="gpt-4o-mini", max_steps=5): self.model = model self.max_steps = max_steps self.messages = [] self.tools = [ { "type": "function", "function": { "name": name, "description": info["description"], "parameters": info["parameters"] } } for name, info in TOOLS.items() ] def run(self, user_input: str) -> str: """运行 Agent,处理用户输入并返回最终结果""" self.messages.append({"role": "user", "content": user_input}) for step in range(self.max_steps): print(f"\n--- 第 {step + 1} 步 ---") # 调用 LLM response = client.chat.completions.create( model=self.model, messages=self.messages, tools=self.tools, tool_choice="auto" ) message = response.choices[0].message self.messages.append(message) 如果模型没有要求调用工具,说明已经得到最终答案 if not message.tool_calls: print(f"最终回答: {message.content}") return message.content 处理工具调用 for tool_call in message.tool_calls: function_name = tool_call.function.name arguments = json.loads(tool_call.function.arguments) print(f"调用工具: {function_name}, 参数: {arguments}") # 执行工具函数 if function_name in TOOLS: result = TOOLS[function_name]["function"](**arguments) else: result = f"未知工具: {function_name}" print(f"工具返回: {result}") # 把工具结果加入消息列表 self.messages.append({ "role": "tool", "tool_call_id": tool_call.id, "content": result }) return "已达到最大步数,任务未完成。" 使用示例 agent = SimpleAgent() result = agent.run("帮我计算 (15 + 27) * 3 的结果,然后告诉我现在的日期和时间")3.4 运行结果分析
运行上述代码,你会看到 Agent 的完整推理和行动过程。它可能会这样工作:
--- 第 1 步 --- 调用工具: calculator, 参数: {'expression': '(15 + 27) * 3'} 工具返回: 126 --- 第 2 步 --- 调用工具: get_current_time, 参数: {} 工具返回: 2026-08-09 16:34:22 --- 第 3 步 --- 最终回答: 计算结果是 126。当前日期和时间是 2026-08-09 16:34:22。可以看到,Agent 自主地完成了任务拆解、工具调用和结果汇总,这正是 Agent 的核心价值所在。
4. 实战进阶:使用 LangChain 构建 Agent
在实际项目中,我们通常使用成熟的框架来构建 Agent,其中最流行的是LangChain。LangChain 提供了丰富的工具集成和 Agent 实现,大大降低了开发门槛。
4.1 安装 LangChain
pip install langchain langchain-openai4.2 使用 LangChain 创建 Agent
from langchain.agents import create_tool_calling_agent, AgentExecutor from langchain.tools import tool from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate @tool def add(a: int, b: int) -> int: """计算两个整数的和""" return a + b @tool def multiply(a: int, b: int) -> int: """计算两个整数的乘积""" return a * b 初始化 LLM llm = ChatOpenAI(model="gpt-4o-mini", api_key="your-api-key") 创建 Prompt prompt = ChatPromptTemplate.from_messages([ ("system", "你是一个乐于助人的 AI 助手,可以调用工具来解决问题。"), ("human", "{input}"), ("placeholder", "{agent_scratchpad}") ]) 创建 Agent tools = [add, multiply] agent = create_tool_calling_agent(llm, tools, prompt) agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) 运行 Agent result = agent_executor.invoke({"input": "请计算 23 乘以 4 的结果,然后加上 15"}) print(result["output"])LangChain 封装了 ReAct 循环、工具调用解析和消息管理等复杂逻辑,让我们可以专注于业务逻辑本身。
5. Agent 的典型应用场景
Agent 的应用场景非常广泛,以下是几个典型的例子:
- 智能客服:自动理解用户问题,查询订单、退换货、解答常见问题。
- 代码助手:根据需求自动编写代码、运行测试、修复 Bug。
- 数据分析:自动查询数据库、生成报表、发现数据规律。
- 自动化办公:自动整理邮件、安排日程、生成会议纪要。
- 研究助手:自动搜索文献、总结要点、生成综述报告。
6. 总结与展望
Agent 是 AI 从“对话工具”走向“行动助手”的关键一步。通过本文的学习,我们掌握了:
- Agent 的基本概念和核心组件:大脑、规划、记忆、工具和行动。
- ReAct 模式的工作原理:思考、行动、观察的循环。
- 如何用 Python 从零实现一个简单的 Agent。
- 如何使用 LangChain 框架快速构建生产级 Agent。
未来,随着多模态模型、更强的推理能力和更丰富的工具生态的发展,Agent 将能够处理越来越复杂的任务,成为我们工作和生活中不可或缺的智能伙伴。建议读者在此基础上,进一步探索多 Agent 协作、Agent 记忆持久化、以及 Agent 安全等进阶主题。