Skip to main content
本指南解释了如何使用子图。子图的一个常见应用场景是构建多智能体系统。 添加子图时,您需要定义父图与子图之间的通信方式:

设置

为LangGraph开发设置LangSmith 注册LangSmith,以便快速发现并提升您的LangGraph项目性能。LangSmith允许您使用追踪数据来调试、测试和监控基于LangGraph构建的LLM应用 —— 此处了解更多入门信息。

共享状态模式

一种常见情况是父图与子图通过模式中的共享状态键(通道)进行通信。例如,在多智能体系统中,智能体通常通过共享的消息键进行通信。 如果您的子图与父图共享状态键,可按照以下步骤将其添加到图中:
  1. 定义子图工作流(如下例中的subgraph_builder)并编译
  2. 在定义父图工作流时,将编译后的子图传递给.add_node方法
  1. 此键与父图状态共享
  2. 此键为SubgraphState私有,对父图不可见

不同状态模式

对于更复杂的系统,您可能希望定义与父图具有完全不同模式(无共享键)的子图。例如,在多智能体系统中,您可能希望为每个智能体保留私有的消息历史。 如果您的应用属于这种情况,则需要定义一个调用子图的节点函数。该函数必须在调用子图前将输入(父图)状态转换为子图状态,并在返回状态更新前将结果转换回父图状态。
  1. 将状态转换为子图状态
  2. 将响应转换回父图状态
  1. 将状态转换为子图状态
  2. 将响应转换回父图状态
此示例包含两层子图:父图 -> 子图 -> 孙图。
  1. 我们正在将状态从子图通道(my_child_key)转换为孙图通道(my_grandchild_key
  2. 我们正在将状态从孙图通道(my_grandchild_key)转换回子图通道(my_child_key
  3. 我们在此处传递的是一个函数,而非直接传递编译后的图(grandchild_graph
  4. 我们正在将状态从父图通道(my_key)转换为子图通道(my_child_key
  5. 我们正在将状态从子图通道(my_child_key)转换回父图通道(my_key
  6. 我们在此处传递的是一个函数,而非直接传递编译后的图(child_graph

添加持久化

您只需在编译父图时提供检查点器。LangGraph会自动将检查点器传播到子图。
如果您希望子图拥有自己的内存,可以在编译时使用相应的检查点器选项。这在多智能体系统中非常有用,例如希望智能体跟踪其内部消息历史:

查看子图状态

启用持久化后,您可以通过相应方法检查图状态(检查点)。要查看子图状态,可以使用子图选项。 您可以通过graph.get_state(config)检查图状态。要查看子图状态,可以使用graph.get_state(config, subgraphs=True)
仅在中断时可用 子图状态仅在子图中断时可查看。一旦恢复图运行,您将无法访问子图状态。
  1. 仅当子图中断时可用。一旦恢复图运行,您将无法访问子图状态。

流式传输子图输出

要在流式输出中包含子图的输出,可以在父图的流方法中设置子图选项。这将同时流式传输父图和任何子图的输出。
  1. 设置subgraphs=True以流式传输子图输出。
  1. 设置subgraphs=True以流式传输子图输出。