Skip to main content
功能API 允许您以对现有代码的最小改动,将LangGraph的关键功能(持久化记忆人机交互流式处理)添加到您的应用程序中。
关于功能API的概念信息,请参阅功能API

创建简单工作流

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

并行执行

通过并发调用任务并等待结果,可以并行执行任务。这对于提高IO密集型任务(例如,调用LLM的API)的性能非常有用。
此示例演示了如何使用 @task 并行运行多个LLM调用。每个调用生成一个关于不同主题的段落,结果被连接成单个文本输出。
此示例使用LangGraph的并发模型来提高执行时间,特别是当任务涉及LLM补全等I/O操作时。

调用图

功能API图API 可以在同一个应用程序中一起使用,因为它们共享相同的底层运行时。

调用其他入口点

您可以从 入口点任务 内部调用其他 入口点

流式处理

功能API 使用与 图API 相同的流式处理机制。请阅读 流式处理指南 部分了解更多详情。 使用流式处理API同时流式传输更新和自定义数据的示例。
  1. langgraph.config 导入 get_stream_writer
  2. 在入口点内获取流写入器实例。
  3. 在计算开始前发出自定义数据。
  4. 在计算结果后发出另一条自定义消息。
  5. 使用 .stream() 处理流式输出。
  6. 指定要使用的流式处理模式。
Python < 3.11 的异步处理 如果使用 Python < 3.11 并编写异步代码,使用 get_stream_writer 将不起作用。请改用 StreamWriter 类。有关更多详情,请参阅 Python < 3.11 的异步处理

重试策略

@task 还支持 timeout= 以限制单次尝试的运行时间。有关 @task@entrypointTimeoutPolicy 用法,请参阅 容错性
@task@entrypoint 的超时支持需要 langgraph>=1.2,目前处于alpha阶段。

缓存任务

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

错误后恢复

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

人机交互

功能API支持使用 interrupt 函数和 Command 原语的人机交互工作流。

基本人机交互工作流

我们将创建三个任务
  1. 追加 "bar"
  2. 暂停等待人类输入。恢复时,追加人类输入。
  3. 追加 "qux"
我们现在可以在一个入口点中组合这些任务:
interrupt() 在任务内部调用,使人类能够审查和编辑前一个任务的输出。先前任务的结果(在本例中为 step_1)被持久化,因此在 interrupt 之后不会再次运行。 让我们发送一个查询字符串:
请注意,我们在 step_1 之后使用 interrupt 暂停了。该中断提供了恢复运行的说明。要恢复,我们发出一个包含 human_feedback 任务所期望数据的 Command
恢复后,运行继续执行剩余步骤并按预期终止。

审查工具调用

为了在执行前审查工具调用,我们添加了一个 review_tool_call 函数,该函数调用 interrupt。当调用此函数时,执行将暂停,直到我们发出恢复命令。 给定一个工具调用,我们的函数将 interrupt 以供人类审查。此时我们可以:
  • 接受工具调用
  • 修改工具调用并继续
  • 生成自定义工具消息(例如,指示模型重新格式化其工具调用)
我们现在可以更新我们的入口点以审查生成的工具调用。如果工具调用被接受或修改,我们以前的方式执行。否则,我们只追加人类提供的 ToolMessage。先前任务的结果(在本例中为初始模型调用)被持久化,因此在 interrupt 之后不会再次运行。

短期记忆

短期记忆允许在相同 线程ID 的不同 调用 之间存储信息。有关更多详情,请参阅短期记忆

管理检查点

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

查看线程状态

查看线程历史记录

将返回值与保存值解耦

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

聊天机器人示例

一个使用功能API和 InMemorySaver 检查点保存器的简单聊天机器人示例。 该机器人能够记住之前的对话并从上次中断的地方继续。

长期记忆

长期记忆 允许在不同的 线程ID 之间存储信息。这对于在一个对话中学习关于给定用户的信息并在另一个对话中使用它非常有用。

工作流

  • 工作流与代理 指南,包含更多关于如何使用功能API构建工作流的示例。

与其他库集成