SuperAPI AI 工具集

langgraph-human-in-the-loop

智能体与模型

查看项目

更新于 10-29 04:36

技能介绍

该技能面向使用 LangGraph 构建工作流的开发者,说明如何在图中插入人工介入环节:暂停执行、等待人工输入或审批,再根据结果继续运行。资料内容以代码示例和注意事项为主,覆盖 Python 与 JavaScript 两种实现。

用途 用于实现人机回环模式,包括暂停等待审批、采集并校验人工输入,以及处理可由用户修复的错误。资料指出:用户可修复的错误通过 interrupt() 暂停并收集缺失数据的方式处理;更完整的四层错误处理策略(RetryPolicy、Command 错误循环等)不在本技能范围内。

主要能力

  • interrupt(value):暂停执行,并把传入的值展示给调用方。
  • Command(resume=value):恢复执行,恢复值成为 interrupt() 的返回值。
  • Checkpointer:暂停期间保存状态,开发环境可用 InMemorySaver(),生产环境可用 PostgresSaver。
  • Thread ID:通过 {"configurable": {"thread_id": "..."}} 标识要恢复的暂停执行。

资料强调中断生效需要三个条件:已配置 Checkpointer、传入 Thread ID、传给 interrupt() 的载荷可 JSON 序列化。

使用方式 资料给出多种模式的代码示例:

  1. 基础中断与恢复:节点内调用 interrupt() 提问,首次 invoke 返回 interrupt,再用 Command(resume=True) 恢复,恢复值写入状态。
  2. 审批工作流:在人工审核节点中用 interrupt() 展示邮件草稿与紧急程度,根据人工决定通过 Command(update=..., goto=...) 路由到发送或结束。
  3. 校验循环:在 while 循环中调用 interrupt() 获取年龄,输入无效时以更明确的提示重新中断,每次 Command(resume=...) 提供下一次答案。
  4. 多个中断:并行分支各自调用 interrupt() 时,用中断 ID 到恢复值的映射一次性恢复全部待处理中断。

适用场景 包括需要人工审批的自动化流程(如邮件回复审核)、需要人工填写或校验数据的表单式节点,以及并行分支均需人工输入的图工作流。

限制与注意事项

  • 恢复时节点从头重新执行,interrupt() 之前的代码会再次运行;子图中含中断时,父节点与子图节点都会重新执行。
  • 因此 interrupt() 之前的副作用必须幂等:使用 upsert 而非 insert、先检查再创建,或把副作用放到 interrupt() 之后、拆分为独立节点。
  • Command(resume=...) 是唯一应作为 invoke()/stream() 输入的 Command 模式;传入 Command(update=...) 会从最新检查点恢复并表现为卡住。
  • 常见错误包括:编译时未配置 checkpointer、恢复时未使用相同 thread_id、恢复时传入普通字典而非 Command(resume=...),以及假设 interrupt() 之前的代码只执行一次。

未提供的信息 资料未说明该技能的安装命令、许可协议、版本要求或收费方式,这些内容暂未提供。