前言¶
在 DSH 裏讓模型「畫一張 30° 斜面上的 2 kg 物塊受力圖」,常見結果是圖看起來正確,分量箭頭長度、直角頂點或光學元件畫法卻與題幹數字和敘述不一致,頁面仍能正常渲染,錯誤被靜默吞掉。單靠改 prompt 很難保證幾何與算術一致。
dsh-exam-fig 把配圖當作題幹參數的派生物:用參數計算長度與標註,再提供工具把「圖上實際畫出的 marks」與「題幹要求的標籤」做比對。下面介紹插件定位、能力與安裝用法。
這是什麼¶
dsh-exam-fig 是 DeepSeek Harness 的 host-only 插件(index.js + cordis.patch.yml + package.json),無 UI、無 client 半端;維護者爲 VixieTodd,許可證 MIT,社區目錄分類爲工作流。插件通過 Node 拉起 Python 繪圖棧,面向數學、物理、化學等考試類示意圖。
核心功能¶
插件暴露四個工具(名稱以 README 爲準):
exam_figure draw one figure from parameters
exam_figure_catalog what can be drawn, and with which parameters
exam_figure_check does the figure show everything the stem claims?
exam_figure_doctor is this install usable?
設計要點如下。
- 參數進、數值出。 例如
incline(theta_deg=30, G=1.55)自行計算G∥ = G sin 30°,箭頭長度來自計算結果,而不是另一步「大約畫多長」的自由度。 - 繪圖結果帶回 marks。 每次繪製返回實際放置的標籤列表;
exam_figure_check將其與題幹聲明比對,標錯頂點也會失敗,即使圖像觀感正常。 - 幾何與文字不一致可被算術抓住。 README 舉例:
Rt△ABC若在頂點 A 畫直角而題幹寫∠C = 90°,檢查會失敗。
Python 側覆蓋斜面、電路(schemdraw)、薄透鏡與凹面鏡、RDKit 分子骨架等模塊;另含 figcheck、可選 Word 公式(OMML)相關能力,詳見倉庫 python/examfig/ 目錄結構。
安裝與啓用¶
插件 不 自帶 Python wheels(體積與版本綁定原因),需先準備 vendor 目錄。
1. 安裝插件 bundle¶
在宿主環境執行(路徑改爲本機絕對路徑):
dsh plugin install /absolute/path/to/dsh-exam-fig
或在會話內:
plugin_manager action=install_bundle target=/absolute/path/to/dsh-exam-fig
2. 拉取 Python 依賴¶
進入插件目錄後執行(不經 pip,由 figdeps 解析 Requires-Dist 並解壓到 python/vendor/):
cd /path/to/dsh-exam-fig
python -m examfig.figdeps
驗證環境:
python -m examfig.cli doctor
期望得到類似 {"ok": true, "python": "...", "font": "...", "missing": [], "packages": {...}} 的 JSON;智能體側可調用 exam_figure_doctor 做同樣檢查。
3. 環境要求(摘自 README)¶
| 項 | 說明 |
|---|---|
| DSH | ^0.2.2-rc.1;需 tools 與 subprocess 服務 |
| Node | ≥ 20 |
| Python | 3.10+;默認用 DSH 自帶解釋器,可用 DSH_EXAMFIG_PYTHON 覆蓋 |
| 中文字體 | 缺字體會導致中文標註方框;exam_figure_doctor 會報告選用的字體 |
| Microsoft Office | 可選;提供 MML2OMML.XSL 時支持原生 Word 公式 |
常用環境變量:DSH_EXAMFIG_PYTHON、DSH_EXAMFIG_VENDOR、DSH_EXAMFIG_CACHE、DSH_EXAMFIG_MML2OMML。
注意: 插件在 當前 DSH 進程權限 下運行,會 spawn 本機 Python;安裝前請閱讀倉庫源碼與 MIT 許可證,確認路徑與依賴來源可信。開發測試以 Windows 爲主,macOS/Linux 在具備 CJK 字體時 README 稱應可用。
典型用法¶
繪製一類圖¶
exam_figure(kind="incline", params={"theta_deg": 30, "G": 1.55})
返回示例字段包括 ok、kind、path(如 .../examfig/incline.png)、marks(如 ["30", "G", "Gperp", "Gpar"])以及 detail 中的分量數值。
覈對題干與配圖標註¶
exam_figure_check(
specs=[{no: 1, need: ["G", "G_par", "G_perp", "30"], text: "如圖1,物塊重 G"}],
figures={1: {marks: ["G", "Gpar", "Gperp", "30"]}})
通過時輸出含 ALL PASS 及逐項一致說明;缺標時會點名缺失的 mark。
可先通過 exam_figure_catalog 查看支持的 kind 與各 params 定義,再調用 exam_figure。
架構簡述¶
Node 與 Python 僅以子進程 + JSON 銜接:index.js 執行 python -m examfig.cli <subcommand>,解析 stdout 最後一行 爲單個 JSON 對象;失敗時仍返回 {ok: false, error: ...}。python/vendor/ 在 env.bootstrap() 之後才加入 sys.path,繪圖模塊採用惰性註冊,避免在未裝依賴時導入即報錯。
適用場景與注意¶
適合:需要在智能體工作流中 批量、可復現 生成考題配圖,並在組卷或導出前做 圖文一致性 自動化校驗的開發者。
不適合:把配圖當作一次性插畫、不要求與題幹參數嚴格對應的場景;或未準備好 ~200 MB 級 Python vendor 與 CJK 字體的環境。
DeepSeek Harness 生態強調「一切皆插件」;SkillHub 目錄頁 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-exam-fig 將考題圖從「提示詞插圖」改爲「參數推導 + marks 回傳 + figcheck」,降低受力分解、標註錯位等靜默錯誤。進一步能力列表、figdeps 與 pip 取捨說明見倉庫文檔。
- 目錄頁:https://www.skillhub.cn/plugins/VixieTodd/dsh-exam-fig
- GitHub:https://github.com/VixieTodd/dsh-exam-fig