网站开发工程师工作内容,网站源码是用什么做的,河南seo和网络推广,找网红推广一般怎么合作本文是对 langgraph.prebuilt.create_react_agent 函数的详细且全面的介绍#xff0c;涵盖其定义、功能、设计理念、参数、返回值、使用场景、实现原理、示例代码、高级用法、注意事项、与其他方法的对比#xff0c;以及学习建议。 1. 概述
langgraph.prebuilt.create_react…本文是对 langgraph.prebuilt.create_react_agent 函数的详细且全面的介绍涵盖其定义、功能、设计理念、参数、返回值、使用场景、实现原理、示例代码、高级用法、注意事项、与其他方法的对比以及学习建议。 1. 概述
langgraph.prebuilt.create_react_agent 是 LangGraph 库中的一个预构建函数位于 langgraph.prebuilt 模块用于快速创建基于 ReActReasoning Acting架构的智能代理。LangGraph 是 LangChain 生态的扩展专注于构建复杂、有状态的工作流通过状态图State Graph管理节点和边支持动态路由、循环和多代理协作。
ReAct 是一种结合推理和行动的代理架构基于论文 ReAct: Synergizing Reasoning and Acting in Language Models。它通过语言模型LLM生成推理步骤思考和行动指令工具调用动态决定是否直接回答用户或调用工具获取信息。create_react_agent 封装了 ReAct 的标准逻辑简化了代理的构建过程使开发者无需手动定义状态图即可快速实现功能。
1.1 核心功能
快速构建 ReAct 代理自动生成一个支持推理和工具调用的代理基于 LLM 和工具列表。状态管理支持对话历史和中间结果的跟踪适合多轮交互。工具集成与 LangChain 的工具生态无缝集成支持搜索、计算、API 调用等。流式输出提供流式响应增强实时交互体验。状态持久化通过检查点checkpointer支持有状态对话保存和恢复上下文。异步支持支持异步执行适合高并发或 I/O 密集型任务。
1.2 设计理念
简化和标准化为开发者提供开箱即用的 ReAct 代理降低复杂工作流的构建难度。模块化与 LangChain 的 LLM 和工具生态紧密集成保持扩展性。动态性支持动态决策代理根据输入和上下文选择推理或工具调用。可控性通过状态管理和检查点机制提供清晰的上下文跟踪和调试能力。 2. 函数定义与参数
以下是 create_react_agent 函数的定义和参数
from langgraph.prebuilt import create_react_agentdef create_react_agent(model: BaseLanguageModel,tools: Sequence[BaseTool],checkpointer: Optional[BaseCheckpointSaver] None,state_modifier: Optional[Union[str, BasePromptTemplate]] None,interrupt_before: Optional[List[str]] None,interrupt_after: Optional[List[str]] None,debug: bool False,stream_mode: Literal[values, messages] values,
) - CompiledGraph:创建一个 ReAct 风格的代理。参数model: 语言模型实例用于生成推理和工具调用。tools: 工具列表代理可调用以执行任务。checkpointer: 可选检查点保存器用于状态持久化。state_modifier: 可选提示模板或字符串用于自定义代理的行为。interrupt_before: 可选指定在某些节点执行前中断。interrupt_after: 可选指定在某些节点执行后中断。debug: 是否启用调试模式输出详细日志。stream_mode: 流式输出模式values 或 messages。返回CompiledGraph: 编译后的状态图可通过 invoke 或 stream 调用。2.1 参数详解
model 类型BaseLanguageModelLangChain 的语言模型基类。描述用于生成推理和工具调用的 LLM例如 ChatOpenAI(modelgpt-4)。要求模型必须支持工具调用Tool Calling如 OpenAI 的 gpt-3.5-turbo 或 gpt-4。函数会自动绑定工具无需手动调用 bind_tools。 tools 类型Sequence[BaseTool]LangChain 工具列表。描述代理可调用的工具例如搜索工具DuckDuckGoSearchRun、计算器或自定义 API 工具。示例tools[DuckDuckGoSearchRun(), Calculator()]。 checkpointer 类型Optional[BaseCheckpointSaver]。描述用于保存和恢复状态支持有状态对话。常用 MemorySaver内存中保存或数据库检查点如 SQLite。默认None表示无状态交互。 state_modifier 类型Optional[Union[str, BasePromptTemplate]]。描述自定义代理的提示模板或字符串用于调整 LLM 的行为例如添加系统提示。默认None使用默认 ReAct 提示。 interrupt_before 类型Optional[List[str]]。描述指定在某些节点执行前中断工作流用于调试或人工干预。默认None无中断。 interrupt_after 类型Optional[List[str]]。描述指定在某些节点执行后中断工作流。默认None无中断。 debug 类型bool。描述是否启用调试模式输出详细的执行日志。默认False。 stream_mode 类型Literal[values, messages]。描述流式输出模式 values返回完整的消息消息级流式。messages返回每个令牌令牌级流式。 默认values。
2.2 返回值
类型CompiledGraph。描述一个编译后的 LangGraph 状态图可通过 invoke同步、ainvoke异步或 stream流式方法调用。示例agent_executor.invoke({input: 查询天气}) 返回状态字典。 3. 工作原理
create_react_agent 内部自动构建一个 ReAct 风格的状态图包含以下核心组件
3.1 状态State
默认状态是一个字典包含 messages 字段List[BaseMessage]存储对话历史、用户输入、LLM 响应和工具调用结果。如果使用 checkpointer状态会持久化支持多轮对话。
示例状态
{messages: [HumanMessage(content查询天气),AIMessage(contentNone, tool_calls[{name: search, args: {query: 天气}}]),ToolMessage(content天气结果, tool_call_idcall_123)]
}3.2 节点Nodes
Agent 节点调用 LLM 生成推理或工具调用。通常使用 ToolNode 预构建逻辑结合 model 和 tools。Tool 节点执行工具调用基于 langgraph.prebuilt.ToolNode处理 LLM 生成的 ToolCall 请求。节点之间通过状态共享上下文Agent 节点决定是否调用工具Tool 节点执行具体任务。
3.3 边Edges
普通边从 Agent 节点到 Tool 节点当 LLM 生成工具调用时。条件边根据状态决定下一步 如果有工具调用返回 Tool 节点。如果无工具调用或达到终止条件跳转到 END。
3.4 执行流程
用户输入通过 invoke 或 stream 传入初始状态包含 input。Agent 节点LLM 分析输入和历史生成 直接回答AIMessage。工具调用AIMessage 包含 tool_calls。 Tool 节点执行工具调用将结果作为 ToolMessage 添加到状态。循环或终止根据状态是否有新的工具调用决定返回 Agent 节点或结束。输出返回最终状态通常包含 messages 字段。
3.5 ReAct 逻辑
ReAct 代理的核心是交替进行推理和行动
推理LLM 分析输入决定是否需要工具或直接回答。行动调用工具获取外部信息更新状态。迭代根据工具结果LLM 可能再次推理或生成最终回答。
create_react_agent 自动实现这一逻辑通过状态图管理迭代过程。 4. 使用步骤
以下是使用 create_react_agent 的标准步骤
4.1 安装依赖
pip install langgraph langchain langchain-openai langchain-communitylanggraph核心库。langchain提供 LLM 和工具支持。langchain-openaiOpenAI 模型集成。langchain-community社区工具如搜索。
配置 OpenAI API 密钥
import os
os.environ[OPENAI_API_KEY] 你的API密钥4.2 定义工具
使用 LangChain 的工具接口tool 装饰器或 BaseTool 子类。
from langchain_core.tools import tooltool
def search(query: str) - str:模拟搜索引擎return f搜索结果{query}4.3 初始化 LLM
选择支持工具调用的模型。
from langchain_openai import ChatOpenAIllm ChatOpenAI(modelgpt-3.5-turbo)4.4 创建代理
调用 create_react_agent传入 LLM 和工具。
from langgraph.prebuilt import create_react_agenttools [search]
agent_executor create_react_agent(llm, tools)4.5 运行代理
通过 invoke 或 stream 执行。
result agent_executor.invoke({input: 搜索 LangGraph 文档})
print(result[messages][-1].content)5. 详细示例
以下是一个完整的示例展示如何使用 create_react_agent 构建一个支持搜索和多轮对话的代理。
5.1 代码实现
from langgraph.prebuilt import create_react_agent
from langgraph.checkpoint.memory import MemorySaver
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langchain_core.messages import HumanMessage# 定义工具
tool
def search(query: str) - str:模拟搜索引擎return f搜索结果{query} 的相关文档# 初始化 LLM
llm ChatOpenAI(modelgpt-3.5-turbo)# 创建检查点
memory MemorySaver()# 创建代理
tools [search]
agent_executor create_react_agent(modelllm,toolstools,checkpointermemory,stream_modevalues
)# 运行多轮对话
config {configurable: {thread_id: conversation_1}} # 用于状态持久化
inputs [{input: 搜索 LangGraph 的最新功能},{input: 我之前问了什么}
]for input_data in inputs:print(f\n用户输入{input_data[input]})for chunk in agent_executor.stream(input_data, configconfig):last_message chunk[messages][-1]print(f代理输出{last_message.content})5.2 输出示例
用户输入搜索 LangGraph 的最新功能
代理输出搜索结果LangGraph 的最新功能的文档用户输入我之前问了什么
代理输出你之前问了“搜索 LangGraph 的最新功能”。5.3 代码说明
工具定义了一个 search 工具模拟搜索功能。LLM使用 gpt-3.5-turbo支持工具调用。检查点MemorySaver 保存对话历史thread_id 标识对话线程。代理通过 create_react_agent 创建支持流式输出。运行模拟多轮对话代理根据历史回答问题。 6. 高级用法
6.1 自定义提示
使用 state_modifier 参数自定义代理行为。
from langchain_core.prompts import ChatPromptTemplateprompt ChatPromptTemplate.from_template(你是一个专业助手严格遵循用户指令。回答前仔细思考并优先使用工具获取准确信息。\n用户输入{input}
)
agent_executor create_react_agent(llm, tools, state_modifierprompt)6.2 异步执行
支持异步调用适合高并发场景。
import asyncioasync def run_agent():result await agent_executor.ainvoke({input: 搜索天气})print(result[messages][-1].content)asyncio.run(run_agent())6.3 流式输出
使用 stream_modemessages 实现令牌级流式。
for chunk in agent_executor.stream({input: 搜索 LangGraph}, stream_modemessages):print(chunk)6.4 中断机制
使用 interrupt_before 或 interrupt_after 在特定节点暂停执行。
agent_executor create_react_agent(llm,tools,interrupt_before[tools] # 在工具调用前中断
)6.5 多工具支持
支持多个工具LLM 动态选择。
tool
def calculator(expression: str) - str:return f计算结果{eval(expression)}tools [search, calculator]
agent_executor create_react_agent(llm, tools)6.6 数据库检查点
使用 SQLite 或其他数据库保存状态。
from langgraph.checkpoint.sqlite import SqliteSavercheckpointer SqliteSaver.from_conn_string(checkpoint.db)
agent_executor create_react_agent(llm, tools, checkpointercheckpointer)7. 实现原理
create_react_agent 内部构建了一个状态图基于以下组件
状态定义使用 MessagesState默认包含 messages 字段。节点 agent 节点调用 LLM生成 AIMessage 或工具调用。tools 节点基于 ToolNode执行工具调用。 边 从 agent 到 tools如果有工具调用。条件边检查 messages 中的 tool_calls决定循环或终止。 运行时LangGraph 的运行时管理状态更新和节点调度。
核心逻辑基于 ReAct 的迭代过程
LLM 分析输入生成推理或工具调用。如果有工具调用执行工具并更新状态。重复直到 LLM 决定直接回答或达到终止条件。 8. 适用场景
聊天机器人支持多轮对话和工具调用如智能客服。自动化工作流如数据分析后调用 API 生成报告。智能助手支持天气查询、行程规划等功能。研究原型快速测试 LLM 和工具的集成效果。 9. 注意事项 模型兼容性 使用支持工具调用的 LLM如 OpenAI、Anthropic。确保 model 是基础模型create_react_agent 会自动绑定工具。 工具定义 工具必须符合 LangChain 的 BaseTool 接口。提供清晰的工具描述description帮助 LLM 正确选择。 状态管理 无 checkpointer 时代理是无状态的。使用 thread_id 区分不同对话线程。 性能优化 使用异步接口减少延迟。限制工具调用次数避免无限循环。 调试 启用 debugTrue 查看详细日志。使用 graph.get_graph().to_dot() 可视化状态图。 如果提示模块不存在 from langgraph.prebuilt import create_react_agent ImportError: cannot import name ‘create_react_agent’ from ‘langgraph.prebuilt’ (unknown location) 需要通过 pip install langgraph-prebuilt 安装 prebuilt 模块 10. 与其他方法的对比
手动构建状态图 优势完全灵活支持复杂逻辑分支、循环、多代理。劣势代码量大开发复杂。 LangChain Agent 优势简单适合线性任务。劣势不支持复杂状态管理和动态路由。 create_react_agent 优势开箱即用适合标准 ReAct 场景。劣势定制性有限复杂逻辑需手动扩展。 11. 学习建议
基础知识先掌握 LangChain 的 LLM、工具和提示管理。官方文档阅读 LangGraph 文档 和教程。实践从简单代理开始逐步添加工具和状态持久化。社区资源加入 LangChain Discord查看 GitHub 示例。调试工具使用可视化和日志分析工作流。 12. 总结
langgraph.prebuilt.create_react_agent 是一个强大的预构建函数用于快速创建 ReAct 风格的代理。它通过封装 LLM、工具和状态管理简化了开发流程支持多轮对话、工具调用和流式输出。适用于聊天机器人、自动化工作流和智能助手等场景。高级功能如异步执行、自定义提示和检查点进一步增强了其灵活性。对于复杂需求可结合 LangGraph 的手动状态图实现定制化。