你是否曾对着AI感叹:"你要是能自己上网查资料、算个数学题,该多好!"
过去,LLM(大语言模型)就像一个知识渊博但行动迟缓的学者------能侃侃而谈,却无法动手操作。但今天,这个局面被彻底打破了!智能体(Agent) 技术让LLM不仅会"思考",更能"行动"------调用搜索引擎、运行计算器、查询API......真正成为你的全能助手。
本文将带你深入智能体的核心:ReAct框架,并用LangChain亲手搭建一个能自主搜索、计算价格的智能体。准备好了吗?让我们一起开启AI的新纪元!
一、智能体是什么?为什么需要它?
我们之前构建的LLM应用,无论是简单的提示词链,还是带记忆的聊天机器人,都遵循一个固定流程:用户输入 -> 模型处理 -> 输出。这种模式虽然有效,但模型无法主动采取行动来弥补自身缺陷。
比如,LLM的数学能力一直被人诟病,简单的算术也可能出错。但如果它能调用一个计算器呢?再比如,它的知识截止于训练数据,无法回答实时问题。但如果它能自己上网搜索呢?
智能体正是为了解决这些问题而生。它是一个由LLM驱动的自主系统,能够:
-
理解用户意图
-
规划行动步骤
-
调用外部工具(如搜索引擎、计算器、API)
-
根据工具反馈调整计划
-
最终给出答案
如下图所示,智能体的核心在于:LLM不再只是生成文本,而是生成思考、行动指令,并观察结果,形成闭环。

二、ReAct:智能体的"思考-行动"循环
要让LLM自主行动,我们需要一个清晰的决策框架。2022年,Shunyu Yao等人提出了 ReAct(Reasoning + Acting)框架,完美融合了推理与行动。
ReAct的核心是一个三阶段循环(见下图):

-
思考(Thought):LLM根据当前情况,思考下一步该做什么。
-
行动(Action):LLM输出一个具体的行动指令,比如调用某个工具。
-
观察(Observation):工具执行后返回结果,LLM将其作为新信息。
这个过程可以重复多次,直到模型认为可以给出最终答案。
举个实际例子:查询MacBook Pro价格并换算欧元
假设一位在欧洲的用户想买MacBook Pro,但美国官网标价是美元,他想知道换算成欧元是多少,汇率是0.85。智能体的工作流程如下图所示:

