langchain入门系列之八 langgraph多agent示例

在之前的文章中我们介绍了langgraph,并且用它做了一个小小的示例,在本文中,我们将使用智普清言来构建多agent 系统。百度千帆对langgraph支持较差(尤其是强制要求奇数偶数的role设置,传入messages的奇数偶数要求,让人有点怀疑人生)
在这里插入图片描述

如果想快速学习langgraph建议优先使用open ai,其次是glm4也就是智普清言,官网链接,当然glm4并不是完美的,例如它现在对langchain中的ToolMessage支持还不是很好,但相对而言已经胜出qianfan太多。一家之言,听听就好。

在阅读本文之前,需要你对langgraph中的一些概念有所了解,不然阅读起来会很吃力。如下是ai生成的langgraph的一些基本知识:
LangGraph 是一个用于构建基于复杂工作流的大型语言模型(LLM)应用的开发库。它通过将任务的节点和关系以图形结构定义,支持更多样化和复杂的应用场景。
以下是 LangGraph 的一些基本概念:

状态图(StateGraph):这是 LangGraph 的核心,代表整个状态图的基础类。状态图维护一个中央状态对象,会根据节点的跳转不断更新,状态包含的属性可自行定义。
节点(Nodes):节点是 LangGraph 的基本构建块,每个节点代表一个特定的功能或计算步骤,如处理输入、做出决策或与外部 API 交互。节点可以是一个独立的操作,每个节点可以和一个方法关联起来。
边(Edges):边连接图中的节点,定义计算的流程。LangGraph 支持普通边和条件边。普通边代表上一个节点运行完成后立即进入下一个节点,而条件边则根据条件函数的返回来决定下游节点。
条件边(Conditional Edges):条件边是 LangGraph 中的一种特殊边,它根据条件函数的返回值来决定下一个执行的节点。这种边不仅需要上游节点、下游节点,还需要一个条件函数。
状态信息(State Information):在多个节点之间执行操作时,需要保持状态,这就需要用到状态信息。状态信息可以在节点之间传递和更新。
编译(Compile):对工作流进行编译,将定义好的图转换成可执行的应用。
执行(Execution):传参、执行工作流,触发工作流按预定义顺序执行相关操作。
多智能体系统(Multi-Agent System):LangGraph 支持构建多智能体系统,即多个 AI 智能体构成的系统,通过相互关联与协作共同完成任务。
工具节点(Tool Nodes):在 LangGraph 中,工具节点代表可以被调用的工具,执行特定的工具操作,如调用 API 或执行特定服务。
入口点(Entry Point):在状态图中设置的起始节点,计算将从这个节点开始。
这些概念共同构成了 LangGraph 的框架,使其能够支持复杂的 LLM 应用开发,如增强的 RAG 应用、自修复代码助手、多智能体系统构建等。通过 LangGraph,开发者可以创建具有循环计算、状态执行和条件逻辑的智能体应用。
本次主题是将英国最近5年的gpd化成图

安装依赖

%pip install -U langchain zhipuai langsmith pandas langchain_experimental matplotlib langgraph langchain_core
1、引入包,设置环境,这里需要注意的是,我们在这里设置了langsmith 和zhipu的相关参数,langsmith可以方便我们调试和监控langchain流程,TAVILY_API_KEY这个需要自己去TavilySearch官网注册一个账号使用。
import os
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.messages import (
    BaseMessage,
    HumanMessage,
    ToolMessage,
)
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langgraph.graph import END, StateGraph, START
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.tools import tool
from langchain_experimental.utilities import PythonREPL
from langgraph.prebuilt import ToolNode
from IPython.display import Image, display
import operator
from typing import Annotated, Sequence, TypedDict
from typing import Literal
import functools
from langchain_core.messages import AIMessage


