跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

LangChain 代理模块详解:类型、代码与执行流程

LangChain 中的代理(Agent)模块,涵盖其核心概念、工具包使用及四种主要代理类型。详细解析了 CONVERSATIONAL_REACT_DESCRIPTION、OPENAI_FUNCTIONS、Plan-and-Execute 及 ZERO_SHOT_REACT_DESCRIPTION 的实现代码与执行日志,展示了 LLM 如何通过思考、行动、观察循环调用外部工具完成复杂任务。内容包含 Python 代码示例及调试输出,适合希望深入理解 LangChain 智能体机制的开发者参考。

游戏玩家发布于 2025/2/7更新于 2026/11/993 浏览
LangChain 代理模块详解:类型、代码与执行流程

LangChain 代理模块详解

概述

某些应用程序需要基于用户输入对 LLM(大语言模型)和其他工具进行灵活调用。Agents(代理)为此类应用程序提供了灵活性。代理可以访问单一工具,并根据用户输入确定要使用的工具;也可以使用多个工具,并将一个工具的输出作为下一个工具的输入。

主要有两种类型的代理:

  • Plan-and-Execute Agents:用于制定动作计划,先规划再执行子任务。
  • Action Agents:决定实施何种动作,通常基于 ReAct 框架。

Agents 模块还包含配合代理执行的工具(代理可以执行的操作)和工具包(一套工具集合)。例如,为了使代理与 SQL 数据库交互,它可能需要一个工具来执行查询,另一个工具来检查表结构。

核心组件

  1. Tools:代理可执行的具体操作函数。
  2. Toolkits:特定用例的工具集合。
  3. Memory:用于存储对话历史或状态,使代理具备上下文记忆能力。
  4. LLM:驱动代理决策的核心模型。

主要代理类型

1. CONVERSATIONAL_REACT_DESCRIPTION

针对对话场景优化的代理,适合需要多轮交互的场景。

from langchain.agents import initialize_agent, AgentType
from langchain.tools import Tool
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.utilities import GoogleSearchAPIWrapper

search = GoogleSearchAPIWrapper()
tools = [
    Tool(
        name="Current Search",
        func=search.run,
        description="useful for when you need to answer questions about current events or the current state of the world"
    ),
]
memory = ConversationBufferMemory(memory_key="chat_history")
llm = ChatOpenAI(temperature=0)
agent_chain = initialize_agent(
    tools, 
    llm, 
    agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION, 
    verbose=True, 
    memory=memory
)
print(agent_chain.run(input="用中文回答中国人口数量"))

执行过程解析: 代理会进入思考循环(Thought -> Action -> Observation),判断是否需要使用工具。如果需要,则选择工具并传入参数,获取观察结果后再次思考,直到得出最终答案。

2. CHAT_CONVERSATIONAL_REACT_DESCRIPTION

针对聊天场景优化的代理,结构与上述类似,但更侧重于即时通讯风格的交互体验。

3. OpenAI Functions Agent

利用 OpenAI 的 Function Calling 功能,让模型直接输出函数调用参数,提高工具调用的准确性。

from langchain.chat_models import ChatOpenAI
from langchain.agents import initialize_agent, AgentType
from langchain.utilities import GoogleSearchAPIWrapper
from langchain.chains import LLMMathChain

llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613")
search = GoogleSearchAPIWrapper()
llm_math_chain = LLMMathChain.from_llm(llm=llm, verbose=True)

tools = [
    Tool(
        name="Search",
        func=search.run,
        description="useful for when you need to answer questions about current events. You should ask targeted questions"
    ),
    Tool(
        name="Calculator",
        func=llm_math_chain.run,
        description="useful for when you need to answer questions about math"
    )
]

agent = initialize_agent(
    tools, 
    llm, 
    agent=AgentType.OPENAI_FUNCTIONS, 
    verbose=True
)
print(agent.run("2 的 33 次方是多少?"))

调试日志分析: 在 debug 模式下,可以看到详细的 Chain 运行步骤:

  1. AgentExecutor 接收输入。
  2. ChatOpenAI 生成消息,其中包含 function_call 信息。
  3. Calculator 工具被调用,执行数学计算。
  4. 最终 LLM 根据工具返回结果生成自然语言回答。

此模式通过封装计算函数并传入 OpenAI 接口,实现了结构化输出与工具调用的无缝衔接。

4. Plan-and-Execute Agents

计划和执行代理通过首先计划要做什么,然后执行子任务来实现目标。这个想法很大程度上受到 BabyAGI 的启发。

from langchain.experimental.plan_and_execute import PlanAndExecute, load_agent_executor, load_chat_planner
from langchain.chat_models import ChatOpenAI
from langchain.utilities import GoogleSearchAPIWrapper
from langchain.chains import LLMMathChain

