智能体:给大语言模型装上“手脚”,让它学会使用工具

你是否曾对着AI感叹:"你要是能自己上网查资料、算个数学题,该多好!"

过去,LLM(大语言模型)就像一个知识渊博但行动迟缓的学者------能侃侃而谈,却无法动手操作。但今天,这个局面被彻底打破了!智能体(Agent) 技术让LLM不仅会"思考",更能"行动"------调用搜索引擎、运行计算器、查询API......真正成为你的全能助手。

本文将带你深入智能体的核心:ReAct框架,并用LangChain亲手搭建一个能自主搜索、计算价格的智能体。准备好了吗?让我们一起开启AI的新纪元!


一、智能体是什么?为什么需要它?

我们之前构建的LLM应用,无论是简单的提示词链,还是带记忆的聊天机器人,都遵循一个固定流程:用户输入 -> 模型处理 -> 输出。这种模式虽然有效,但模型无法主动采取行动来弥补自身缺陷。

比如,LLM的数学能力一直被人诟病,简单的算术也可能出错。但如果它能调用一个计算器呢?再比如,它的知识截止于训练数据,无法回答实时问题。但如果它能自己上网搜索呢?

智能体正是为了解决这些问题而生。它是一个由LLM驱动的自主系统,能够:

  • 理解用户意图

  • 规划行动步骤

  • 调用外部工具(如搜索引擎、计算器、API)

  • 根据工具反馈调整计划

  • 最终给出答案

如下图所示,智能体的核心在于:LLM不再只是生成文本,而是生成思考、行动指令,并观察结果,形成闭环。


二、ReAct:智能体的"思考-行动"循环

要让LLM自主行动,我们需要一个清晰的决策框架。2022年,Shunyu Yao等人提出了 ReAct(Reasoning + Acting)框架,完美融合了推理与行动。

ReAct的核心是一个三阶段循环(见下图):

  1. 思考(Thought):LLM根据当前情况,思考下一步该做什么。

  2. 行动(Action):LLM输出一个具体的行动指令,比如调用某个工具。

  3. 观察(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

相关推荐
穿过锁扣的风2 小时前
OpenCV 入门实战:图片与视频处理零基础教程
人工智能·opencv·计算机视觉
无心水2 小时前
【OpenClaw:认知启蒙】3、OpenClaw Agent执行循环(Lobster)深度拆解:从意图识别到工具调用的全流程
java·人工智能·系统架构·自动化
Fuxiao___2 小时前
RoboTwin2.0中训练OpenVLA-oft 全流程(bell + alarmclock)
人工智能·python·深度学习
Daydream.V2 小时前
Opencv——轮廓有关操作
人工智能·opencv·计算机视觉
weiyvyy2 小时前
机器人数学基础补充
人工智能·决策树·机器学习·机器人·嵌入式软件开发·机器人嵌入式开发
一知半解仙2 小时前
AI加持下的IDEA让Java开发更高效
java·人工智能·intellij-idea
2401_865854882 小时前
腾讯云龙虾大模型API配置:一键解锁AI算力,赋能业务高效升级
大数据·人工智能·腾讯云
IT_陈寒2 小时前
JavaScript性能翻倍的5个隐藏技巧,90%的开发者都不知道!
前端·人工智能·后端
brooknew2 小时前
Opencv的findcontours函数的大坑
人工智能·opencv·计算机视觉