前言¶
在 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 不再侷限於文本,能夠直接與用戶進行結構化的交互。