# 设置API
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = ""
os.environ["LANGCHAIN_ENDPOINT"] = "https://api.smith.langchain.com"
os.environ["LANGCHAIN_PROJECT"] = 'default'
os.environ["TAVILY_API_KEY"] = 
<think>嗯,用户之前问过关于Git切换分支的问题,现在他们想学习LangGraph。我需要先了解用户的学习背景和需求。他们可能已经接触过LangChain,因为LangGraph是它的扩展,用于构建有状态的角色应用。用户可能想要构建复杂的AI工作流,比如聊天机器人或自动化流程。 首先,我应该介绍LangGraph的基本概念,强调它与LangChain的关系,以及它的核心功能,比如循环、状态管理和角色协作。用户可能对状态管理不太熟悉,所以需要解释清楚StateGraph和节点、边的概念。 然后,用户可能需要一个简单的例子来入门,所以准备一个代码示例,展示如何创建图和运行流程。考虑到用户是新手,代码应该尽量简洁,并附上注释说明每个步骤。 接下来,常见使用场景部分可以帮助用户联想自己的项目需求,比如是否在开发智能客服或数据处理流程。最后,学习资源部分需要提供官方文档和社区链接,方便用户深入学习和解决问题。要注意避免使用复杂术语,保持解释清晰易懂,确保用户能够顺利入门。</think>以下是针对LangGraph入门指南,采用结构化方式帮助您快速掌握核心概念: --- ### **一、基础认知** 1. **定位** - LangGraphLangChain的扩展库 - 专门用于构建**有状态的角色应用** - 典型应用:对话系统、复杂工作流、协作式AI 2. **核心能力** - 循环执行控制(类似流程图) - 角色状态管理 - 动态流程调整 --- ### **二、核心概念** ```python from langgraph.graph import StateGraph # 定义状态容器(通常用字典) class AgentState(TypedDict): messages: list # 创建图结构 graph = StateGraph(AgentState) ``` #### 1. **节点(Node)** ```python def node_function(state: AgentState): # 处理状态数据 return {"messages": [new_message]} ``` #### 2. **边(Edges)** ```python # 添加节点 graph.add_node("node1", node_function) # 设置入口 graph.set_entry_point("node1") # 连接节点 graph.add_edge("node1", "node2") ``` #### 3. **条件分支** ```python def router(state): if condition: return "branch1" else: return "branch2" graph.add_conditional_edges("decision_node", router) ``` --- ### **三、快速示例** 构建一个简单的对话循环: ```python from langgraph.prebuilt import create_react_agent # 创建基础对话流 agent = create_react_agent(llm, tools) # 定义状态管理器 class ConversationState(TypedDict): messages: list user_input: str # 构建图结构 builder = StateGraph(ConversationState) builder.add_node("generate", agent) builder.set_entry_point("generate") builder.add_edge("generate", "generate") # 循环对话 chain = builder.compile() # 运行对话 for step in chain.stream({"user_input": "你好"}): print(step["messages"][-1]) ``` --- ### **四、常见使用模式** | 模式类型 | 适用场景 | 关键方法 | |----------------|-------------------------|----------------------------| | 循环工作流 | 持续对话系统 | `add_edge(src, dst)` | | 条件分支 | 动态路径选择 | `add_conditional_edges()` | | 并行执行 | 任务处理 | `add_node()` + 边连接 | | 状态检查点 | 断点续做 | `checkpoint` 装饰器 | --- ### **五、学习路径建议** 1. **官方资源**: - 文档:[LangGraph Documentation](https://python.langchain.com/docs/langgraph) - 示例库:`langgraph/examples` 目录 2. **实践建议**: ```bash # 推荐环境配置 python -m venv langgraph-env source langgraph-env/bin/activate pip install langgraph langchain-openai ``` 3. **调试技巧**: ```python # 可视化流程 graph.get_graph().draw_mermaid_png() # 状态跟踪 with tracer.start_as_current_span("my_workflow"): chain.invoke(...) ``` --- ### **六、典型应用场景** 1. 智能客服对话系统 2. AI协作内容生成 3. 复杂决策流程自动化 4. 迭代式数据分析管道 建议从官方提供的`chat_agent`示例入手,逐步添加自定义节点和条件逻辑。遇到具体实现问题时可结合LangChain的Chain组合使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑笑布丁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值