dsh-ui-html:在 DeepSeek Harness 中渲染沙箱化交互式 HTML

前言

在 DeepSeek Harness(DSH)的开发流程中,模型通常仅能生成文本。当需要展示表单、图表或需要用户输入的界面时,仅靠文本描述或单向的 dsh-visualize 无法满足闭环交互的需求。

dsh-ui-html 插件解决了这个问题。它允许模型在对话中渲染一个沙箱化的交互式 HTML 界面,并将用户的操作(如点击、选择)结构化地回传给模型,从而继续后续的处理流程。

核心功能

该插件主要提供以下能力:
* 沙箱化 HTML 渲染:在对话上下文中渲染 HTML 界面。
* show_ui 工具:模型通过此工具发起界面渲染。
* 双模式交互:支持非阻塞(默认)和阻塞两种等待模式。
* 结构化回传:用户操作通过 window.dsh.emit 提交,默认作为新用户消息,阻塞模式下作为工具结果。
* 主题变量注入:宿主侧可注入 CSS 变量供界面使用。
* 安全隔离:界面运行在沙箱化 iframe 中,默认禁止网络访问。

安装与启用

通过以下命令安装插件。安装后需要重启 DSH 以展开 bundle。

dsh plugin --profile <profile> add github:eaglezlee/dsh-ui-html

工具:show_ui

模型调用 show_ui 工具时,需提供以下参数:

参数 类型 说明
html string 必填。要展示的 HTML 片段或文档,支持内联 <style> 和 <script>。
title string 界面短标题。
description string 界面之上的说明文字,也是回退文本。
wait_for_interaction boolean 默认 false。true 时阻塞等待交互,交互作为工具结果返回。
interaction_hint string 提示用户如何操作。

界面渲染后,前端通过 window.dsh.emit(name, payload) 提交数据。

交互模式

  • 非阻塞模式(wait_for_interaction: false):界面立即展示,工具调用返回 presented。用户提交后,数据作为新用户消息进入下一轮对话。
  • 阻塞模式(wait_for_interaction: true):工具调用在当前轮内阻塞,直到用户提交或超时。交互内容作为工具结果返回。

返回状态

工具调用返回的状态包括 presented、interaction、timeout、cancelled、unsupported 等。

配置项

插件提供 7 项宿主侧配置,可在 DSH 设置页调整。修改后浏览器侧需刷新页面才能生效。

  • enabled:总开关。
  • announceToAgent:是否向 agent 系统提示声明本插件。
  • maxHtmlBytes:单次界面 HTML 最大字节数(默认 262144)。
  • maxEventBytes:单条交互事件 payload 最大字节数(默认 65536)。
  • interactionTimeoutMs:阻塞模式等待超时时间(毫秒),0 表示一直等待。
  • allowedResourceOrigins:允许加载的外部资源来源列表,默认为空(禁止网络访问)。
  • eventBridgeEnabled:交互事件回传开关。

安全模型

界面运行在 sandbox="allow-scripts" 的 iframe 中,拥有不透明源,无法访问宿主文档、Cookie、localStorage 或剪贴板。默认情况下无法访问网络资源,需通过 allowedResourceOrigins 配置白名单。

依赖与生态

  • 依赖:@deepseek-ai/dsh-llm 和 @deepseek-ai/schemastery。
  • 许可证:MIT。
  • 生态:DSH 插件体系的一部分,独立维护。

适用场景与注意

此插件适合需要在对话流中嵌入表单、选择器或可视化控件的开发者。使用时需注意,插件运行在当前 DSH 进程的权限下,建议在安装前检查源码与许可证。

总结

dsh-ui-html 建立了从模型到界面再到模型的数据闭环。它让 LLM 不再局限于文本,能够直接与用户进行结构化的交互。

GitHub 仓库
社区目录

羽毛球分组比赛记分
小程序二维码

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

小夜