dsh-exam-fig:從題目參數推導考題配圖,並覈對圖文一致

前言

在 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?

設計要點如下。

  1. 參數進、數值出。 例如 incline(theta_deg=30, G=1.55) 自行計算 G∥ = G sin 30°,箭頭長度來自計算結果,而不是另一步「大約畫多長」的自由度。
  2. 繪圖結果帶回 marks。 每次繪製返回實際放置的標籤列表;exam_figure_check 將其與題幹聲明比對,標錯頂點也會失敗,即使圖像觀感正常。
  3. 幾何與文字不一致可被算術抓住。 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
羽毛球分组比赛记分
小程序二维码

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

小夜