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 倉庫
社區目錄

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

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

小夜