LangGraph工作流和智能体(一)

工作流是预定的代码路径,智能体能自主定义流程。构建它们需使用支持结构化输出和工具调用的聊天模型,并借助LLM的工具调用、结构化输出和短期记忆等增强能力。

提示链将任务分解为可验证步骤,每个LLM调用处理前一个输出。并行化同时处理多个子任务或多次运行同一任务以提升速度或可信度。路由根据输入内容将任务引导至特定语境处理。

1、工作流和智能体

工作流是具有预定性质的代码路径,并按照给定的顺序运行

而智能体是动态的,其能够自主定义其流程和工具的使用

2、环境的准备

要构建工作流和智能体,可以使用任何支持结构化输出和工具调用的聊天模型

参考LangGraph快速开始,主要是依赖项的安装和LLM的初始化

3、LLMs与增强

工作流和智能体系统都基于LLMs和为其添加的增强技能,比如工具调用、结构化输出、短期记忆

主要是对Harness具备的能力的选择和模型的选择

4、提示链

提示链是指每一个LLM调用处理前一个调用的输出,它通常是指用于执行定义明确、可分解为更小可验证步骤的任务。

如,输入给我查询xxx一周的天气情况,根据这一周的每日最高温度和最低温度画出折线图

LLM分析查询xxx一周天气,然后将结果和下一步的操作作为下一个节点的输入传输给下一个节点

  • 节点1(数据获取专家):
    • 固定指令:“你是一个天气查询助手,只返回纯JSON格式的天气数据,不要任何解释。”
    • 输出(传给节点2):{"city":"北京","dates":["周一"...], "highs":[25,26...], "lows":[15,16...]} (只传数据,不传操作)
  • 节点2(图表绘制助手):
    • 固定指令(预设好的):“你是一个图表生成器,接收到天气JSON数据后,直接根据里面的最高温和最低温生成画图用的SVG代码或Mermaid代码。”
    • 输入:接收到的只有节点1给的那一串JSON数据。

5、并行化

通过并行化,LLMs可以同时处理一项任务,具体表现为同时运行多个独立的子任务,或是多次运行同一任务以检查不同的输出结果来实现,因此并行化通常用于

(1)将子任务拆分并并行执行,从而提升执行速度

(2)多次运行任务来检查是否存在不同的输出,从而提高可信度

6、路由

路由工作流会对输入进行处理,并将其引导至特定语境下的任务

使用LangGraph构建智能体简单的思路

步骤一:将你的工作流程分解成一个个独立的步骤。

确定流程中的各个步骤。每个步骤都将成为一个节点(一个执行特定操作的函数)。然后,绘制这些步骤之间的连接图。

步骤二:明确每个步骤需要做什么

对于图中的每个节点,确定它代表什么类型的操作以及它需要什么上下文才能正常工作。

1、LLM处理:需要理解、分析、生成文本或做出推理决策

2、数据流向:需要从外部来源检索的信息

3、执行流程:需要执行外部的操作

4、人工干涉:需要人工干预的步骤

步骤三:设计状态

状态是智能体中所有节点均可访问的共享记忆

1、它是否需要在多个步骤之间持久存在?如果是,就放进状态字典中

2、它是否可以从其他数据推导出来?如果是,则在需要时计算它,而不是将其存储在 状态中

状态仅包含原始数据——不包含提示模板、格式化字符串或任何指令。分类输出直接来自 LLM,并以单个字典的形式存储。(根据实用主义来看,这个是全图共享但是使用还是相关节点或边)

步骤 4:构建节点
将每个步骤实现为一个函数。LangGraph 中的一个节点就是一个 Python 函数,它接收当前状态并返回更新后的状态。

误类型谁来修复策略适用场景
临时性错误(网络问题、速率限制)系统(自动)重试策略通常重试即可解决的临时故障
LLM 可恢复的错误(工具调用失败、解析问题)LLM将错误信息存入 State 并循环返回LLM 能够看到错误并调整自己的处理方式
用户可修复的错误(信息缺失、指令不清晰)人类使用 interrupt() 暂停执行需要用户提供额外信息才能继续
重试用尽后的可恢复失败开发者error_handler在重试全部失败后,执行补偿/恢复分支逻辑
意外错误开发者冒泡未知问题,需要调试介入

