前言¶
在 DeepSeek Harness(DSH)里,智能体若要让用户从若干候选项里只选一项,通常会用到内置的 ask_user_question。该工具会在当前轮次内阻塞,直到用户作答。若选项里需要缩略图、试听音频,或希望先发出卡片、等用户点选后再进入下一轮对话,dsh-choice 提供的是另一条路径:在会话流里插入一块单选面板,工具调用立即返回,选择结果以普通聊天消息回传。
下面按定位、能力、安装、用法和注意事项说明该插件。
这是什么¶
dsh-choice(npm 包名 @machine202502/dsh-choice)由维护者 machine202502 发布,分类为客户端插件。它在 DSH 聊天界面中渲染单选看板,与内置 ask_user_question 并列出现;每个选项可以是纯文本、图片或声音。用户在某一行按下勾选后,其余行失效,所选内容作为一条普通消息发送,从而开始下一轮对话。
核心功能¶
工具接口¶
智能体通过下列调用展示看板:
ask_user_choice({ title, subtitle?, options, noneLabel? })
各字段含义:title 为卡片标题;subtitle 可选;options 为选项数组;noneLabel 可选,用于末尾「以上都不是」一类行的文案。
交互行为¶
- 每块看板只能选一次:选中行的勾选按钮生效后,其他行不可再点。
- 可选「以上都不是」:由
noneLabel提供文案的尾部一行。 - 选定之后,声音与图片预览仍可使用。
- 非阻塞:与
ask_user_question不同,本工具调用后立即返回,不占用当前轮次等待用户输入。 - 子智能体不可用:仅主智能体可展示看板;若由被其他在线智能体托管的调用方发起,会拒绝并提示人机交互不可用。
卡片上可见的文案(标题、副标题、选项标题与描述、noneLabel)均由智能体按对话语言提供;插件自带的「选择」「播放」「打开」等按钮文案遵循下文语言设置。
卡片 UI¶
每一行约 52 px 高的预览区(图片缩略图或 ▶ 播放按钮)、标题与描述,右侧为圆形勾选按钮。点击图片可放大;点 ▶ 使用普通 Audio 播放声音。用户确认选项后,编辑器中原有草稿文本保留,选择结果单独作为一条消息发出。
选项结构¶
{
"kind": "text", // 必填: text | image | audio
"title": "Keep as is", // 行标题
"description": "…", // 可选第二行
"value": "…", // 发送到聊天的文本(默认等于 title)
"src": "C:\\sounds\\a.wav" // image/audio: http(s) URL 或本地绝对路径
}
本地图片或音频会被复制到 %LOCALAPPDATA%\dsh-choice\media,并通过本机回环地址提供访问。
本机 Bridge¶
插件在 127.0.0.1:49236 提供 HTTP 服务:
| Method | Path | 用途 |
|---|---|---|
| GET | /status |
端口与 media 计数 |
| GET | /media/<file> |
提供图片或音频 |
| POST | /attach |
复制本地文件并返回 URL |
| GET | /settings |
读取已存设置(language) |
| POST | /settings |
保存 language:ru、en、zh 或 auto |
界面语言¶
在插件行配置(plugins.row.config)中可选择界面语言:Русский、English、中文或 Авто。值写入 %LOCALAPPDATA%\dsh-choice\settings.json,无需重启即可作用于卡片与表单。
解析顺序为:
- 已保存的
language为ru、en或zh时直接使用; auto时跟随应用语言:先document.documentElement.lang,再navigator.language;ru*→ ru,zh*→ zh,其余 → en;- 未存储时默认为
ru。
可在 Plugins → Choice 中修改。卡片正文仍由智能体按对话语言填写,仅插件自带控件文案跟随上述规则。
安装与启用¶
在 DSH 依赖配置中加入包版本(以 README 为准):
"@machine202502/dsh-choice": "^0.1.1"
并将 dsh-choice 加入 dsh.profile.bundles。主机侧(host)加载需重启 DSH;客户端侧随页面刷新即可。package.json 中当前发布版本为 0.1.2,引擎要求 Node >=20,许可证 MIT。
DSH 生态奉行「一切皆插件」;社区目录站点 skillhub.cn 与 DeepSeek、幻方无官方从属关系,安装前请自行核对源码与许可证。插件在本机 dsh 进程权限下运行。
典型用法¶
智能体在需要用户从多个方案(含配图或试听)中做唯一选择时,调用 ask_user_choice,构造 options 数组。文本项只需 kind: "text" 与 title(及可选 description、value)。图片或音频项设置 kind 为 image 或 audio,src 为 HTTPS 地址或 Windows 本地绝对路径;本地文件经 Bridge 的 /attach 流程进入 media 目录后再展示。
若需要允许用户明确表示「都不选」,传入 noneLabel,看板末尾会出现对应行。
示例骨架(字段名与 README 一致,选项内容需按实际对话填写):
{
"title": "请选择要保留的配置",
"subtitle": "只能选一项",
"noneLabel": "以上都不适用",
"options": [
{
"kind": "text",
"title": "保持现状",
"description": "不修改当前配置",
"value": "keep"
},
{
"kind": "image",
"title": "方案 A 示意图",
"src": "https://example.com/a.png"
},
{
"kind": "audio",
"title": "方案 B 试听",
"src": "C:\\sounds\\b.wav"
}
]
}
调用后工具立即返回;用户点选后,聊天流中出现代表所选 value(或默认 title)的消息,后续轮次可据此继续推理。
适用场景与注意¶
适合:需要在同一会话里展示带图、带音的单选题;希望不阻塞当前 tool 轮次;主智能体直接与用户交互的场景。
注意:
- 子智能体调用会被拒绝,编排时勿把该工具下放给子 agent。
- 本地媒体依赖
%LOCALAPPDATA%\dsh-choice\media与127.0.0.1:49236,部署或安全策略需允许本机回环访问。 - 界面语言默认与
auto规则见上文;中文用户可在插件设置中选「中文」或「Авто」。 - 安装命令与版本以项目 README 与 npm 包为准,勿凭仓库名自行拼接
dsh plugin add github:...一类未经文档记载的命令。
结尾¶
dsh-choice 在 DSH 聊天中补上「单选看板 + 图文音选项 + 非阻塞回传」这一小块交互能力,与 ask_user_question 形成互补。进一步了解可访问社区目录页与源码仓库:
- 目录页:https://www.skillhub.cn/plugins/machine202502/dsh-choice
- GitHub:https://github.com/machine202502/dsh-choice