AI创想

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

作者: AI小编    时间: 11 小时前
标题: 【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