dsh-plugin-auto-answer:无人值守时自动应答 ask_user_question

前言

在 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 会话;希望模型在带「推荐」标记时默认走推荐路径,又保留人工窗口的场景;工作流类自动化编排。

使用前请知悉:

  1. 插件以当前 dsh 进程权限运行,安装前请阅读源码与 MIT 许可证,自行评估是否接受自动代答策略(尤其 planReview 与 fallback: none 以外的行为)。
  2. 自动选择的是带推荐标记的文案(或无标记时的 first/last),不等同于「永远选对」;敏感决策仍应缩短窗口、设 planReview: ignore 或关闭 enabled。
  3. 替换插件文件后记得重启 dsh web。
  4. 与 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