中断配置 #

目录 #

  1. 简介
  2. 核心组件
  3. 中断配置机制
  4. 人在回路(HITL)实现
  5. 执行流程分析
  6. 配置最佳实践
  7. 常见使用场景
  8. 结论

简介 #

本文档详细阐述了 langgraphgo 框架中基于配置的执行中断机制。重点分析 Config 结构体中的 InterruptBeforeInterruptAfter 字段如何在指定节点前或后自动暂停图的执行流程。通过 examples/human_in_the_loop 示例,说明如何实现人在回路(HITL)的审批流程,并描述 InvokeWithConfig 方法如何在执行循环中检查这些配置项并在匹配节点时立即返回 GraphInterrupt 错误,从而将控制权交还给调用者。

核心组件 #

Section sources

中断配置机制 #

Config 结构体定义了图执行过程中的各种配置选项,其中 InterruptBeforeInterruptAfter 是实现执行中断的核心字段。

classDiagram
class Config {
+Callbacks []CallbackHandler
+Metadata map[string]interface
+Tags []string
+Configurable map[string]interface
+RunName string
+Timeout *time.Duration
+InterruptBefore []string
+InterruptAfter []string
+ResumeFrom []string
+ResumeValue interface
}
class GraphInterrupt {
+Node string
+State interface
+InterruptValue interface
+NextNodes []string
}
class Runnable {
+InvokeWithConfig(ctx context.Context, initialState interface, config *Config) (interface, error)
}
Runnable --> Config : "使用"
Runnable --> GraphInterrupt : "返回"
Config --> GraphInterrupt : "触发"

Diagram sources

Section sources

人在回路HITL实现 #

通过 examples/human_in_the_loop 示例展示了如何使用 InterruptBefore 实现人在回路的审批流程。当设置 InterruptBefore: []string{"human_approval"} 时,图会在执行到 “human_approval” 节点前自动中断,等待人工审批。

sequenceDiagram
participant Client as "客户端"
participant Runnable as "Runnable"
participant Node as "节点"
Client->>Runnable : InvokeWithConfig(初始状态, config)
Runnable->>Runnable : 检查InterruptBefore
alt 匹配中断节点
Runnable-->>Client : 返回GraphInterrupt错误
Note over Client : 控制权交还给调用者
Client->>Client : 模拟人工审批
Client->>Runnable : ResumeWithConfig(更新状态, resumeConfig)
Runnable->>Node : 继续执行后续节点
Runnable-->>Client : 返回最终结果
else 正常执行
Runnable->>Node : 执行所有节点
Runnable-->>Client : 返回最终结果
end

Diagram sources

Section sources

执行流程分析 #

InvokeWithConfig 方法在执行循环中会检查当前节点是否匹配 InterruptBeforeInterruptAfter 配置。如果匹配,则立即返回 GraphInterrupt 错误,包含当前节点名、状态和可能的后续节点信息。

flowchart TD
Start([开始执行]) --> CheckInterruptBefore["检查InterruptBefore"]
CheckInterruptBefore --> MatchBefore{"匹配中断节点?"}
MatchBefore --> |是| ReturnInterruptBefore["返回GraphInterrupt错误"]
MatchBefore --> |否| ExecuteNodes["并行执行当前节点"]
ExecuteNodes --> ProcessResults["处理结果并更新状态"]
ProcessResults --> CheckInterruptAfter["检查InterruptAfter"]
CheckInterruptAfter --> MatchAfter{"匹配中断节点?"}
MatchAfter --> |是| ReturnInterruptAfter["返回GraphInterrupt错误"]
MatchAfter --> |否| DetermineNext["确定下一节点"]
DetermineNext --> HasNext{"有下一节点?"}
HasNext --> |是| UpdateCurrent["更新当前节点"]
HasNext --> |否| End([执行完成])
UpdateCurrent --> CheckInterruptBefore
ReturnInterruptBefore --> End
ReturnInterruptAfter --> End

Diagram sources

Section sources

配置最佳实践 #

  1. 明确中断点:在配置 InterruptBeforeInterruptAfter 时,确保指定的节点名称准确无误。
  2. 状态管理:中断后应妥善保存当前状态,以便在恢复执行时使用。
  3. 错误处理:正确处理 GraphInterrupt 错误,提取必要的中断信息。
  4. 恢复配置:使用 ResumeFrom 字段指定恢复执行的起始节点。

Section sources

常见使用场景 #

Section sources

结论 #

langgraphgo 的中断配置机制为图执行提供了强大的控制能力。通过 InterruptBeforeInterruptAfter 配置,可以灵活地在指定节点前或后暂停执行流程,实现复杂的人机协作场景。结合 ResumeFromResumeValue 配置,能够构建完整的中断-恢复工作流,满足各种实际应用需求。