摘要: AI Agent正在将我们与人工智能的交互方式推向一个新纪元。它不再是简单的问答机器,而是一个能够自主规划、调用工具并完成复杂任务的“智能助理”。本文将带您深入理解AI Agent的核心三要素——大脑、记忆与工具,并拆解其经典的ReAct思考模式。最后,我们将通过一个激动人心的Python实战,使用LangChain构建一个能同时上网搜索和执行代码的AI Agent。
标签: AI Agent
, 智能体
, LangChain
, AutoGen
, ReAct
, 自主AI
, 工具调用
引言:当AI学会了“自己动手”
在“启智未来”,我们的AI应用已经能做到很多事:写文案、回答知识库问题、在本地运行。但我们有了一个更大胆的想法:我们能创造一个“AI市场分析师”吗?它需要能:
- 自动上网搜索“本季度最新的教育科技行业融资报告”。
- 自动从搜索结果中提取关键数据。
- 自动将数据整理成图表,并撰写分析摘要。
- 最终,自动将报告发送到团队邮箱。
这个需求中的关键词是“自动”。我们需要的不再是一个被动的工具,而是一个能理解目标、拆解任务、使用工具、最终完成目标的自主智能体 (Autonomous Agent)。
Part 1: AI Agent - 从“工具”到“智能实习生”
如果说传统的LLM应用像一个功能强大的“计算器”或“搜索引擎”,你按一个按钮,它给你一个结果。那么AI Agent就像一个聪明的“实习生”。
你不再需要告诉他每一步怎么做(“先打开浏览器,输入网址,然后复制粘贴…”),你只需要告诉他最终目标(“帮我整理一份关于A公司的市场分析报告”)。这位“实习生”会自己去规划步骤、使用他会的所有工具(浏览器、文档软件等),然后把最终的报告交给你。
Agent的核心,就是赋予了LLM“行动”的能力。
Part 2: 解构AI Agent - 打造一个“数字员工”
一个功能完备的AI Agent,通常由三大核心组件构成。
-
大脑 (Brain - The LLM)
这是Agent的思考核心。它负责理解用户的最终目标,生成一个可行的、分步骤的计划,并在遇到问题时进行动态调整。模型的推理能力越强,Agent就越“聪明”。 -
记忆 (Memory)
记忆赋予了Agent上下文感知能力。- 短期记忆: 存储当前的对话历史和任务执行过程,确保Agent知道自己“刚刚做了什么”以及“接下来要做什么”。
- 长期记忆: (更高级的Agent) 可以将关键信息和经验存储起来,用于未来的任务,实现“经验积累”和“成长”。
-
工具 (Tools)
这是Agent的“手和脚”,是它与真实世界交互的桥梁。没有工具,Agent就是一个只能空想的思想家。工具可以是:- 搜索引擎: 获取实时信息。
- 计算器/代码执行器: 进行逻辑和数学运算。
- 数据库/API接口: 读取或写入业务数据。
- 文件系统: 读写本地文件。
- 甚至,另一个AI模型: 调用一个专门的图像生成模型。
Part 3: Agent的思考模式 - ReAct 框架
Agent是如何决定该使用哪个工具的呢?最经典的模式之一是 ReAct (Reasoning and Acting) 框架。
Agent的工作流程是一个循环:
思考 (Thought) -> 行动 (Action) -> 观察 (Observation) -> 再次思考…
Mermaid 图解:ReAct 循环
graph TD
A[用户提出复杂问题] --> B{Agent 大脑 (LLM)};
B -- 1. 思考与规划 --> C["Thought: 我需要先知道X,才能计算Y。<br/>Action: 使用'搜索'工具查找X。"];
C --> D[执行工具: Search(X)];
D -- 2. 工具返回结果 --> E["Observation: 搜索结果是Z。"];
E --> B;
B -- 3. 基于观察再次思考 --> F["Thought: 我已经知道X是Z了,现在我可以用'计算器'来算Y了。<br/>Action: 使用'计算器'工具计算Y(Z)。"];
F --> G[执行工具: Calculator(Y(Z))];
G -- 4. 工具返回最终结果 --> H["Observation: 计算结果是FinalAnswer。"];
H --> B;
B -- 5. 总结并回答 --> I["Thought: 我已经得到了最终答案。<br/>Final Answer: 最终答案是..."];
I --> J[向用户返回最终答案];
这个循环不断重复,直到Agent认为任务已经完成。
class Agent:
def __init__(self):
self.tools = {
'search': GoogleSearchAPI(),
'calculator': WolframAlpha()
}
def run(self, query):
history = []
for _ in range(3): # 最大迭代次数
thought = llm.generate_thought(query, history)
if thought.done:
return thought.answer
tool = self.tools[thought.tool_name]
observation = tool.execute(thought.params)
history.append((thought, observation))
raise MaxIterationError
Part 4: Python 实战 - 构建一个能搜索会计算的LangChain Agent
现在,让我们用 LangChain 来亲手构建一个AI Agent。我们将赋予它两种强大的工具:
- Tavily Search: 一个专为AI Agent优化的搜索引擎。
- Python REPL: 一个可以直接执行Python代码的环境。
1. 环境准备
# 安装必要的库
pip install langchain langchain-openai langchain-community tavily-python
# 你需要一个Tavily API密钥用于搜索
# 前往 https://app.tavily.com/ 注册获取
export TAVILY_API_KEY="..."
# 同样需要OpenAI API密钥
export OPENAI_API_KEY="..."
2. 完整代码示例
这个脚本将创建一个Agent,并向它提出一个需要先上网搜索、再用代码处理结果的复合型问题。
import os
from langchain_openai import ChatOpenAI
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.prompts import ChatPromptTemplate
# --- 1. 初始化模型和工具 ---
# 初始化我们的大脑-LLM
# 我们选用支持工具调用的新版OpenAI模型
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)
# 初始化我们的工具箱
# 工具1: Tavily 搜索引擎
search_tool = TavilySearchResults(max_results=2)
# 工具2: LangChain内置的Python代码执行器,非常强大
from langchain_community.tools import PythonREPLTool
python_tool = PythonREPLTool()
tools = [search_tool, python_tool]
# --- 2. 创建 Agent ---
# a. 定义Agent的系统提示 (System Prompt)
# 这是Agent的核心指令,告诉它它的角色、能力和行为准则
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个强大的AI助手。请尽你所能回答用户的问题。你可以使用你所拥有的工具。"),
("user", "{input}"),
# 'placeholder' 是一个特殊变量,用于存储Agent的思考过程和工具调用历史
("placeholder", "{agent_scratchpad}"),
])
# b. 使用LangChain的便捷函数创建Agent
# 这个Agent使用OpenAI的工具调用功能来决定使用哪个工具
agent = create_tool_calling_agent(llm, tools, prompt)
# c. 创建Agent执行器 (Agent Executor)
# 这是Agent的运行环境,负责驱动ReAct循环
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True # 设置为True可以看到Agent详细的思考过程
)
# --- 3. 让Agent解决一个复杂问题! ---
# 这个问题需要Agent先搜索,再用Python处理字符串
complex_question = (
"用Tavily搜索工具查找OpenAI现任CEO的名字,"
"然后用Python代码计算出他名字的字符数(包括空格),"
"最后告诉我他的名字和名字长度。"
)
print(f"向Agent提出复杂问题: {complex_question}")
response = agent_executor.invoke({"input": complex_question})
print("\\n--- Agent 执行完毕 ---")
print(f"最终答案: {response['output']}")
3. 运行与解读
当你运行这段代码,verbose=True
会让你清晰地看到Agent的整个ReAct思考过程:
- Thought: 它会首先判断需要搜索OpenAI CEO的名字。
- Action: 调用
TavilySearchResults
工具。 - Observation: 看到搜索结果是"Sam Altman"。
- Thought: 接着它会判断需要计算这个名字的长度。
- Action: 调用
PythonREPLTool
工具,执行len("Sam Altman")
。 - Observation: 看到代码执行结果是9。
- Thought: 它判断任务已完成,并总结最终答案。
这就是AI Agent的魔力:将一个复杂的目标,自主地分解为一个个可执行的、基于工具的子任务,并最终达成目标。
结论:Agent - 通往通用人工智能的星辰大海
AI Agent技术仍然在飞速发展,但它已经为我们描绘了一幅激动人心的未来图景:AI不再仅仅是我们的信息获取工具或内容生成器,它将成为我们真正的“数字员工”和“智能伙伴”,与我们并肩协作,解决更复杂、更宏大的问题。
在“启智未来”,我们的“AI市场分析师”项目已经正式启动。这只是一个开始。我们相信,掌握了Agent技术,就掌握了通往通用人工智能未来的船票。