- 标准号
- DSHIO/T 21—2026
- 名称
- 測試條件
- 层级
- 方法标准
- 状态
- 草案
- 原文
- 简体中文
DSHIO/T 21—2026 測試條件
| 標準號 | DSHIO/T 21—2026 |
|---|---|
| 名稱 | 測試條件 |
| 版本 | v1.0(草案) |
| 發布 | 2026-11-07 |
| 實施 | 2026-11-07 |
| 狀態 | 草案 |
| 原文 | 簡體中文 |
| 層級 | 方法標準 |
1 範圍
本標準規定了 DSH 插件測試中各階段所處的環境條件、資源條件、網絡條件與時間條件。
本標準適用於任何依據 DSHIO 標準對插件作出判定的人或系統。
本標準不規定測試方法本身 —— 測試方法見 DSHIO/T 20。
為什麼需要這份標準。 沒有固定條件的測試結果只是一個人在某天某台機器上的印象。 有了固定條件,同一份測試報告才能被別人重現、被質疑、被複核。
2 規範性引用文件
下列文件中的條款通過本標準的引用而成為本標準的條款。
| 標準號 | 名稱 | 引用哪些條款 |
|---|---|---|
| DSHIO/T 00—2026 | 術語和定義 | 3.1.3(DSH 版本)、3.3.4(沙箱)、3.5.1(測試階段)、3.5.4(可複現性)、3.4.1(模型無關性) |
3 術語和定義
DSHIO/T 00—2026 界定的術語適用於本文件。
本文件補充定義:
3.1
固定條件 fixed condition
在一次測試中不得改變的環境因素。改變任何一項即構成一次新的測試,不得與原測試的結果互相比較。
3.2
浮動條件 variable condition
允許在同一次測試中改變的條件。浮動條件必須在測試報告中逐項記錄。
3.3
測試環境指紋 test environment fingerprint
一組足以唯一標識本次測試環境的值的集合,以字符串形式表示,供比對用。
例:
dsh=0.2.2-rc.1;img=dsh-sandbox:5.0@sha256:...;node=24.11.1;pnpm=9.15.9
4 條件分類
4.1 兩類測試條件
| 類別 | 適用階段 | 是否依賴模型 |
|---|---|---|
| 模型無關條件 | T0、T1、T2、T3、T4 | 否 |
| 模型相關條件 | T5 | 是 |
依據: DSHIO/T 00—2026 第 3.4.1 條 —— DSH 的安裝、掛載、啟動不依賴具體模型,模型接入由獨立插件提供。
意涵: T0–T4 的判定在任何模型下都成立;T5 的判定只在指定模型下成立。
5 模型無關條件(T0–T4)
5.1 固定條件清單
下列條件在 T0–T4 測試中必須固定,且必須寫入測試報告。
5.1.1 DSH 版本
| 項目 | 要求 |
|---|---|
| 取值形式 | dsh --version 原樣輸出 |
| 粒度 | 必須精確到預發布標識(如 0.2.2-rc.1,不得寫 0.2.2 或 0.2.x) |
| 判定依據 | 該字符串與插件 engines.dsh 的範圍是否匹配 |
當前基準版本: 0.2.2-rc.1
注: 寫成範圍(如「0.2.2 系列」)的報告不具備可複現性,不得作為認證依據。
5.1.2 容器鏡像
| 項目 | 要求 |
|---|---|
| 鏡像名 | dsh-sandbox:5.0 |
| 必須記錄 | 鏡像名 + digest(sha256:...) |
| 基礎系統 | node:20-slim 派生 |
鏡像內必須固定:
| 組件 | 版本 |
|---|---|
| Node.js | 24.11.1(安裝於 /opt/node24) |
| pnpm | 9.15.9 |
| DSH | 0.2.2-rc.1 |
為什麼要 digest。 tag 可被覆蓋,同名不同內容。沒有 digest,一年後無法重現。
5.1.3 資源限制
| 資源 | 限制值 | 適用階段 |
|---|---|---|
| 內存 | 768 MB | T1、T2、T3、T4 |
| CPU | 1 core | T1、T2、T3、T4 |
| 進程數 | 128 | T4 |
| 磁盤 | 不限制(容器疊加層) | 全部 |
T0(靜態檢查)不需要容器,無資源限制。
5.1.4 網絡狀態
| 階段 | 網絡 | 選項 |
|---|---|---|
| T0 | 不需要 | — |
| T1 安裝 | 需要有網 | 默認 |
| T2 列裝 | 必須斷網 | --network none |
| T3 掛載 | 必須斷網 | --network none |
| T4 啟動 | 必須斷網 | --network none |
為什麼 T2–T4 必須斷網。 安裝階段插件可從網絡獲取任意內容。斷網後,任何殘留的網絡請求都會失敗暴露; 同時即使插件有惡意行為,也無處發送資料。這是安全設計,也是可複現性設計。
5.1.5 權限與隔離
| 項目 | T1 | T2 | T3 | T4 |
|---|---|---|---|---|
--user node | ✅ | ✅ | ✅ | ✅ |
--cap-drop ALL | — | — | ✅ | ✅ |
--security-opt no-new-privileges | — | — | ✅ | ✅ |
--pids-limit 128 | — | — | — | ✅ |
說明: T1 需要安裝,保留 pnpm 所需的常規權限。T2 起逐步收緊。
5.1.6 超時
| 階段 | 超時 | 超時後的判定 |
|---|---|---|
| T1 安裝 | 180 秒 | 判 install_failed,首次錯誤記為 timeout |
| T2 列裝 | 90 秒 | 判 install_failed(列裝失敗視同安裝失敗) |
| T3 掛載 | 90 秒 | 判 config_failed |
| T4 啟動 | 90 秒(含 12 秒存活觀察) | 判 boot_failed |
T4 的 12 秒存活觀察: profile 啟動後需連續存活 12 秒不退出,才算通過。
12 秒從哪來。 足夠覆蓋插件初始化、配置加載與首次事件循環的常見失敗窗口; 更長會顯著拖慢批量測試,且實測中未見 12 秒後才失敗的模式。
5.1.7 工作目錄與 profile
| 項目 | 值 |
|---|---|
| 容器內 HOME | /home/node |
| DSH_HOME | /home/node/.dsh |
| 測試 profile 名 | web |
| profile 初始化 | 首次使用自動從出廠模板初始化 |
| 測試前狀態 | 必須是乾淨的(無既有插件依賴、無既有 patch) |
「乾淨」的判別: profile 目錄下 package.json 的 dependencies 除本次測試目標外無其他條目。
5.1.8 操作序列
T1–T4 的命令序列必須逐字一致:
# T1 安装(有网)
dsh plugin --profile web add <package-spec>
# T2 列装(断网)
dsh plugin --profile web list
# T3 挂载(断网)
dsh --profile web --dump-config
# T4 启动(断网,观察 12 秒)
dsh --profile web
不得插入、省略或改變順序。
5.1.9 重複次數
| 情形 | 最少次數 | 結果一致性要求 |
|---|---|---|
| 對外發布的判定 | 2 次 | 兩次判定必須完全相同 |
| 內部批量測試 | 1 次 | — |
兩次判定不同時:
- 判定記為「不穩定」(unstable)
- 必須記錄兩次的完整輸出
- 不穩定結果不得作為認證依據
5.2 模型無關條件下的測試環境指紋
生成規則:
dsh=<DSH 版本>;img=<镜像名>@<digest>;node=<node 版本>;pnpm=<pnpm 版本>;mem=<内存>;cpu=<CPU>
例:
dsh=0.2.2-rc.1;img=dsh-sandbox:5.0@sha256:abc123...;node=24.11.1;pnpm=9.15.9;mem=768m;cpu=1
指紋相同 = 條件相同。 指紋不同時,測試結果不可直接比較。
6 模型相關條件(T5)
6.1 為什麼要單獨規定
T5 測試「模型能否正確調用插件註冊的工具」。 這一階段的結果同時取決於插件和模型,換模型可能結論完全相反。
因此: T5 的判定必須綁定到具體模型才有意義。
6.2 固定條件
除第 5 章全部條件外,T5 還必須固定下列各項:
6.2.1 模型標識
| 項目 | 要求 |
|---|---|
| 必須記錄 | 模型 ID 與版本標識 |
| 禁止 | 只寫廠商名(如「DeepSeek」)或只寫系列名(如「V4」) |
| 示例 | deepseek-v4.1-flash-0731 |
6.2.2 生成參數
| 參數 | 必須記錄 |
|---|---|
| 溫度(temperature) | ✅ |
| 最大輸出(max_tokens) | ✅ |
| top_p(若使用) | ✅ |
| 是否開啟工具調用 | ✅ |
未記錄溫度與 max_tokens 的 T5 報告不具備可複現性。
6.2.3 提示詞
| 項目 | 要求 |
|---|---|
| 系統提示詞 | 全文記錄 |
| 測試提示詞 | 全文記錄 |
| 提示詞語言 | 記錄(中文/英文/其他) |
注: 提示詞的每個字元都影響模型行為。只寫「讓它調用工具」不構成可複現的條件。
6.2.4 工具調用配置
| 項目 | 要求 |
|---|---|
| 工具數量(同一輪可用的工具總數) | 必須記錄 |
| 是否啟用並行工具調用 | 必須記錄 |
| 工具選擇策略(若可配置) | 必須記錄 |
為什麼要記錄工具總數。 候選工具越多,模型選錯的概率越高。 「在 3 個工具中選對」和「在 200 個工具中選對」不是同一難度。
6.2.5 重複次數
| 情形 | 最少次數 |
|---|---|
| 對外發布的 T5 判定 | 3 次 |
| 內部評估 | 1 次 |
通過判據(二選一,必須在報告中寫明採用哪一條):
| 判據 | 定義 | 適用 |
|---|---|---|
| 全過 | 3 次全部正確調用 | 認證用 |
| 多數 | 3 次中至少 2 次正確調用 | 評估用,不得用於認證 |
為什麼 T5 的門檻比 T0–T4 高。 模型有隨機性,兩次通過可能只是運氣。
6.3 模型相關測試環境指紋
<模型无关指纹>;model=<模型ID>;temp=<温度>;maxtok=<最大输出>;tools=<工具总数>
例:
dsh=0.2.2-rc.1;img=dsh-sandbox:5.0@sha256:abc...;node=24.11.1;pnpm=9.15.9;mem=768m;cpu=1;model=deepseek-v4.1-flash-0731;temp=0;maxtok=4096;tools=7
7 測試報告的必填欄位
7.1 全部測試
| 欄位 | 必填 |
|---|---|
插件標識(npm 名或 github:owner/repo) | ✅ |
| 測試環境指紋 | ✅ |
| 測試時間(含時區) | ✅ |
| 各階段耗時 | ✅ |
| 判定 | ✅ |
| 首次錯誤(若失敗) | ✅ |
| 測試執行者標識 | ✅ |
7.2 T5 額外必填
| 欄位 | 必填 |
|---|---|
| 模型相關環境指紋 | ✅ |
| 系統提示詞全文 | ✅ |
| 測試提示詞全文 | ✅ |
| 每次嘗試的調用記錄 | ✅ |
| 採用哪條通過判據 | ✅ |
8 條件偏離的處理
8.1 什麼算偏離
改變第 5 章或第 6 章中任何一個固定條件的值,即構成偏離。
8.2 偏離的要求
偏離不禁止,但必須:
- 在報告中明確標示「條件偏離」
- 逐項列出偏離了什麼、改成什麼、為什麼
- 該報告的判定不得與未偏離的報告互相比較
- 不得作為認證依據
8.3 常見偏離
| 偏離 | 是否有意義 | 說明 |
|---|---|---|
| 換 DSH 版本 | ✅ 有 | 這正是要測的(跨版本兼容) |
| 換容器鏡像 | ⚠️ 謹慎 | 換了就不是同一環境,結果不可比 |
| 加大內存 | ⚠️ | 可能讓原本 OOM 的插件通過 |
| T2–T4 未斷網 | ❌ 不接受 | 破壞安全前提,結果無效 |
| 減少重複次數 | ❌ 不接受(認證用) | 見 5.1.9 與 6.2.5 |
| 未記錄模型參數(T5) | ❌ 不接受 | 結果不可複現 |
9 條件的穩定性
9.1 條件漂移的監測
每 30 天至少校驗一次下列項目是否與本標準一致:
| 項目 | 校驗方法 |
|---|---|
| 鏡像 digest | docker inspect --format='{{.Id}}' dsh-sandbox:5.0 |
| Node 版本 | 容器內 node --version |
| pnpm 版本 | 容器內 pnpm --version |
| DSH 版本 | 容器內 dsh --version |
發現漂移時:
- 舊測試結果標記為「條件已變更」
- 以新條件重測關鍵樣本
- 更新本標準或恢復條件
9.2 為什麼要監測
鏡像 tag 5.0 若被重新構建,同一 tag 下的 Node 版本可能變了。 沒有監測,測試結果會悄悄失去可比性。
附錄 A(規範性)條件速查表
| 項目 | T0 | T1 | T2 | T3 | T4 | T5 |
|---|---|---|---|---|---|---|
| 容器 | 不需要 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 網絡 | — | 有 | 無 | 無 | 無 | 有 |
| 內存 | — | 768m | 768m | 768m | 768m | 768m |
| CPU | — | 1 | 1 | 1 | 1 | 1 |
--user node | — | ✅ | ✅ | ✅ | ✅ | ✅ |
--cap-drop ALL | — | — | — | ✅ | ✅ | ✅ |
no-new-privileges | — | — | — | ✅ | ✅ | ✅ |
--pids-limit | — | — | — | — | 128 | 128 |
| 超時 | 30s | 180s | 90s | 90s | 90s | 300s |
| 重複次數 | 1 | 2 | — | — | — | 3 |
| 模型參數 | — | — | — | — | — | 必填 |
注: T2–T4 不單獨重複,它們包含在同一次 T1 後的序列中;「重複次數」指整個序列的執行次數。
附錄 B(資料性)與其他標準的關係
DSHIO/T 00 术语和定义
↓ 引用
DSHIO/T 21 测试条件(本文件)
↓ 被引用
DSHIO/T 20 测试方法总则 ← 规定每个阶段「做什么」
↓ 被引用
DSHIO/T 10 插件标准 ← 规定插件「要达到什么」
↓ 被引用
DSHIO/T 32 认证规则 ← 规定「怎么判定合规」
本標準只回答「在什麼條件下測」,不回答「怎麼測」和「什麼算合格」。
修訂記錄
| 版本 | 日期 | 變更 | 提出 | 參與 | 利益關聯聲明 |
|---|---|---|---|---|---|
| v1.0(草案) | 2026-11-07 | 首次發布 | DSHIO | DSHIO | DSHIO 運維的測試平台是本標準的唯一實施者;本標準規定的條件即該平台當前運行的條件,公開可核對 |