Skip to main content
本指南向你展示如何创建、查看和检查 线程。线程与助手配合使用,以实现对已部署图有状态执行。

理解线程

线程是一个持久化的对话容器,它在多次运行之间维护状态。每次在线程上执行运行时,图会使用线程的当前状态处理输入,并用新信息更新该状态。 线程通过在运行之间保留对话历史和上下文来实现有状态交互。没有线程,每次运行都将是无状态的,没有对先前交互的记忆。线程特别适用于:
  • 助手需要记住讨论内容的多轮对话。
  • 需要跨多个步骤维护上下文的长时间运行任务。
  • 每个用户都有自己对话历史的用户特定状态管理。
下图说明了线程如何在两次运行之间维护状态。第二次运行可以访问第一次运行的消息,使助手能够理解“那明天呢?”的上下文指的是第一次运行中的天气查询:
  • 线程通过唯一的线程 ID 维护持久化对话。
  • 每次运行都将助手的配置应用于图执行。
  • 状态在每次运行后更新,并为后续运行持久化。
  • 后续运行可以访问完整的对话历史。
  • 助手 定义了图执行的配置(模型、提示词、工具)。创建运行时,你可以指定一个 图 ID(例如 "agent")以使用默认助手,或指定一个 助手 ID(UUID)以使用特定配置。
  • 线程 维护状态和对话历史。
  • 运行 结合助手和线程,以特定配置和状态执行你的图。
最佳实践:在线程(对话)中跟踪运行时,确保在所有运行(包括父运行和子运行)上都设置了 thread_id。这是线程过滤、令牌计数和线程级评估正常工作所必需的。

创建线程

要使用状态持久化运行你的图,必须首先创建一个线程:

空线程

要创建一个新线程,使用以下方法之一:
更多信息,请参阅 PythonJS SDK 文档,或 REST API 参考。输出:

复制线程

或者,如果你的应用程序中已有一个线程,你想复制其状态,可以使用 copy 方法。这将创建一个独立的线程,其历史记录在操作时与原始线程完全相同:
更多信息,请参阅 PythonJS SDK 文档,或 REST API 参考。

预填充状态

你可以通过向 create 方法提供一个 supersteps 列表来创建一个具有任意预定义状态的线程。supersteps 描述了一系列状态更新,用于建立线程的初始状态。当你想要以下操作时,这很有用:
  • 创建一个具有现有对话历史的线程。
  • 从另一个系统迁移对话。
  • 设置具有特定初始状态的测试场景。
  • 从之前的会话恢复对话。
有关检查点和状态管理的更多信息,请参阅 LangGraph 持久化文档
输出:

列出线程

要列出线程,请使用 search 方法。这将列出应用程序中与提供的过滤器匹配的线程:

按线程状态过滤

使用 status 字段根据线程状态进行过滤。支持的值为 idlebusyinterruptederror。例如,要查看 idle 线程:
更多信息,请参阅 PythonJS SDK 文档,或 REST API 参考。输出:

按元数据过滤

search 方法允许你按元数据进行过滤。这对于查找与特定图、用户或你添加到线程的自定义元数据相关的线程非常有用。你可以过滤的常见元数据字段包括:你也可以过滤在创建或更新线程时附加的任何自定义元数据。

按图过滤

输出:

按助手过滤

按定时任务过滤

排序

SDK 还支持使用 sort_bysort_order 参数按 thread_idstatuscreated_atupdated_at 对线程进行排序。

检查线程

获取线程

要查看给定 thread_id 的特定线程,请使用 get 方法:
输出:
更多信息,请参阅 PythonJS SDK 文档,或 REST API 参考。

检查线程状态

要查看给定线程的当前状态,请使用 get_state 方法。这将返回当前值、要执行的下一个节点以及检查点信息:
输出:
更多信息,请参阅 PythonJS SDK 文档,或 REST API 参考。可选地,要查看线程在给定检查点的状态,请传入检查点 ID。这对于检查线程在其执行历史中特定点的状态非常有用。首先,从线程历史中获取检查点 ID:
然后使用检查点 ID 获取该特定点的状态:

检查完整线程历史

要查看线程的历史记录,请使用 get_history 方法。这将返回线程经历的每个状态的列表,允许你跟踪完整的执行路径:
此方法特别适用于:
  • 通过查看状态如何演变来调试执行流程。
  • 理解图执行中的决策点。
  • 审计对话历史和状态更改。
  • 重放或分析过去的交互。
更多信息,请参阅 PythonJS SDK 文档,或 REST API 参考。