Skip to main content
功能 API 允许您通过最小化对现有代码的修改,将 LangGraph 的关键特性(持久化、记忆、人机交互 和 流式输出)添加到您的应用程序中。
有关功能 API 的概念信息,请参阅 功能 API。

创建简单工作流

在定义一个 entrypoint 时,输入仅限于函数的第一个参数。若要传递多个输入,可以使用字典。 :::python
::: :::js
:::
:::python
::::::js
:::
此示例展示了如何使用 @task 和 @entrypoint 装饰器的语法。由于提供了检查点器,工作流的结果将被持久化到检查点器中。:::python
::::::js
:::

并行执行

通过并发调用任务并等待结果,可以并行执行任务。这对于提高 IO 密集型任务的性能(例如调用 LLM API)很有用。 :::python
::: :::js
:::
这个示例展示了如何使用 @task 并行运行多个 LLM 调用。每个调用生成关于不同主题的一个段落,并将结果连接成一个文本输出。:::python
::::::js
:::这个示例使用 LangGraph 的并发模型来提高执行时间,特别是当任务涉及 IO(如 LLM 完成时)。

调用图

函数式 API 和 图 API 可以在同一个应用程序中一起使用,因为它们共享相同的底层运行时。 :::python
::: :::js
:::
:::python
::::::js
:::

调用其他 entrypoints

你可以在一个 entrypoint 或 task 内部调用其他 entrypoints。 :::python
::: :::js
:::
:::python
::::::js
:::

流式输出

功能 API 使用与 图 API 相同的流式机制。请阅读 流式输出指南 部分以获取更多详细信息。 使用流式 API 从工作流运行中流式传输值块的示例。 :::python

View example trace

为此示例打开一个公开的 LangSmith 运行。
  1. 从 langgraph.config 导入 @[get_stream_writer]。
  2. 在入口点内获取流式写入器实例。
  3. 在计算开始前发出自定义数据。
  4. 在计算结果后发出另一个自定义消息。
  5. 使用 stream_events() 处理流式输出。
  6. 从 interleave("values") 迭代 (mode, chunk) 对。
Python < 3.11 的异步 如果使用 Python < 3.11 并编写异步代码,使用 @[get_stream_writer 将不起作用。请直接使用 StreamWriter 类。有关详细信息,请参阅 Python < 3.11 的异步。
::: :::js

View example trace

为此示例打开一个公开的 LangSmith 运行。
  1. 在计算开始前发出自定义数据。
  2. 在计算结果后发出另一个自定义消息。
  3. 使用 streamEvents() 处理流式输出。
  4. 迭代 stream.values 以接收值快照。 :::

重试策略

:::python
::: :::js
::: :::python

设置任务和入口点超时

使用 timeout 参数与 @task 或 @entrypoint 限制单个异步尝试可以运行多长时间。以秒为单位提供超时时间或作为 datetime.timedelta。
超时仅支持异步任务和入口点。如果你在同步函数上设置 timeout,当任务或入口点被声明时,LangGraph 会引发错误。 当任务或入口点超出其超时时,LangGraph 会引发 NodeTimeoutError,它继承自 Python 的内置 TimeoutError。如果重试策略重试 TimeoutError 或 NodeTimeoutError,超时的尝试会被重试。超时适用于每次尝试独立计算,因此计时器会在每次重试时重置。 :::

缓存任务

:::python
  1. ttl 以秒为单位指定。缓存将在该时间后失效。 :::
:::js
  1. ttl 以秒为单位指定。缓存将在该时间后失效。 :::

出错后恢复

:::python
在恢复执行时,我们不需要重新运行 slow_task,因为其结果已经保存在检查点中。
::: :::js
在恢复执行时,我们不需要重新运行 slowTask,因为其结果已经保存在检查点中。
:::

人机协作

功能 API 支持 人机协作 工作流,使用 @[interrupt] 函数和 Command 原语。

基本人机协作工作流

我们将创建三个 任务:
  1. 添加 "bar"。
  2. 暂停等待人工输入。恢复时,添加人工输入。
  3. 添加 "qux"。
:::python
::: :::js
::: 现在我们可以将这些任务组合成一个 入口点: :::python
::: :::js
::: interrupt() 在任务内部被调用,允许人工审查和编辑前一个任务的输出。先前任务的结果——在这种情况下是 step_1——被持久化,以便在 @[interrupt 后不再重新运行。 让我们发送一个查询字符串: :::python
::: :::js
::: 请注意,我们在 step_1 后使用 @[interrupt 暂停。中断提供了恢复运行的指令。要恢复,我们发送一个 Command,其中包含 human_feedback 任务期望的数据。 :::python
::: :::js
::: 恢复后,运行通过剩余步骤并按预期终止。

审查工具调用

要在执行前审查工具调用,我们添加一个 review_tool_call 函数,该函数调用 interrupt。当此函数被调用时,执行将被暂停,直到我们发出命令恢复它。 给定一个工具调用,我们的函数将 @[interrupt 以供人工审查。在这种情况下,我们可以:
  • 接受工具调用
  • 修订工具调用并继续
  • 生成自定义工具消息(例如,指示模型重新格式化其工具调用)
:::python
::: :::js
::: 现在我们可以更新我们的 入口点 来审查生成的工具调用。如果工具调用被接受或修订,我们按之前的方式执行。否则,我们只需添加人工提供的 @[ToolMessage。先前任务的结果——在这种情况下是初始模型调用——被持久化,以便在 @[interrupt 后不再重新运行。 :::python
::: :::js
:::

短期记忆

短期记忆允许在不同的 线程 ID 的相同 调用 之间存储信息。参见 短期记忆 获取更多详细信息。

管理检查点

您可以查看和删除检查点存储的信息。

查看线程状态

:::python
::: :::js
:::

查看线程历史

:::python
::: :::js
:::

将返回值与保存值解耦

使用 entrypoint.final 将返回给调用者的值与在检查点中持久化的值解耦。这在以下情况下很有用:
  • 您想返回一个计算结果(例如,摘要或状态),但保存一个不同的内部值供下次调用使用。
  • 您需要控制传递给下次运行的前一个参数的内容。
:::python
::: :::js
:::

对话模型示例

使用功能 API 和 @[InMemorySaver] 检查点的简单对话模型示例。 该模型能够记住之前的对话并从中断处继续。 :::python
::: :::js
:::

长期记忆

长期记忆允许跨不同的 thread ids 存储信息。这可以用于在一个对话中学习有关特定用户的信息,并在另一个对话中使用它。

工作流

与其他库集成


官方原文:src/oss/langgraph/use-functional-api.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。
Last modified on November 3, 2026