上下文
LangGraph 支持三种主要方式向语言模型提供“上下文”:
| 类型 | 描述 | 可变? | 生命周期 |
|---|---|---|---|
| 运行时上下文 | 在运行开始时传入的静态数据 | ❌ | 每次运行 |
| 短期记忆(状态) | 执行过程中可变化的中间状态 | ✅ | 每次运行/会话 |
| 长期记忆(存储) | 可跨多次调用和会话共享的持久数据 | ✅ | 跨对话 / 全局 |
运行时上下文
注意点:需要将 langgraph 升级到0.6.0a2 的版本,langgraph.runtime 模块最新的版本中才加入的,之前的版本中没有
适用于:API 密钥、用户元信息等在运行过程中不会变化的数据。
- 使用
context参数传入; - 通过
get_runtime(ContextSchema)获取; - 推荐使用
context_schema定义数据结构。
示例代码
在工作流中使用
1 | # @Time:2025/9/30 15:01 |
在Agent中使用
1 | from langgraph.runtime import get_runtime |
流式输出
LangGraph对流式输出进行了改进,细化了输出模式(如Values、Updates、Debug、Messages),提升用户体验和调试效率,适用于生产环境AI应用。
LangGraph 支持从代理(Agent)或工作流(Graph)以流式方式输出执行过程与结果。
支持的流模式(stream_mode)
将以下一种或多种流模式作为列表传递给 stream() 或 astream() 方法:
| 模式 | 描述 |
|---|---|
values |
每个图步骤后流式传输完整状态值。 |
updates |
每个步骤后流式传输状态的增量更新。 |
custom |
从图中节点流式传输自定义数据。 |
messages |
从调用 LLM 的节点流式传输生成的 token 及元数据(元组)。 |
debug |
尽可能多地流式传输调试信息。 |
支持将多种模式作为列表同时传递,如:
1 | stream_mode=["updates", "messages", "custom"] |
定义一个常见的图
1 | from typing import TypedDict |
流式传输stream_mode=”values”
在图表的每个步骤之后传输状态的完整值
1 | for chunk in graph.stream( |
执行结果
1 | {'topic': '冰激凌'} |
说明:values 则输出完整状态值。
流式传输stream_mode=”updates”
将图表每一步之后的更新流式传输到状态
1 | for chunk in graph.stream( |
执行结果
1 | {'refine_topic': {'topic': '冰激凌和小狗'}} |
说明:updates 模式输出节点的状态更新
流式传输stream_mode=”debug”
在图表的整个执行过程中传输尽可能多的信息
1 | for chunk in graph.stream( |
执行结果
1 | {'step': 1, 'timestamp': '2025-09-18T08:51:31.478123+00:00', 'type': 'task', 'payload': {'id': '671c3949-69b8-8e90-b997-e76a1f711f5f', 'name': 'refine_topic', 'input': {'topic': '冰激凌'}, 'triggers': ('branch:to:refine_topic',)}} |
从以上结果来看,可以看打执行的详细信息,每一个步骤执行
LLM token 流式传输stream_mode=”messages”
为调用LLM的图形节点传输LLM令牌和元数据
需要接入大模型
1 | from langchain_deepseek import ChatDeepSeek |
执行结果(流式输出的)
1 | 小狗|走进|一家|冰|激|凌|店|,|店员|问|:“|想要|什么|口|味的|?” |
说明:每生成一个 token 就会立即输出,并附带上下文信息。
工具中自定义数据流式输出stream_mode=”custom”
1 | # @Time:2025/9/30 14:48 |
注意:必须在 LangGraph 执行上下文中调用 get_stream_writer(),否则无效。