AI创想

标题: 【LangGraph】langgraph.prebuilt 模块:封装了常见的代理逻辑、工具执行和状态管理功能 [打印本页]

作者: AI小编    时间: 2025-12-24 08:32
标题: 【LangGraph】langgraph.prebuilt 模块:封装了常见的代理逻辑、工具执行和状态管理功能
作者:彬彬侠
langgraph.prebuilt 模块是 LangGraph 库的核心组成部分,提供了一系列预构建的组件和工具,旨在简化复杂 AI 代理和工作流的开发过程。LangGraph 是 LangChain 生态的扩展框架,专注于构建有状态、多步骤的 AI 系统,通过状态图(StateGraph)管理节点和边,支持动态路由、循环和状态管理。该模块通过封装常见的代理逻辑、工具执行和状态管理功能,显著降低了开发者的编码负担,适合快速原型化和生产级应用。

1. 模块背景与作用

1.1 LangGraph 概述

1.2 模块作用

1.3 适用场景


2. 主要组件

langgraph.prebuilt 模块包含以下核心组件,基于上文和其他文档分析,分为函数、类和注解三大类:
2.1 函数

2.1.1 create_react_agent

2.1.2 tools_condition

2.2 类

2.2.1 ToolNode

2.2.2 ValidationNode

2.2.3 Human Interaction Components

2.3 注解类

2.3.1 InjectedState

2.3.2 InjectedStore


3. 使用方法与示例

3.1 基本使用:创建 ReAct 代理
  1. from langgraph.prebuilt import create_react_agent
  2. from langchain_openai import ChatOpenAI
  3. from langchain.tools import DuckDuckGoSearchRun
  4. # 初始化模型和工具
  5. model = ChatOpenAI(model="gpt-3.5-turbo")
  6. tools =[DuckDuckGoSearchRun()]# 创建代理
  7. agent = create_react_agent(model, tools, prompt="你是一个有用的助手")# 运行代理
  8. result = agent.invoke({"input":"搜索今日天气"})print(result["messages"][-1].content)
复制代码
解析

3.2 工具节点与条件路由
  1. from typing import List, TypedDict
  2. from langgraph.graph import StateGraph, END
  3. from langgraph.prebuilt import ToolNode, tools_condition
  4. from langchain_core.messages import BaseMessage, HumanMessage
  5. from langchain_openai import ChatOpenAI
  6. from langchain.tools import DuckDuckGoSearchRun
  7. # 定义状态classState(TypedDict):
  8.     messages: List[BaseMessage]# 定义代理节点defagent(state: State)-> State:
  9.     model = ChatOpenAI(model="gpt-3.5-turbo").bind_tools(tools)
  10.     message = model.invoke(state["messages"])
  11.     state["messages"].append(message)return state
  12. # 创建工具节点
  13. tools =[DuckDuckGoSearchRun()]
  14. tool_node = ToolNode(tools)# 构建状态图
  15. workflow = StateGraph(State)
  16. workflow.add_node("agent", agent)
  17. workflow.add_node("tools", tool_node)
  18. workflow.add_edge("tools","agent")
  19. workflow.add_conditional_edges("agent", tools_condition,{"tools":"tools","__end__": END})
  20. workflow.set_entry_point("agent")# 编译并运行
  21. graph = workflow.compile()
  22. result = graph.invoke({"messages":[HumanMessage(content="搜索今日天气")]})print(result["messages"][-1].content)
复制代码
解析

3.3 验证工具调用
  1. from langgraph.prebuilt import ValidationNode
  2. from pydantic import BaseModel, field_validator
  3. from langgraph.graph import StateGraph, END
  4. # 定义模式classNumberSchema(BaseModel):
  5.     value:int@field_validator("value")defvalidate_value(cls, v):if v <0:raise ValueError("值必须非负")return v
  6. # 创建验证节点
  7. validation_node = ValidationNode(schemas=[NumberSchema])# 构建状态图
  8. workflow = StateGraph(list)
  9. workflow.add_node("validation", validation_node)
  10. workflow.set_entry_point("validation")
  11. workflow.set_finish_point("validation")
  12. graph = workflow.compile()# 测试验证
  13. messages =[AIMessage(content="", tool_calls=[{"name":"NumberSchema","args":{"value":-1},"id":"1"}])]
  14. result = graph.invoke(messages)print(result[-1].content)# 输出: 验证错误信息
复制代码
解析

3.4 状态注入
  1. from typing import List
  2. from langgraph.prebuilt import ToolNode, InjectedState
  3. from langgraph.graph import StateGraph, END
  4. from typing_extensions import TypedDict, Annotated
  5. from langchain_core.tools import tool
  6. from langchain_core.messages import BaseMessage
  7. # 定义状态classState(TypedDict):
  8.     messages: List[BaseMessage]
  9.     user_id:str# 定义工具@tooldefstate_tool(input:str, state: Annotated[dict, InjectedState])->str:returnf"User {state['user_id']} processed: {input}"# 创建工具节点
  10. tool_node = ToolNode(tools=[state_tool])# 构建状态图
  11. workflow = StateGraph(State)
  12. workflow.add_node("tools", tool_node)
  13. workflow.set_entry_point("tools")
  14. workflow.set_finish_point("tools")
  15. graph = workflow.compile()# 运行
  16. state ={"messages":[HumanMessage(content="test")],"user_id":"user1"}
  17. result = graph.invoke(state)print(result["messages"][-1].content)# 输出: User user1 processed: test
复制代码
解析

3.5 人类交互
  1. from langgraph.prebuilt.interrupt import HumanInterruptConfig, HumanInterrupt, ActionRequest
  2. # 配置人类交互
  3. config = HumanInterruptConfig(allow_respond=True, allow_edit=True)# 创建中断
  4. interrupt = HumanInterrupt(
  5.     action_request=ActionRequest(action="respond", args={"response":"继续"}),
  6.     config=config,
  7.     description="需要人类确认")
复制代码
解析


4. 实现原理

4.1 代理逻辑

4.2 工具执行

4.3 验证与状态

4.4 人类交互


5. 适用场景与限制

5.1 适用场景

5.2 限制


6. 对比其他方法

特性langgraph.prebuilt手动实现
开发速度快,开箱即用慢,需自定义逻辑
功能完整性高,包含 ReAct、工具验证等低,需手动实现
灵活性中,适合标准场景高,完全可定制
维护成本低,依赖库更新高,自定义代码需维护
适用场景标准代理、工具调用高度复杂工作流
选择建议:

7. 注意事项


8. 学习建议


9. 总结

langgraph.prebuilt 模块是 LangGraph 的核心模块,提供了 create_react_agent、ToolNode、tools_condition、ValidationNode、InjectedState 等预构建组件,简化了 ReAct 代理、工具执行和状态管理的开发。它通过封装常见逻辑,支持快速构建对话代理、自动化工作流和人类交互场景。模块设计注重易用性和灵活性,适合从原型到生产级的多种应用场景。通过示例和实践,开发者可以快速上手,构建高效、可控的 AI 系统。

参考资料:

原文地址:https://blog.csdn.net/u013172930/article/details/148098428




欢迎光临 AI创想 (https://www.llms-ai.com/) Powered by Discuz! X3.4