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
羽毛球分组比赛记分
小程序二维码

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

小夜