2026/3/6 15:27:50
网站建设
项目流程
三大门户网站哪家做的最好,网络营销的推广,平东网站建设,怎样建立一个简单的网站《AI Agent智能体开发实践玩转FastGPT 像搭积木一样构建智能体 LLM大语言模型AI Agent开发 智能体性能优化调试部署实施方法书籍 AIAgent智能体开发实践 无规格》【摘要 书评 试读】- 京东图书
LangGraph是LangChain生态系统中的多智能体框架#xff0c;它允许创建多个智能体…《AI Agent智能体开发实践玩转FastGPT 像搭积木一样构建智能体 LLM大语言模型AI Agent开发 智能体性能优化调试部署实施方法书籍 AIAgent智能体开发实践 无规格》【摘要 书评 试读】- 京东图书LangGraph是LangChain生态系统中的多智能体框架它允许创建多个智能体组成的网络这些智能体可以相互协作完成复杂任务。LangGraph提供ReAct、Plan-and-Execute、Reflection Critique、RAG以及多智能体协作如代理切换、群体智能等多种模式。LangGraph定位为LangChain的扩展库用于构建有状态的、多智能体协作系统。LangGraph的关键特性包括基于图的拓扑结构定义工作流。支持循环和条件分支。内置持久化状态管理。兼容LangChain原有工具链。8.6.4 多智能体框架LangGraph中的图LangGraph中的图Graph可定义工作流通过添加节点智能体和边工作流转移来构建例如定义Supervisor、Researcher、Emailer等节点并添加边以协调任务执行。在LangGraph中“图”表示智能体网络的结构由节点智能体/工具和边通信路径组成。图的结构可以是线性图任务按顺序执行。树状图任务分解为子任务。有向无环图DAG支持复杂的依赖关系。循环图支持迭代或反馈机制。【示例8.17】LangGraph基础图创建。from langgraph.graph import StateGraph, END # 定义状态结构可选但推荐 from typing import TypedDict class State(TypedDict): start: bool processed: bool # 创建图 workflow StateGraph(State) # 定义节点函数 def start_node(state): print(开始执行) return {start: True} def process_node(state): print(处理中...) return {processed: True} # 添加节点 workflow.add_node(start, start_node) workflow.add_node(process, process_node) # 设置入口 workflow.set_entry_point(start) # 添加边 workflow.add_edge(start, process) workflow.add_edge(process, END) # 使用END表示结束 # 编译 app workflow.compile() # 执行 result app.invoke({}) print(执行结果:, result)示例代码执行结果如下开始执行 处理中... 执行结果: {start: True, processed: True}8.6.5 多智能体框架LangGraph中的状态状态在LangGraph中表示智能体执行过程中的中间结果。每个节点智能体可以读取当前状态。修改状态并传递给下一个节点。状态可以包含中间计算结果。上下文信息。历史决策记录。状态管理是LangGraph的核心功能之一确保数据在整个智能体网络中正确流动。状态管理机制示例如下from typing import TypedDict class AgentState(TypedDict): input: str history: list[str] intermediate_steps: list[tuple]8.6.6 多智能体框架图中的节点节点表示智能体如research_agent、chart_agent每个节点有特定功能如研究、生成图表通过函数定义其行为并与其他节点协作。节点是LangGraph中的基本计算单元可以是智能体节点包含完整的智能体逻辑。工具节点封装特定功能的工具。决策节点基于条件选择路径。聚合节点合并多个输入。节点通过定义明确的接口与其他节点通信接收输入状态并产生输出状态。节点类型包括函数式节点和工具调用节点示例如下# 函数式节点定义 def agent_node(state): response agent.invoke(state) return {response: response} # 工具调用节点 def tool_node(state): tool_output tools[state[selected_tool]](state[input]) return {output: tool_output} 【示例8.18】多节点工作流。 from langgraph.graph import StateGraph # 定义状态类型这在新版本中是必需的 from typing import TypedDict class State(TypedDict): value: int workflow StateGraph(State) def start(state: State) - State: print(开始工作流) return {value: 0} def increment(state: State) - State: new_value state[value] 1 print(f增加值到 {new_value}) return {value: new_value} def end(state: State) - State: print(f最终值: {state[value]}) return state workflow.add_node(start, start) workflow.add_node(increment, increment) workflow.add_node(end, end) workflow.set_entry_point(start) workflow.add_edge(start, increment) workflow.add_edge(increment, end) workflow.set_finish_point(end) app workflow.compile() app.invoke({value: 0}) # 初始状态需要符合State类型定义输出开始工作流 增加值到 1 最终值: 18.6.7 多智能体框架LangGraph中的边边表示智能体之间的任务转移可通过条件边如根据状态决定下一个节点或直接边实现例如Researcher完成后返回Supervisor。1边表示节点之间的连接关系它定义了数据流动的方向、触发条件、可选的数据转换、权重在有多个路径时使用。边的配置决定了智能体网络如何响应不同的输入和状态变化。2边控制逻辑from langgraph.graph import ConditionalEdge def should_continue(state): if state[needs_more_info]: return human_help return end workflow.add_conditional_edges( decision_node, should_continue, {human_help: human_input_node, end: END} )3边类型固定边无条件转移。条件边基于谓词函数路由。动态边运行时计算目标节点。【示例8.19】条件边示例。from typing import TypedDict from langgraph.graph import StateGraph, START, END # 定义状态结构 class State(TypedDict): value: int def start(state: State) - State: print(启动节点) return {value: 5} def process_a(state: State) - State: print(执行路径A) return state def process_b(state: State) - State: print(执行路径B) return state def decide_next(state: State) - str: if state[value] 3: return process_a return process_b # 创建 StateGraph 实例 workflow StateGraph(State) # 添加节点 workflow.add_node(start, start) workflow.add_node(process_a, process_a) workflow.add_node(process_b, process_b) # 设置入口 workflow.set_entry_point(start) # 添加条件边注意现在直接返回目标节点名 workflow.add_conditional_edges( start, decide_next, { # 可选显式映射但如果你的 decide_next 直接返回节点名可以省略这个字典 process_a: process_a, process_b: process_b } ) # 添加普通边 workflow.add_edge(process_a, process_b) workflow.add_edge(process_b, END) # 设置结束点 # 编译并运行 app workflow.compile() app.invoke({})执行代码输出如下执行路径A 执行路径B8.6.8 多智能体框架LangChain中的工具LangChain提供工具如Google搜索、Python函数等可通过继承BaseTool类或tool装饰器定义自定义工具智能体根据工具描述调用相应的方法。在LangChain中工具是智能体可以调用的外部 功能。1常见的工具类型包括API工具调用外部API如天气API、股票API、定位API等。Python函数工具封装Python函数。LLM工具使用语言模型完成特定任务。搜索工具如Google Serp API、Wolfram Alpha等。2工具通过Tool类封装需要定义名称name。功能描述description。执行函数func。3工具生态系统示例from langchain.tools import tool tool def semantic_search(query: str) - str: 向量数据库检索工具 return vectorstore.similarity_search(query) # 工具注册 tools [semantic_search]4高级功能工具组合通过Toolkit封装工具集。权限控制工具访问权限管理。IO校验基于Pydantic的输入输出验证。【示例8.20】自定义工具实现LangChainQwen。#安装依赖包:pip install langchain langchain-community langchainhub dashscope from langchain.tools import tool from langchain.agents import AgentExecutor, create_react_agent from langchain import hub from langchain_community.chat_models import ChatTongyi # 核心计算函数不被 tool 装饰避免递归调用工具对象 def _factorial(n: int) - int: 内部阶乘计算函数使用循环避免递归栈和工具调用问题 if n 0: raise ValueError(阶乘不支持负数) result 1 for i in range(1, n 1): result * i return result # 工具层函数负责接收输入、类型转换、调用核心函数 tool def calculate_factorial(n: int) - int: 计算给定数字的阶乘 # 确保输入是整数兼容字符串输入 if isinstance(n, str): n int(n.strip()) return _factorial(n) # 工具列表 tools [calculate_factorial] # 初始化 Qwen 模型请替换为你自己的 DashScope API Key llm ChatTongyi( modelqwen-max, # 也可用 qwen-turbo、qwen-plus temperature0, dashscope_api_keyos.getenv(DASHSCOPE_API_KEY) # 推荐在终端或系统环境变量中设置 DASHSCOPE_API_KEY ) # 拉取 ReAct 提示词模板 prompt hub.pull(hwchase17/react) # 创建 Agent agent create_react_agent(llm, tools, prompt) # 创建执行器 executor AgentExecutor(agentagent, toolstools, verboseTrue) # 执行任务 if __name__ __main__: response executor.invoke({input: 计算5的阶乘}) print(\n *50) print(最终结果:, response[output])输出 Entering new AgentExecutor chain... 我需要使用calculate_factorial函数来计算5的阶乘。 Action: calculate_factorial Action Input: 5120我现在知道了5的阶乘的结果。 Final Answer: 5的阶乘是120。 Finished chain. 最终结果: 5的阶乘是120。需要本书全部示例代码的小伙伴们可以加我微信号 VXAAA999888写明“要Agent代码”。