【LangChain】langchain.agents 模块:构建和管理智能代理(Agents)
langchain.agents 模块是 LangChain 库中的核心模块,用于构建和管理智能代理(Agents),能够结合语言模型(LLM)、工具和内存实现复杂任务的自动化处理。
本文基于 LangChain 0.3.x,详细介绍 langchain.agents 模块的结构、核心类及其功能,并提供一个独立示例,展示如何使用 langchain.agents 结合 ChatOpenAI 和 ShellTool 实现人工智能主题的终端命令执行代理,示例突出模块在代理构建中的灵活性。(LangChain Agents 文档) 。
langchain.agents 模块概览
langchain.agents 模块是 LangChain 库的核心部分,提供了构建智能代理的工具和框架。代理是一个结合语言模型、工具(Tools)和内存(Memory)的系统,能够根据用户输入自主选择和执行操作,适用于需要推理、规划和动态决策的任务。该模块支持多种代理类型(如 ReAct、OpenAI Functions)和工具集成,基于 LangChain Expression Language (LCEL) 实现灵活的工作流。
核心功能:
- 提供代理初始化和管理工具,支持多种代理架构。
- 集成语言模型、工具和内存,实现任务自动化。
- 支持工具调用、动态规划和多轮对话。
- 与 LCEL 链无缝集成,支持复杂工作流设计。
适用场景:
- 构建智能聊天机器人,处理多轮对话和工具调用。
- 自动化任务,如文件管理、数据查询或代码执行。
- 实现需要推理和规划的复杂工作流(如数学求解、搜索)。
- 开发交互式应用,结合外部 API 或本地工具。
模块位置:
- 源码路径:
langchain/agents/ - 文档参考:LangChain Agents API
模块中的主要类和函数
以下是 langchain.agents 模块中的核心类和函数(基于 LangChain 0.3.x),包括功能和典型用法。
1. AgentExecutor
- 功能:代理执行器,负责运行代理逻辑,协调 LLM、工具和内存。
- 参数:
agent(Runnable):代理的核心逻辑(如Agent实例)。tools(List[BaseTool]):可用的工具列表。memory(Optional[BaseMemory]):对话内存(如ConversationBufferMemory)。max_iterations(Optional[int]):最大迭代次数,防止无限循环。verbose(bool):是否输出详细日志。
- 使用场景:执行代理任务,管理工具调用和输出。
- 示例:
from langchain.agents import AgentExecutor executor = AgentExecutor(agent=agent, tools=[tool], verbose=True)
2. initialize_agent
- 功能:初始化代理和执行器,快速构建代理工作流。
- 签名:
def initialize_agent( tools: Sequence[BaseTool], llm: BaseLanguageModel, agent: Optional[AgentType] = None, memory: Optional[BaseMemory] = None, **kwargs: Any ) -> AgentExecutor - 参数:
tools(Sequence[BaseTool]):工具列表。llm(BaseLanguageModel):语言模型(如ChatOpenAI)。agent(Optional[AgentType]):代理类型(如AgentType.ZERO_SHOT_REACT_DESCRIPTION)。memory(Optional[BaseMemory]):对话内存。**kwargs:其他配置(如verbose、max_iterations)。
- 使用场景:快速创建代理,适合初学者。
- 示例:
from langchain.agents import initialize_agent, AgentType agent = initialize_agent(tools=[tool], llm=llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION)
3. AgentType
- 功能:枚举类,定义支持的代理类型。
- 值:
ZERO_SHOT_REACT_DESCRIPTION:基于描述的零样本 ReAct 代理。CHAT_ZERO_SHOT_REACT_DESCRIPTION:基于聊天的零样本 ReAct 代理。OPENAI_FUNCTIONS:使用 OpenAI 函数调用(工具调用)。CONVERSATIONAL_REACT_DESCRIPTION:对话型 ReAct 代理。STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION:结构化聊天 ReAct 代理。
- 使用场景:选择代理逻辑。
- 示例:
agent = initialize_agent(tools, llm, agent=AgentType.OPENAI_FUNCTIONS)
4. create_react_agent
- 功能:创建 ReAct 代理,基于提示模板和工具。
- 签名:
def create_react_agent( llm: BaseLanguageModel, tools: Sequence[BaseTool], prompt: Optional[BasePromptTemplate] = None, output_parser: Optional[BaseOutputParser] = None ) -> Runnable - 使用场景:自定义 ReAct 代理,支持复杂提示。
- 示例:
from langchain.agents import create_react_agent agent = create_react_agent(llm, tools, prompt=prompt)
5. create_openai_functions_agent
- 功能:创建基于 OpenAI 函数调用的代理。
- 签名:
def create_openai_functions_agent( llm: BaseLanguageModel, tools: Sequence[BaseTool], prompt: Optional[BasePromptTemplate] = None ) -> Runnable - 使用场景:利用 OpenAI 的工具调用功能。
- 示例:
from langchain.agents import create_openai_functions_agent agent = create_openai_functions_agent(llm, tools, prompt=prompt)
6. AgentOutputParser
- 功能:解析代理输出,提取动作和结果。
- 子类:
ReActSingleInputOutputParser:解析 ReAct 代理输出。OpenAIFunctionsAgentOutputParser:解析 OpenAI 函数调用输出。
- 使用场景:自定义输出解析逻辑。
- 示例:
from langchain.agents.output_parsers import ReActSingleInputOutputParser parser = ReActSingleInputOutputParser()
其他类
ToolCallingAgent:处理工具调用的代理逻辑。XMLAgent:基于 XML 格式的代理(实验性)。JsonAgent:基于 JSON 格式的代理(实验性)。
关键特性:
- 代理支持多轮推理(ReAct:Reasoning + Acting)。
- 工具调用基于 LLM 的决策。
- 内存支持多轮对话(如
ConversationBufferMemory)。
使用方式
以下是使用 langchain.agents 模块的通用步骤。
1. 安装依赖
pip install --upgrade langchain langchain-openai langchain-experimental
2. 设置 OpenAI API 密钥
export OPENAI_API_KEY="your-api-key"
或在代码中:
import os
os.environ["OPENAI_API_KEY"] = "your-api-key"
3. 初始化工具和 LLM
from langchain_community.tools import ShellTool
from langchain_openai import ChatOpenAI
shell_tool = ShellTool()
llm = ChatOpenAI(model="gpt-3.5-turbo")
4. 创建代理
from langchain.agents import initialize_agent, AgentType
agent = initialize_agent(
tools=[shell_tool],
llm=llm,
agent=AgentType.OPENAI_FUNCTIONS,
verbose=True
)
5. 调用代理
response = agent.run("列出当前目录中的文件")
print(response)
使用 langchain.agents 的示例
以下是一个独立示例,展示如何使用 langchain.agents 模块结合 ChatOpenAI 和 ShellTool 实现人工智能主题的终端命令执行代理。代理通过自然语言输入自动生成并执行 shell 命令,展示模块的代理构建能力。
准备环境:
- 获取 OpenAI API 密钥:OpenAI Platform。
- 设置环境变量:
export OPENAI_API_KEY="your-api-key" - 安装依赖:
pip install --upgrade langchain langchain-openai langchain-experimental
代码:
from langchain_openai import ChatOpenAI
from langchain_community.tools import ShellTool
from langchain.agents import initialize_agent, AgentType
# 初始化 ChatOpenAI
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
# 初始化 ShellTool
shell_tool = ShellTool(ask_human_input=True)
# 创建代理
agent = initialize_agent(
tools=[shell_tool],
llm=llm,
agent=AgentType.OPENAI_FUNCTIONS,
verbose=True,
max_iterations=3
)
# 测试代理和命令执行
print("测试 langchain.agents 和命令执行代理:")
try:
tasks = [
"列出当前目录中的文件",
"显示当前工作目录路径"
]
for task in tasks:
print(f"\n输入任务: {task}")
result = agent.run(task)
print(f"代理输出: {result}")
except Exception as e:
print(f"错误: {e}")
print("\n警告:ShellTool 默认无安全限制,请在沙箱环境中运行!")
输出示例(实际输出取决于系统和用户交互):
测试 langchain.agents 和命令执行代理:
输入任务: 列出当前目录中的文件
> Entering new AgentExecutor chain...
[ShellTool] 即将执行命令: ['ls']
请确认是否执行 (y/n): y
代理输出: dir1
dir2
file.txt
输入任务: 显示当前工作目录路径
> Entering new AgentExecutor chain...
[ShellTool] 即将执行命令: ['pwd']
请确认是否执行 (y/n): y
代理输出: /home/user/project
警告:ShellTool 默认无安全限制,请在沙箱环境中运行!
代码说明
- LLM 初始化:
- 使用
ChatOpenAI调用gpt-3.5-turbo,设置temperature=0.7。
- 使用
- ShellTool 初始化:
- 设置
ask_human_input=True,要求用户确认命令。
- 设置
- 代理初始化:
- 使用
initialize_agent创建基于 OpenAI 函数调用的代理。 - 配置
verbose=True输出推理日志,max_iterations=3限制循环。
- 使用
- 测试:
- 测试两个任务:列出文件(
ls)、显示路径(pwd)。 - 显示任务和代理输出,展示代理的推理和工具调用。
- 测试两个任务:列出文件(
- 错误处理:
- 使用
try-except捕获 API 或工具错误。
- 使用
- 警告:
- 提醒用户
ShellTool的安全风险。
- 提醒用户
运行要求:
- 有效的 OpenAI API 密钥:
export OPENAI_API_KEY="your-api-key" - 安装依赖:
pip install --upgrade langchain langchain-openai langchain-experimental - 网络连接:访问
https://api.openai.com. - 支持 Bash 的环境(如 Linux、macOS;Windows 需 WSL 或自定义工具)。
注意事项
- 安全风险:
ShellTool默认无安全限制,建议:- 启用
ask_human_input=True:shell_tool = ShellTool(ask_human_input=True) - 在沙箱环境运行(如 Docker)。
- 启用
- 检查代理日志:
agent = initialize_agent(tools, llm, verbose=True)
- 依赖安装:
- 需
langchain-experimental:pip install langchain-experimental - 验证安装:
from langchain_community.tools import ShellTool
- 需
- 代理类型选择:
- OpenAI Functions:适合工具调用,支持结构化输出。
agent = initialize_agent(tools, llm, agent=AgentType.OPENAI_FUNCTIONS) - ReAct:适合需要推理的任务:
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION)
- OpenAI Functions:适合工具调用,支持结构化输出。
- 性能优化:
- 异步调用:使用
arun:result = await agent.arun(task) - 限制迭代:设置
max_iterations:agent = initialize_agent(tools, llm, max_iterations=5) - 并发控制:配置 LLM:
llm = ChatOpenAI(max_concurrency=5)
- 异步调用:使用
- 错误调试:
- 工具调用失败:
- 检查工具:
print(shell_tool.invoke("ls")) - 验证代理日志:
agent = initialize_agent(tools, llm, verbose=True)
- 检查工具:
- API 错误:
- 检查密钥:
print(os.environ.get("OPENAI_API_KEY")) - 增加超时:
llm = ChatOpenAI(timeout=30)
- 检查密钥:
- 推理循环:
- 检查
max_iterations:agent = initialize_agent(tools, llm, max_iterations=3) - 调整提示:
from langchain.agents import create_react_agent agent = create_react_agent(llm, tools, custom_prompt)
- 检查
- 工具调用失败:
常见问题
Q1:如何添加内存支持?
A:使用 ConversationBufferMemory:
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
agent = initialize_agent(
tools=[shell_tool],
llm=llm,
agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
memory=memory
)
Q2:如何自定义提示?
A:使用 create_openai_functions_agent:
from langchain.agents import create_openai_functions_agent
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template("任务: {input}")
agent = create_openai_functions_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
Q3:如何支持多工具?
A:添加多个工具:
from langchain_community.tools import ShellTool, WikipediaQueryRun
tools = [ShellTool(), WikipediaQueryRun()]
agent = initialize_agent(tools, llm, agent=AgentType.OPENAI_FUNCTIONS)
Q4:如何支持开源模型?
A:使用 ChatOllama:
from langchain_ollama import ChatOllama
llm = ChatOllama(model="llama3")
agent = initialize_agent(
tools=[shell_tool],
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION
)
总结
langchain.agents 模块是 LangChain 中构建智能代理的核心,包含以下关键组件:
AgentExecutor:执行代理逻辑。initialize_agent:快速创建代理。AgentType:定义代理类型(如 ReAct、OpenAI Functions)。create_react_agent/create_openai_functions_agent:自定义代理。
更多推荐


所有评论(0)