search = GoogleSearchAPIWrapper()
llm = ChatOpenAI(temperature=0)
llm_math_chain = LLMMathChain.from_llm(llm=llm, verbose=True)

tools = [
    Tool(
        name="Search",
        func=search.run,
        description="useful for when you need to answer questions about current events"
    ),
    Tool(
        name="Calculator",
        func=llm_math_chain.run,
        description="useful for when you need to answer questions about math"
    ),
]

model = ChatOpenAI(temperature=0)
planner = load_chat_planner(model)
executor = load_agent_executor(model, tools, verbose=True)
agent = PlanAndExecute(planner=planner, executor=executor, verbose=True)

print(agent.run("用中文回答美国和日本的 GDP 相差多少?"))
# 预期流程:1.Search Tool 查询美国 GDP 2.Calculator Tool 查询日本 GDP 3.Calculator Tool 计算差值

5. ZERO_SHOT_REACT_DESCRIPTION

给 LLM 提供一个工具名称列表,包括它们的效用描述以及有关预期输入/输出的详细信息。指示 LLM 在必要时使用提供的工具来回答用户给出的提示。指令建议模型遵循 ReAct 格式:思考、行动、行动输入、观察。

执行示例:

> Entering new chain...
Thought: I need to find out the population of China.
Action: Search
Action Input: Population of China
Observation: The current population of China is 1,455,977,205 as of Wednesday, July 5, 2023...
Thought: I now know the final answer.
Final Answer: The current population of China is 1,455,977,205.
> Finished chain.

最佳实践与注意事项

  1. 工具描述清晰:工具的 description 字段至关重要,它决定了 LLM 能否正确理解何时调用该工具。
  2. 内存管理:对于长对话,务必配置 Memory(如 ConversationBufferMemory),否则代理无法记住之前的上下文。
  3. 错误处理:在生产环境中,应增加对工具调用失败的异常捕获机制,避免程序崩溃。
  4. 性能优化:verbose=True 仅用于调试,上线时应关闭以减少日志开销。
  5. 模型选择:不同代理类型对模型的能力要求不同,Function Calling 通常需要支持 Function Call 接口的较新模型版本。

总结

LangChain 的代理模块极大地扩展了 LLM 的应用边界,使其能够自主规划任务并调用外部资源。开发者应根据具体场景选择合适的代理类型:简单问答可用 Zero-Shot React,复杂规划需 Plan-and-Execute,而涉及精确计算或结构化数据时,OpenAI Functions Agent 表现更佳。

目录

  1. LangChain 代理模块详解
  2. 概述
  3. 核心组件
  4. 主要代理类型
  5. 1. CONVERSATIONALREACTDESCRIPTION
  6. 2. CHATCONVERSATIONALREACT_DESCRIPTION
  7. 3. OpenAI Functions Agent
  8. 4. Plan-and-Execute Agents
  9. 预期流程:1.Search Tool 查询美国 GDP 2.Calculator Tool 查询日本 GDP 3.Calculator Tool 计算差值
  10. 5. ZEROSHOTREACT_DESCRIPTION
  11. 最佳实践与注意事项
  12. 总结

更多推荐文章

查看全部
  • 基于 Leaflet 的 WebGIS 省域区县天气可视化实战
  • GitHub 汉化插件:界面中文化方案与部署指南
  • 大模型训练数据白皮书发布:大模型是数据要素价值释放的最短路径
  • OpenClaw 技能精选:本地 AI 助手超级插件市场指南
  • 从 vw/vh 到 clamp():前端响应式设计的痛点与进化
  • Ubuntu 24.04 安装 OpenClaw 遇到 systemctl is-enabled unavailable 错误修复
  • 赋予大型语言模型多模态能力的方法与架构解析
  • 多模态大模型主流架构与技术要点总结
  • 无线蜂窝网络原理与演进:从 1G 到 6G 全景解析
  • HTML 基础语法与简单网页制作示例
  • STL 二分查找 lower_bound 与 upper_bound 详解
  • C++ 函数进阶:递归与尾递归优化
  • 常见 AI 模型与编程术语美式发音速查表
  • 微信小程序交通违法曝光平台设计与实现:AI 与 Python 实践
  • LLM 工具调用统一 API 设计与实战
  • LangChain 框架与大模型应用开发核心知识点总结
  • Golang 高并发构建医疗数据防篡改存证平台
  • 生成式人工智能 (AIGC) 概念、历史与应用详解
  • 基于抓取浏览器与数据集的 AI 模型训练数据采集方案
  • 大模型四大技术架构解析:Prompt、Agent、RAG 与微调

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online