前言¶
在 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