智能体:构建LLM系统
#2025/12/31 #ai
前面我们学会了链式架构和记忆机制,但这些系统都是“按剧本演出“——流程固定,不会自己做决定。这一节要教你的智能体(Agent),就是让LLM学会“自己拿主意“!
目录
- 一、什么是智能体?为什么需要它?
- 二、为什么LLM需要工具?
- 三、智能体的核心机制:
ReAct框架 - 四、实战:用LangChain构建智能体
- 五、智能体的强大之处
- 六、注意事项和局限性
- 七、实用场景
- 八、核心要点总结
- 九、下一步
- 核心启示
一、什么是智能体?为什么需要它?
核心概念
智能体 = 能自主决策和行动的LLM系统
对比理解
传统链式架构:
用户问题 → 固定流程1 → 固定流程2 → 固定流程3 → 输出
(像流水线工人,只能按流程操作)
智能体系统:
用户问题 → LLM分析 → 自己决定用什么工具 → 根据结果调整 → 输出
(像有经验的工程师,会根据情况选择工具)
智能体的两大核心组件
| 组件 | 作用 | 类比 |
|---|---|---|
| 工具(Tool) | 让LLM能做原本做不了的事 | 工具箱里的扳手、锤子 |
| 智能体类型 | 决定怎么规划和使用工具 | 工作方法论 |
二、为什么LLM需要工具?
问题:LLM的数学能力很差
# 直接问LLM
问:"47 / 12 × 3.14 等于多少?"
LLM答:"大约是7.34" # ❌ 错误!
# 正确答案应该是:12.2983
原因:
- LLM本质是语言模型,不是计算器
- 复杂计算容易出错
- 无法访问实时信息(如当前天气、最新新闻)
解决方案:给LLM配上“工具“
问:"47 / 12 × 3.14 等于多少?"
LLM思考:"这是数学题,我应该用计算器"
LLM行动:调用计算器工具 → 47 / 12 × 3.14 = 12.2983
LLM回答:"答案是12.2983" ✅ 正确!
关键突破:
- ✅ LLM不仅理解问题
- ✅ 还能自主选择合适的工具
- ✅ 根据工具结果给出答案

图:通过让 LLM 自主选择适用工具,实现更复杂且精确的行为
形象类比
如图所示:
无工具的LLM:
就像只有大脑的人,想得再好也搬不动重物
有工具的智能体:
大脑 + 手(搜索引擎) + 计算器 + 其他工具
= 超级助手!
三、智能体的核心机制:ReAct框架
ReAct是什么?
ReAct = Reasoning(推理)+ Acting(行动)
这是一个让 LLM 能够“边思考边行动“的框架。
ReAct的三步循环
智能体工作时会不断重复这三个步骤:
| 步骤 | 英文 | 做什么 | 类比 |
|---|---|---|---|
| 1 | Thought(思考) | LLM分析当前情况,决定下一步做什么 | 工程师看问题 |
| 2 | Action(行动) | 调用某个工具(如搜索、计算器) | 拿起扳手 |
| 3 | Observation(观察) | 记录工具返回的结果 | 看工作效果 |
核心:思考→行动→观察→再思考…循环往复,直到解决问题!

图:ReAct 提示词模板示例
工作流程图解
如图所示:
用户输入:"MacBook Pro多少钱?换算成欧元是多少?"
↓
[思考]我需要先搜索价格
↓
[行动]调用搜索引擎 → 搜索"MacBook Pro price"
↓
[观察]结果:$1299
↓
[思考]现在我需要换算成欧元,得用计算器
↓
[行动]调用计算器 → 1299 × 0.85
↓
[观察]结果:1104.15
↓
[思考]我已经有了所有信息,可以回答了
↓
[最终输出]"MacBook Pro价格$1299,约€1104.15"

