前言¶
在 DeepSeek Harness(DSH)里跑智能体时,模型有时会调用 ask_user_question 向人确认选项。你盯着页面点选,这很自然;但若会话挂在后台、跑 headless,或你只是暂时离开,问题会一直挂着,整轮对话就卡在那里。常见做法是缩短超时、改提示词少问人,或干脆守着终端——各有代价。
dsh-plugin-auto-answer 是社区维护的 Host 侧工作流插件:在可配置的时间窗内若没有人作答,就由插件代为提交带「推荐」标记的选项,让无人值守会话继续往下走;若你在窗口内正常回答,你的选择原样生效,插件不会插手。
这是什么¶
- 名称:dsh-plugin-auto-answer(目录与 GUI 中常显示为「无人值守自动应答」)
- 维护者:AK-blank
- 分类:工作流
- 许可证:MIT(见仓库
package.json) - 定位:非官方 DSH 插件;纯 Host bundle,不在页面里渲染 UI,无浏览器半部、无额外依赖。
它解决的是:ask_user_question 在 user-questions/request 瀑布链上若迟迟无人应答,会话停滞的问题。插件在链前注册(prepend),作为代理调用 next(),而不是一票否决后续处理。
核心功能¶
超时与人工作答的优先级¶
| 情况 | 结果 |
|---|---|
| 人在时间窗内作答 | 以人的答案为准,不变 |
| 窗内无人作答 | 提交「推荐」选项 |
下游应答失败(如无页面时的 NO_PROVIDER) |
继续等待窗口,到期后提交推荐项 |
工具自身已超时(ASK_TIMED_OUT) |
立即提交推荐项,而不是返回 pending |
回合被取消(ASK_ABORTED 等) |
向上传播,插件不会自动作答 |
监听使用 { global: true, prepend: true }。global 不能省略:经插件管理器安装的插件落在单个 agent 作用域内,没有全局标志时,只能影响安装它的那一次会话。
「推荐」选项如何识别¶
- 选项文案以
(Recommended)、(推荐)、(推荐)或(Recommended)结尾(大小写不敏感),不必排在第一项。 - 提交时保留原文标签(含推荐标记),因为那就是 asker 提供的值。
- 多选题:所有带推荐标记的项都会选中。
- 没有任何标记时由
fallback决定:first(默认)、last,或none(不自动答,留给人工)。 - 无选项的题:
freeText: skip提交空选择(协议意义上的「跳过」);block则保持开放。 plan-review类意图默认忽略(批计划有后果);需显式配置planReview: approve或decline才会介入。- 一批问题里只有全部都能自动作答时才会整批提交,避免部分自动、部分等人造成决策被掩盖。
明确不在范围内¶
插件不处理 approval/request(工具审批)。自动批准命令属于另一风险级别,作者刻意未纳入。
安装与启用¶
安装命令来自仓库 README(无需构建,源码即产物):
# 从 GitHub 安装
dsh plugin --profile web add github:AK-blank/dsh-plugin-auto-answer
# 本地开发目录(绝对路径)
dsh plugin --profile web add /absolute/path/to/dsh-plugin-auto-answer
dsh plugin add 会把包写入 profile 并选中对应 bundle 层;在 GUI 的 Plugins 页面可见,也可用 dsh --profile web --dump-config 查看(# == dsh-plugin-auto-answer → id: auto-answer)。
新装 bundle 会通过 HMR 激活。若替换已安装的同插件副本,需要重启 dsh web:Host 模块按进程缓存,lib/index.js 变更不会因 re-apply 而重载。
社区目录页:https://www.skillhub.cn/plugins/AK-blank/dsh-plugin-auto-answer
源码与说明:https://github.com/AK-blank/dsh-plugin-auto-answer
目录站点为社区生态索引,与 DeepSeek / 幻方无官方从属关系。
配置¶
各键均可选;profile 里该插件行的 config 覆盖默认值。
| 键 | 默认值 | 含义 |
|---|---|---|
enabled |
true |
总开关;false 时不注册监听 |
timeoutSeconds |
120 |
自动作答前等待秒数(5–86400) |
fallback |
first |
无推荐标记时:first | last | none |
freeText |
skip |
无选项题:skip | block |
planReview |
ignore |
计划审查:ignore | approve | decline |
在 profile 的 cordis.patch.yml 中,于各 bundle 层之后追加示例:
- id: auto-answer
name: 'dsh-plugin-auto-answer'
config:
timeoutSeconds: 90
fallback: first
若工具侧启用了自带的 timed 模式,请把 timeoutSeconds 设得小于 tool-ask-user 的超时;否则工具会先返回 pending,本插件的自动作答可能用不上。默认的阻塞式工具无此约束。
可观测性¶
dsh web 的 Host 日志通常不在终端里直接看到,插件支持可选 JSONL 追踪:
DSH_AUTO_ANSWER_LOG=/tmp/auto-answer.jsonl dsh web
事件类型包括 armed、answered、delegated(人工作答)、delegate_error、failed。追踪路径写失败不会影响对应问题的处理。
典型行为与 UI 说明¶
README 记录了在真实 Host 上的端到端验证(默认阻塞式工具):无人值守时 20 秒窗口到期后 trace 出现 armed → answered,回合正常结束;有人值守时在窗口内选手动选项,trace 为 armed → delegated,人工选项生效。
已知 UI 行为(设计如此,非缺陷):浏览器仍附着时,自动作答后问题卡片可能仍留在画面上,会话行也可能继续显示「等待回答」。Host 侧已记录答案并继续回合,Stale 卡片属于 Client 状态。可点「提交」「跳过」或刷新页面收起;对已结算的请求再次提交不会注入迟到的答案(作者已验证)。Host 插件无法单方面移除该卡片,若需自动关闭需 Client 侧能力。
离线自检可运行:
node selftest.mjs
(README 称约 39 项检查,覆盖配置归一化、推荐规则、定时竞态等。)
适用场景与注意¶
适合:长时间无人看管的 dsh web / headless 会话;希望模型在带「推荐」标记时默认走推荐路径,又保留人工窗口的场景;工作流类自动化编排。
使用前请知悉:
- 插件以当前
dsh进程权限运行,安装前请阅读源码与 MIT 许可证,自行评估是否接受自动代答策略(尤其planReview与fallback: none以外的行为)。 - 自动选择的是带推荐标记的文案(或无标记时的 first/last),不等同于「永远选对」;敏感决策仍应缩短窗口、设
planReview: ignore或关闭enabled。 - 替换插件文件后记得重启
dsh web。 - 与
tool-ask-user的timed超时要对齐,见上文配置说明。
结尾¶
dsh-plugin-auto-answer 把「等人点选」变成「超时则按推荐项继续」,是 DSH「一切皆插件」思路下、面向无人值守会话的一块 Host 工作流组件。需要安装命令、配置表与边界说明时,以 GitHub README 为准。
- 社区目录:https://www.skillhub.cn/plugins/AK-blank/dsh-plugin-auto-answer
- 仓库:https://github.com/AK-blank/dsh-plugin-auto-answer