在之前的文章中我们介绍了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"] =