1、临时性错误:可通过添加重试策略,自动重试网络问题和速率限制问题。

2、LLM可恢复错误:将错误存储在状态中并循环返回,以便 LLM 可以查看哪里出了问题并重试

3、用户可介入错误:必要时暂停并从用户处收集信息

4、重试用尽错误:运行恢复功能,更新状态并路由到补偿分支

5、意外错误:冒泡调试

步骤五:将他们组合在一起

构建graph

需注意节点颗粒度权衡

1、考虑隔离外部服务

2、中间节点可见

3、不同的故障模型

4、可用性、测试性,要注意重用性

LangGraph本地运行(一)

1、首先确定自己设备的python版本

python -V

2、创建虚拟环境(此要求python版本≥3.11)

#在适合的地方创建venv文件夹
python -m venv venv
#激活虚拟环境(此目录为例)
E:\langgraph_project\venv\Scripts\activate
#激活成功后将会为(venv) E:\langgraph_project>
# 升级 pip
python -m pip install –upgrade pip
# 安装 langgraph-cli
pip install -U “langgraph-cli[inmem]”
pip install langchain-openai langgraph

3、验证安装是否成功

langgraph –help

4、创建一个 LangGraph 应用(例项目名为first_agent,路径为E:\langgraph_project\first_agent)

langgraph new first_agent –template new-langgraph-project-python

5、安装依赖

cd first_agent
pip install -e .

6、项目关联至pycharm

  • 打开 文件→ 打开→ 选择E:\langgraph_project\first_agent
  • 右下角python编译器→ 添加新的编译器→E:\langgraph_project\venv\Scripts\python.exe

以下操作在pycharm终端进行

7、配置.env

cp .env.example .env
# .env
LANGSMITH_API_KEY=lsv2…

8、依赖安装

8、启动服务

如果启动不起来,可尝试一下chrome的隐私模式

LangGraph快速开始

1、pycharm新建项目,纯python项目->解释器类型uv,位置自定义,然后点击创建(python版本不低于3.10)

第一步

2、点击终端,依次运行以下指令

3、复制快速入门中源码

以deepseek V4连接为例

根据编写之日看deepseek说:init_chat_model 对 DeepSeek 的“原生”支持不如 ChatOpenAI 稳定,因此强烈建议直接使用 ChatOpenAI

所以上述代码咱们需要变更一处内容

之后只需要再安装langchain_openai和IPython至项目中即可通过运行main.py,就可以得到以下输出内容:

LangGraph简述

langgraph 是一个底层编排框架和运行时,用于构建、管理和部署长时间运行的有状态代理

具备的功能:持久执行、流式传输、人机交互

核心优势

持久性:能够在故障发生后还能长时间运行,并且可以在中断后可以以之前状态继续运行。

人机交互:通过在任意时刻检查和修改智能体状态,来融入人工监督。

全面记忆:构建有状态智能体,兼具用于持续推理的短期工作记忆,以及跨会话的长期记忆。

使用 LangSmith 调试:借助可视化工具深度透视复杂智能体行为,这些工具可追踪执行路径、捕获状态变迁,并提供详细的运行时指标。

准生产部署:利用可扩展的基础设施,可靠地部署复杂智能体系统,该设施专为应对有状态、长时运行工作流的特殊挑战而构建。

应用程序结构(至少是这样的)

my-app/
├── my_agent # all project code lies within here
│   ├── utils # utilities for your graph
│   │   ├── __init__.py
│   │   ├── tools.py # tools for your graph
│   │   ├── nodes.py # node functions for your graph
│   │   └── state.py # state definition of your graph
│   ├── __init__.py
│   └── agent.py # code for constructing your graph
├── .env # environment variables
├── requirements.txt # package dependencies
└── langgraph.json # configuration file for LangGraph

配置文件

langgraph的配置文件为langgraph.json里面指定了部署langgraph应用程序所需的依赖变量和其他设置