-
第1轮
-
思考:"我需要先查出MacBook Pro的美元价格。"
-
行动:调用搜索引擎,查询"current price of MacBook Pro in USD"。
-
观察:搜索引擎返回"$1299"(或其他实际价格)。
-
-
第2轮
-
思考:"现在我需要将美元换算成欧元,汇率0.85。"
-
行动 :调用计算器,计算
1299 × 0.85。 -
观察:计算器返回"1104.15"。
-
-
最终:模型整合信息,输出"当前MacBook Pro价格约为1104.15欧元。"
你看,整个过程就像人类解决问题一样:先查资料,再计算,最后给出答案。而这一切,都是LLM自主完成的!
三、LangChain中的ReAct实现
理论讲完,我们动手实践。我们将用LangChain框架,基于OpenAI的GPT-3.5构建一个智能体,给它配备两个工具:搜索引擎 (DuckDuckGo)和计算器。
3.1 准备LLM和工具
首先,加载OpenAI模型(注意需要API密钥):
python
import os
from langchain_openai import ChatOpenAI
os.environ["OPENAI_API_KEY"] = "你的密钥"
openai_llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
接着,定义工具。LangChain内置了许多工具,我们这里使用llm-math(计算器)和DuckDuckGo搜索。
python
from langchain.agents import load_tools
from langchain.tools import DuckDuckGoSearchResults, Tool
# 创建搜索工具
search = DuckDuckGoSearchResults()
search_tool = Tool(
name="duckduck",
description="一个网络搜索引擎,用于查询一般信息。",
func=search.run,
)
# 加载计算器工具
tools = load_tools(["llm-math"], llm=openai_llm)
tools.append(search_tool)
3.2 创建ReAct模板
ReAct框架依赖一个特定的提示词模板,它告诉LLM如何思考、行动、观察,以及如何输出最终答案。模板如下:
text
Answer the following questions as best you can. You have access to the following tools:
{tools}
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
Begin!
Question: {input}
Thought:{agent_scratchpad}
注意,{tools}和{tool_names}会被替换为实际工具列表,{agent_scratchpad}用于记录之前的思考-行动历史。
在LangChain中,我们可以用PromptTemplate定义这个模板:
python
from langchain import PromptTemplate
react_template = """...(上面内容)..."""
prompt = PromptTemplate(
template=react_template,
input_variables=["tools", "tool_names", "input", "agent_scratchpad"]
)
3.3 构建智能体执行器
LangChain提供了create_react_agent函数来创建ReAct智能体,并用AgentExecutor来运行它。
python
from langchain.agents import AgentExecutor, create_react_agent
agent = create_react_agent(openai_llm, tools, prompt)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True, # 输出中间步骤,方便调试
handle_parsing_errors=True
)
3.4 运行智能体
现在,让我们用之前的MacBook问题测试一下:
python
result = agent_executor.invoke({
"input": "What is the current price of a MacBook Pro in USD? How much would it cost in EUR if the exchange rate is 0.85 EUR for 1 USD?"
})
print(result["output"])
执行时,设置verbose=True会看到如图7-17所示的中间步骤,例如:
text
> Entering new AgentExecutor chain...
I need to find the current price of a MacBook Pro in USD first before converting it to EUR.
Action: duckduck
Action Input: "current price of MacBook Pro in USD"
Observation: [搜索结果 snippet]
Thought: I have the price $2249.00. Now I need to convert to EUR using the exchange rate.
Action: Calculator
Action Input: $2249.00 * 0.85
Observation: 1911.6499999999999
Thought: I now know the final answer.
Final Answer: The current price of a MacBook Pro in USD is $2249.00. It would cost approximately €1911.65 in EUR.
最终,智能体成功完成了任务!
四、智能体的优势与挑战
通过这个例子,我们看到了智能体的巨大潜力:
-
自主决策:无需人类干预,模型自己规划步骤。
-
工具扩展:可以集成任意工具,如天气API、数据库查询、代码执行器等,能力无限。
-
自我纠错:如果某步工具返回错误,模型可以重新思考,尝试其他方法。
但也要注意,智能体并非万能:
-
可靠性:模型可能错误选择工具,或误解工具输出,导致错误答案。如图7-17所示,实际价格可能与搜索结果有出入,需要人工验证。
-
延迟:多次调用工具和模型会显著增加响应时间。
-
安全风险:自主调用外部工具可能带来安全隐患(如执行恶意代码),需严格限制工具权限。
因此,在生产环境中,我们通常需要加入验证机制,比如要求模型返回信息来源,或对关键步骤进行人工审核。
五、小结:智能体开启LLM应用新篇章
本章我们学习了:
-
智能体的定义:能够自主规划、调用工具、解决问题的LLM系统。
-
ReAct框架:通过"思考-行动-观察"循环实现推理与行动的协同。
-
LangChain实现:用OpenAI模型、搜索引擎和计算器构建了一个真实智能体。
-
应用前景:从问答到自动化工作流,智能体正成为AI落地的核心形态。
智能体的出现,标志着LLM从"聊天机器人"向"数字员工"的跃迁。未来,每个企业都可能拥有自己的智能体集群,自动完成市场调研、数据分析、客户服务等复杂任务。
本文参考:图解大模型:生成式AI原理与实战
书籍pdf免费下载地址:https://pan.baidu.com/s/1mTaUQ5czcfGpBM8KvJuS2g?pwd=un44