LangGraph HITL 实战:从 interrupt 到 useStream 的最小闭环

Human-in-the-loop(HITL)是 Agent 落地时绕不开的一环:模型能自己跑,但关键动作得让人点个头。LangGraph 把这套机制做成了 interrupt + useStream 的组合,后端抛问题、前端答问题,流程自动恢复。下面用一个"搜索前审批"的例子,把用法讲清楚。

一、后端:用 interrupt 把问题抛出去

python

makefile 复制代码
queries = [state["messages"][-1].tool_calls.get("query") for call in calls]
approved = interrupt({
    "question": "模型想搜索以下内容,是否允许?",
    "queries": queries,
})

三件事值得注意:

  1. interrupt 接收任意可序列化的 dict ,它会原样传给前端。这里传了 question 和 queries 两个字段,前端就能拼出一句完整的提示。
  2. interrupt 的返回值就是前端 respond 回来的值 。用户点"确定",approved 就是 true;点"取消",就是 false。后端拿到这个值,就能决定后续走哪条分支。
  3. 抛 interrupt 的位置很关键------要放在"模型已经决定要调工具、但工具还没执行"的窗口期。这样人审批的是"意图",而不是"已发生的结果",拦截才有意义。

二、前端:用 useStream 接住问题并回传

js

javascript 复制代码
const stream = useStream({ assistantId, apiUrl: () => apiUrl.value })
const pendingInterrupt = computed(() => stream.interrupt.value?.value ?? null)

watch(pendingInterrupt, (val) => {
  let res = confirm(val.question + val.queries.join(","))
  stream.respond(res)
})

拆解一下:

  • stream.interrupt 是一个响应式引用,后端一抛 interrupt,它就会更新,里面带着后端传过来的 payload(即 question 和 queries)。
  • watch 监听它 ,一旦有新的中断就弹窗。这里用 confirm 是最简单的交互,val.question + val.queries.join(",") 拼出提示文案。
  • stream.respond(res) 把用户的答案回传给后端。这个值会作为 interrupt(...) 的返回值,让后端节点从暂停处继续执行。

三、这个闭环的完整时序

  1. 模型决定调用搜索工具,生成 tool_calls。
  2. 节点执行到 interrupt(...),LangGraph 暂停当前图,把 payload 推给前端。
  3. 前端 useStream 收到中断,watch 触发 confirm 弹窗。
  4. 用户点确定/取消,stream.respond(true/false) 发回后端。
  5. 后端 interrupt 返回该值,赋给 approved,节点继续往下跑。

四、用法要点小结

角色 做什么 关键 API
后端 在需要人决策的位置抛问题 interrupt(payload),返回值即用户答复
前端 监听中断、展示、回传 stream.interrupt、stream.respond(value)
连接 payload 和后端返回值是同一个值 前后端字段要约定好

这就是 HITL 的最小可用闭环:后端 interrupt 抛问题,前端 useStream 接问题,respond 回答案,图自动恢复 。掌握这个模式,你就可以把 confirm 换成审批表单、把布尔值换成结构化对象,按业务需要扩展交互粒度。

后端interrupt断点所在的函数会在用户确认后重新执行,所以会执行两遍

相关推荐
kyriewen10 分钟前
AI 能把页面写出来,为什么改个需求就开始崩?
前端·javascript·人工智能
张彦峰ZYF1 小时前
浏览器调试接口的官方化:从 chrome-devtools-mcp 看 Agent 原生工具层的形成
人工智能·chrome·agent·mcp·apache-2.0许可·devtools-mcp·调试闭环
Dawson Zhu1 小时前
Queen Planner深度解析:Agent竞争从模型时代进入系统时代
人工智能·语言模型·架构·aigc·agi
甲维斯1 小时前
GPT6.2Astra也很强啊,国模...!
人工智能
承渊政道2 小时前
Fooocus本地AI绘图教程:Windows部署、低门槛生图与远程访问
人工智能·windows·cpolar·fooocus·生图
熊猫钓鱼>_>2 小时前
普通用户视角的端侧智能体验手记【鸿蒙心迹】
开发语言·人工智能·华为·智能手机·性能优化·ai编程·harmonyos
AI算力3 小时前
私有云时代来临:AI NAS如何重塑你的数字生活?
人工智能·科技·ai·生活·nas·ai算力·ainas
程序员cxuan3 小时前
讲真,智能路由这事儿,还得看基元律动
人工智能·后端·程序员
zixu_star3 小时前
定时任务是什么?从日常自动化到 AI 应用,软件如何自动执行任务?
运维·人工智能·自动化