Skip to content

feat: add supports for dify hitl#2226

Open
fdc310 wants to merge 5 commits into
langbot-app:masterfrom
fdc310:feat/card_dify_human_input
Open

feat: add supports for dify hitl#2226
fdc310 wants to merge 5 commits into
langbot-app:masterfrom
fdc310:feat/card_dify_human_input

Conversation

@fdc310

@fdc310 fdc310 commented Jun 1, 2026

Copy link
Copy Markdown
Member

概述

实现 Dify 工作流中多个连续 human_input 节点的支持。此前每个会话只能同时挂起一个人工介入表单,后续的会覆盖前一个,导致按钮点击触发 412 错误(form already submitted)。本 PR 将挂起表单的存储改为按 form_token 索引的有序字典,支持同一会话中多个工作流表单并存。

改动内容

1. 多挂起表单存储(difysvapi.py)

  • _PENDING_FORMSdict[session_key, 单个form] 改为 dict[session_key, OrderedDict[form_token, form]]
  • 新增辅助函数:_get_pending_form_by_token(精确查找)、_get_pending_form_by_w_suffix(Telegram 64 字节兼容)、_get_latest_pending_form_iter_pending_forms(最新优先遍历)
  • _clear_pending_form 支持精确清单条或清整 session
  • 纯文本匹配遍历所有挂起 form,最新优先

2. 路由匹配改进(difysvapi.py)

  • 新增 _resolve_pending_form:按 form_token → workflow_run_id → w_suffix → 最新 的优先级查找
  • 按钮点击走精确匹配,纯文本走遍历(最新优先)

3. Lark 卡片:新卡承载 re-pause(lark.py)

  • 新增 _open_new_form_card:re-pause 时创建新卡片(新 card_id + reply),旧卡片保留为 resume 快照
  • 快照卡显示"节点标题 / 已选择:按钮标题"
  • node_title 通过 msg._resume_node_title 从 runner 透传到 adapter

4. Telegram 适配器修复(telegram.py)

  • Button callback 添加 w 字段(workflow_run_id 末 8 位),解决 64 字节 callback_data 限制
  • Handler 端读取 w 作为 w_suffix 透传给 runner
  • 合成 event 注入 source_platform_object=update,修复 assert isinstance(..., Update) 失败
  • update.message.message_thread_id 改为 update.effective_message + getattr,修复 callback_query 的 update.message 为 None
  • send_message_draft 添加 RetryAfterMessage_too_long 保护

5. Pipeline 兼容性

  • re-pause 的 final chunk content 为空时注入零宽空格,确保 ResponseWrapper 不跳过

修改文件

文件 说明
src/langbot/pkg/provider/runners/difysvapi.py 核心:多挂起存储 + 路由匹配 + node_title 透传
src/langbot/pkg/platform/sources/lark.py 新卡创建 + 选择标题 + 卡片渲染
src/langbot/pkg/platform/sources/telegram.py 按钮回调 + 合成 event + 流式保护
src/langbot/libs/dify_service_api/v1/client.py workflow_submit API 封装
src/langbot/pkg/pipeline/respback/respback.py 流式响应分发
src/langbot/pkg/platform/sources/lark.yaml 卡片模板更新

测试场景

  1. 单步人工介入 — 行为不变,点击按钮/文本匹配正常响应
  2. 连续多步人工介入 — 第一步选择后,旧卡定型为快照(标题+已选择),新卡出现新节点标题+按钮
  3. Telegram 群聊/私聊 — 按钮回调正常路由,消息流式输出不中断
  4. 过期表单 — TTL 自动清理,不会无限堆积

图片:
image
image

fdc310 added 5 commits May 28, 2026 23:32
- Added module-level storage for pending forms to manage state across sessions.
- Introduced functions to set, get, and clear pending forms with expiration handling.
- Enhanced DifyServiceAPIRunner to support resuming paused workflows via form actions.
- Implemented logic to yield human input requests and display appropriate messages.
- Updated workflow submission methods to handle paused states and resume actions.
- Ensured proper merging of pending form actions with user inputs for seamless interaction.
@dosubot dosubot Bot added size:XXL This PR changes 1000+ lines, ignoring generated files. eh: Feature enhance: 新功能添加 / add new features IM: Lark 飞书 Lark 适配器相关 / Lark adapter related pd: Need testing pending: 待测试的PR / PR waiting to be tested labels Jun 1, 2026
@TyperBody

Copy link
Copy Markdown
Member

#2216
image
想到了这个

@fdc310

fdc310 commented Jun 2, 2026

Copy link
Copy Markdown
Member Author

#2216 image 想到了这个

还是不一样,这个更偏向于人使用时候的一个人工的决策,你发这这个还是一个转人工的需求

@fdc310

fdc310 commented Jun 2, 2026

Copy link
Copy Markdown
Member Author
image
@TyperBody

Copy link
Copy Markdown
Member

#2216 image 想到了这个

还是不一样,这个更偏向于人使用时候的一个人工的决策,你发这这个还是一个转人工的需求

#1086
那这个iss

@fdc310

fdc310 commented Jun 9, 2026 via email

Copy link
Copy Markdown
Member Author
@RockChinQ

Copy link
Copy Markdown
Member

recheck

@github-actions

github-actions Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA. ✅ 所有贡献者均已签署 CLA。
Posted by the CLA Assistant Lite bot.

@fdc310

fdc310 commented Jun 17, 2026

Copy link
Copy Markdown
Member Author

I have read the CLA Document and I hereby sign the CLA

@RockChinQ RockChinQ changed the title feat: 支持多个人工介入节点的连续暂停工作流 Jun 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

eh: Feature enhance: 新功能添加 / add new features IM: Lark 飞书 Lark 适配器相关 / Lark adapter related pd: Need testing pending: 待测试的PR / PR waiting to be tested size:XXL This PR changes 1000+ lines, ignoring generated files.

3 participants