前言¶
在 DSH 里跑智能体时,模型有时会通过 ask_user_question 向用户提问。若工具因网络、超时或用户侧中断而停在 TOOL_OUTCOME_UNKNOWN、TOOL_NOT_STARTED 或 ASK_ABORTED,会话里往往只剩一条失败或未完成的工具记录,原问题参数还在,但官方 UI 不一定还能继续作答。常见做法是手动在输入框里复述选项、或改 prompt 重跑——既容易和上下文脱节,也不利于保留「这是对某次提问的回复」这一语义。
下面介绍社区插件 dsh-question-recovery(界面显示名:英文 Question recovery,中文 提问恢复),由 vb2250158 维护。它在不改动 DSH 官方源码的前提下,仅在上述可恢复错误且问题参数有效时,重新展示题目与选项,并通过官方会话 API 发送补充回答。
这是什么¶
dsh-question-recovery 是面向 DSH Web 客户端 的独立插件(当前 package 版本 0.1.5,MIT 许可证)。正常完成、等待或取消的 ask_user_question 仍走官方组件;插件只接管「工具 outcome 未知 / 未启动 / 提问被中止」且参数仍合法的那几类卡片。
设计原则在 README 里写得很清楚:不伪造旧工具成功、不改历史日志、不替用户自动勾选;用户点「发送补充回答」后,通过 scope.conversation.send 向原会话追加一条新的用户消息。
核心功能¶
可恢复的错误类型¶
插件会在以下 outcome 且问题参数有效时介入:
TOOL_OUTCOME_UNKNOWNTOOL_NOT_STARTEDASK_ABORTED
此时界面会展示原问题文案,以及单选、多选或自由文本(与参数类型一致)。
与官方 UI 的分工¶
- 非上述异常路径:行为与未装插件时一致,仍用官方提问 UI。
- 介入路径:在工具卡片上提供补答入口;发送逻辑走官方会话通道,而不是本地「假装工具已成功」。
发送与草稿行为¶
- 用户填写或选择后点击「发送补充回答」。
- 发送过程中有防重复提交;若失败,保留已填内容并展示错误。
- 原聊天输入框里的草稿不会被插件覆盖。
- 网页刷新会清掉尚未发送的卡片内选项;已发送的消息由官方会话持久化,不受插件单独存储。
依赖与平台¶
插件通过 Cordis patch 注入 Web 客户端,并声明对以下官方包的 peer 依赖(需 DSH 0.2.1-alpha.1 或兼容的 0.2 系列,详见仓库 docs/dsh-0.2-compatibility.md):
@deepseek-ai/dsh-client-ui-tool@deepseek-ai/dsh-client-ui-user-questions@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-session
仓库内测试覆盖:可恢复错误识别、无效参数拒绝、正常提问回退;真实会话发送需在页面上验收。
安装与启用¶
安装命令来自仓库 README,须将 <commit> 换成本仓库的完整提交号(插件代码与运行产物随 Git 交付;用户设置、凭据与聊天记录不在仓库内):
dsh plugin --profile web add github:vb2250158/dsh-question-recovery#<commit>
完成安装后:
- 重启 DSH 进程。
- 刷新浏览器页面,使 Web 客户端加载新插件。
说明:本插件面向 --profile web;新增客户端能力依赖官方提问 UI 与工具卡片插件,请确保当前 DSH 版本满足上述 0.2 兼容要求。
典型用法¶
插件没有单独的 CLI 子命令,用法嵌入在对话流里:
- 智能体调用
ask_user_question,因上述三类 outcome 之一导致提问未完成。 - 在对应工具卡片上查看恢复出的题目与选项(或文本框)。
- 选择或输入后点击「发送补充回答」。
- 原会话中出现一条新的用户消息,后续轮次由模型与官方会话逻辑继续处理。
若 outcome 正常或参数无效,插件不会展示恢复 UI,行为与官方默认一致。
适用场景与注意¶
适合谁
- 经常在 DSH Web 里调试带
ask_user_question的智能体或工作流,且会遇到工具中断、超时或用户中止的开发者。 - 希望在同一 session 里用显式用户消息补答,而不是改历史或伪造工具结果的人。
使用前请注意
- 插件以当前 DSH 进程的权限运行;安装前应阅读 GitHub 仓库 源码与 MIT 许可证,并自行评估是否纳入你的环境。
- 未发送的卡片状态不跨刷新持久化;重要回答发送后应依赖官方会话记录。
- 社区目录 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本插件是其中一项可选能力。
结尾¶
dsh-question-recovery 解决的是「提问工具异常终止后如何合法、可审计地补答」:只在少数错误 outcome 下扩展 UI,发送仍走官方 scope.conversation.send。若你的 Web 场景里常被中断的 ask_user_question 卡住,可按 README 的安装命令固定到具体 commit 后启用。
- 目录页:https://www.skillhub.cn/plugins/vb2250158/dsh-question-recovery
- 源码与说明:https://github.com/vb2250158/dsh-question-recovery