图:ReAct 处理流程中的两轮迭代演示
四、实战:用LangChain构建智能体
注意:这个例子需要更强大的模型
前面用的
Phi-3模型太小,跑不了智能体,所以我们用OpenAI的GPT-3.5:
在本书中文版出版之际,Qwen2.5-7B和Llama 3.1 8B等中小规模的模型已具备运行此示例的能力
import os
from langchain_openai import ChatOpenAI
os.environ["OPENAI_API_KEY"] = "你的密钥"
openai_llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
为什么需要更强的模型?
- 智能体需要理解复杂的指令
- 需要准确判断何时使用哪个工具
- 需要处理多步骤的推理过程
步骤1:定义ReAct模板
react_template = """回答下面的问题,你可以使用这些工具:
{tools}
请按照以下格式:
Question(问题): 需要回答的问题
Thought(思考): 我应该怎么做
Action(行动): 使用的工具,应该是 [{tool_names}] 之一
Action Input(行动输入): 传给工具的参数
Observation(观察): 工具返回的结果
... (这个思考/行动/观察过程可以重复N次)
Thought(思考): 我现在知道最终答案了
Final Answer(最终答案): 原问题的答案
开始!
Question: {input}
Thought:"""
模板的作用:
- 教会LLM如何使用工具
- 规定了
思考-行动-观察的格式 - LLM会按这个格式自动工作
步骤2:准备工具 → 工具箱
from langchain.agents import load_tools, Tool
from langchain.tools import DuckDuckGoSearchResults
# 1. 搜索引擎工具
search = DuckDuckGoSearchResults()
search_tool = Tool(
name="duckduck",
description="搜索引擎,用于查找网上的信息",
func=search.run,
)
# 2. 数学计算工具
math_tool = load_tools(["llm-math"], llm=openai_llm)
# 组装工具箱
tools = math_tool + [search_tool]
工具箱里有什么?
- 🔍 DuckDuckGo搜索引擎(查信息)
- 🧮 计算器(算数学)
步骤3:创建智能体
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
)
步骤4:测试智能体
agent_executor.invoke({
"input": "MacBook Pro现在多少钱?如果汇率是0.85欧元兑1美元,换算成欧元是多少?"
})
智能体的执行过程
如图7-16和7-17所示,系统会输出详细的思考过程:
> 进入新的智能体运行...
Thought: 我需要先搜索MacBook Pro的价格
Action: duckduck
Action Input: MacBook Pro price USD
Observation: 搜索结果显示价格是$2,249.00
Thought: 现在我需要把美元换算成欧元
Action: Calculator
Action Input: 2249 * 0.85
Observation: 1911.65
Thought: 我现在知道最终答案了
Final Answer: MacBook Pro目前价格是$2,249.00,
换算成欧元约€1,911.65
> 完成!
最终输出
{
'input': 'MacBook Pro现在多少钱?...',
'output': 'MacBook Pro目前价格是$2,249.00,换算成欧元约€1,911.65'
}
成功! 智能体自己:
- 判断需要搜索
- 使用搜索工具找到价格
- 判断需要计算
- 使用计算器换算
- 给出完整答案
五、智能体的强大之处
1. 自主决策
# 传统链:必须提前规定每一步
链1 → 链2 → 链3
# 智能体:自己决定做什么
问题 → 智能体分析 → 自己选工具 → 根据结果调整策略
2. 自我纠错能力
Thought: 我先试试搜索
Action: 搜索 → 结果不理想
Thought: 搜索不行,换个工具试试
Action: 换计算器 → 成功!
3. 与现实世界交互
智能体可以配备各种工具:
- 🔍 搜索引擎(获取最新信息)
- 🧮 计算器(精确计算)
- 🌤️ 天气API(查天气)
- 📧 邮件API(发邮件)
- 🗄️ 数据库(查询数据)
- …理论上可以接入任何API!
六、注意事项和局限性
1. 可靠性问题
问题:智能体是自主决策的,我们无法100%控制每一步
# 可能出现的问题:
- 选错工具
- 搜索到错误信息
- 计算步骤错误
2. 解决方案建议
增加验证机制:
- ✅ 要求智能体返回信息来源
- ✅ 在关键步骤加人工确认
- ✅ 限制工具的使用范围
- ✅ 添加输出验证逻辑
# 改进后的提示词
"请搜索MacBook Pro价格,并返回信息来源的URL"
3. 成本和速度
每次调用智能体 = 多次LLM调用
用户问题
↓ LLM调用1:分析问题
工具执行
↓ LLM调用2:分析结果
再次工具执行
↓ LLM调用3:最终回答
总计:可能需要3-10次LLM调用!
影响:
- 更慢(多次调用)
- 更贵(付费API 按调用次数收费)
七、实用场景
场景1:智能客服
工具箱:
- 订单查询API
- 物流查询API
- 退款处理API
- 知识库搜索
用户:"我的订单XX什么时候到?"
智能体:自动查询订单 → 查物流 → 回答预计时间
场景2:研究助手
工具箱:
- 学术搜索引擎
- PDF阅读工具
- 翻译API
- 摘要生成
用户:"帮我找最新的AI论文并总结"
智能体:搜索论文 → 下载 → 提取要点 → 生成摘要
场景3:数据分析助手
工具箱:
- SQL数据库
- Python执行器
- 可视化工具
用户:"分析本月销售趋势"
智能体:查询数据库 → 计算统计 → 生成图表
八、核心要点总结
1. 智能体 vs 链式架构
| 维度 | 链式架构 | 智能体 |
|---|---|---|
| 决策方式 | 预设流程 | 自主决策 |
| 灵活性 | 固定 | 动态调整 |
| 工具使用 | 手动指定 | 自动选择 |
| 适用场景 | 简单、固定流程 | 复杂、需要决策 |
2. ReAct框架精髓
核心公式:
思考(分析情况)→ 行动(使用工具)→ 观察(查看结果)→ 循环
3. 构建智能体的关键
- 强大的LLM:需要理解复杂指令
- 工具设计:描述清楚每个工具的用途
- 提示词模板:教会LLM如何使用工具
- 验证机制:保证输出质量
九、下一步
掌握智能体后,第8章将介绍语义搜索和RAG:
# 未来将学习
智能体 + 知识库 = 超级智能系统
用户:"根据公司文档,解释我们的退款政策"
系统:搜索文档 → 提取相关内容 → 生成准确回答
核心启示
智能体的本质:
- 不是让LLM更聪明
- 而是让LLM能“
动手“ - 从“只会说话“到“能做事“
- 从“回答问题“到“解决问题“
就像给大脑装上了手脚——不仅能思考,还能行动!
智能体是LLM应用的高级形态,它展示了AI从“被动工具“向“主动助手“的进化。虽然还有很多局限,但这代表了未来的发展方向!