LangGraph 是 LangChain 框架基础上的一个库,它是 LangChain Expression Language (LCEL) 的扩展。LangGraph 能够利用有向无环图(DAG)的方式,去协调多个大语言模型(LLM)或状态信息。相比于 LCEL,LangGraph 的使用逻辑更为复杂,但能够处理循环、记忆管理等更复杂的流程,使得业务逻辑更加清晰。
LangGraph 相当于一种高级的状态机语言,非常适合构建需要多步决策、工具调用和状态持久化的 Agent 应用。本文将详细介绍如何安装 LangGraph,并基于智普 AI 的大模型实现一个可以调用工具的 Agent。
环境准备与安装
LangGraph 是一个独立的库,默认情况下不会随 LangChain 一起安装。在使用前,需要先通过 pip 进行安装。
pip install langgraph
此外,还需要确保安装了 LangChain 及其相关依赖。由于 OpenAI 接口在国内访问可能受限,本教程统一使用智普 AI(Zhipu AI)的大模型进行实践。智普 AI 的接口与 OpenAI 高度兼容,可以直接复用大部分 OpenAI 的 Tool 接口代码。
定义工具
在 LangGraph 中,工具(Tools)是 Agent 执行具体任务的手段。我们可以使用 @tool 装饰器来定义工具。工具函数需要描述其功能、参数 schema 以及返回值。
以下示例定义了三个工具:
tagging: 分析句子的情感极性和语言。overview: 提供文本摘要、语言和关键词。get_current_temperature: 根据经纬度获取当前天气温度。
import datetime
import operator
from typing import TypedDict, Annotated, Union, Optional, Type, List
import requests
from langchain.agents import create_openai_tools_agent
from langchain.pydantic_v1 import BaseModel, Field
from langchain.tools import BaseTool, tool
from langchain_core.agents import AgentAction, AgentFinish
from langchain_core.messages import BaseMessage
from langgraph.graph import END, StateGraph
from langgraph.prebuilt.tool_executor import ToolExecutor
from zhipu_llm import ChatZhipuAI
# 配置 API Key 和模型
zhipuai_api_key =
glm3 =
glm4 =
chat_zhipu = ChatZhipuAI(
temperature=,
api_key=zhipuai_api_key,
model=glm3
)
():
sentiment: = Field(description=)
language: = Field(description=)
():
summary: = Field(description=)
language: = Field(description=)
keywords: = Field(description=)
():
.(a=s1, b=s2)
():
.(a=summary, b=language, c=keywords)
():
BASE_URL =
params = {
: latitude,
: longitude,
: ,
: ,
}
response = requests.get(BASE_URL, params=params)
response.status_code == :
results = response.json()
:
Exception()
current_utc_time = datetime.datetime.utcnow()
time_list = [datetime.datetime.fromisoformat(time_str.replace(, )) time_str results[][]]
temperature_list = results[][]
closest_time_index = (((time_list)), key= i: (time_list[i] - current_utc_time))
current_temperature = temperature_list[closest_time_index]
tools = [tagging, overview, get_current_temperature]


