智能体:构建LLM系统

#2025/12/31 #ai

前面我们学会了链式架构记忆机制,但这些系统都是“按剧本演出“——流程固定,不会自己做决定。这一节要教你的智能体(Agent),就是让LLM学会“自己拿主意“!


目录

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

核心概念

智能体 = 能自主决策和行动的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的三步循环

智能体工作时会不断重复这三个步骤:

步骤英文做什么类比
1Thought(思考)LLM分析当前情况,决定下一步做什么工程师看问题
2Action(行动)调用某个工具(如搜索、计算器)拿起扳手
3Observation(观察)记录工具返回的结果看工作效果

核心:思考→行动→观察→再思考…循环往复,直到解决问题!

{%}|520

图:ReAct 提示词模板示例

工作流程图解

如图所示:

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

{%}|664

图:ReAct 处理流程中的两轮迭代演示

四、实战:用LangChain构建智能体

注意:这个例子需要更强大的模型

前面用的Phi-3模型太小,跑不了智能体,所以我们用OpenAI的GPT-3.5:
在本书中文版出版之际,Qwen2.5-7BLlama 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. 判断需要搜索
  2. 使用搜索工具找到价格
  3. 判断需要计算
  4. 使用计算器换算
  5. 给出完整答案

五、智能体的强大之处

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. 构建智能体的关键

  1. 强大的LLM:需要理解复杂指令
  2. 工具设计:描述清楚每个工具的用途
  3. 提示词模板:教会LLM如何使用工具
  4. 验证机制:保证输出质量

九、下一步

掌握智能体后,第8章将介绍语义搜索和RAG

# 未来将学习  
智能体 + 知识库 = 超级智能系统  

用户:"根据公司文档,解释我们的退款政策"  
系统:搜索文档 → 提取相关内容 → 生成准确回答  

核心启示

智能体的本质

  • 不是让LLM更聪明
  • 而是让LLM能“动手
  • 从“只会说话“到“能做事“
  • 从“回答问题“到“解决问题“

就像给大脑装上了手脚——不仅能思考,还能行动!

智能体是LLM应用的高级形态,它展示了AI从“被动工具“向“主动助手“的进化。虽然还有很多局限,但这代表了未来的发展方向!