exam-paper-plugin:解析 Word/PDF 题目,并本地生成可打印试卷

前言

在 DSH 的插件工作方式里,很多重复文档任务可以拆成独立插件。出题流程里比较常见的痛点,是题目散在 .doc.docx.pdf.txt.md 文件里,需要人工识别题型、挑选题目、排版成可打印试卷;如果直接让模型读完整题库,上下文和 Token 消耗也会比较高。exam-paper-plugin 针对这个流程提供基础解析出卷,以及本地智能索引、聚类、检索和抽题。下面介绍它的能力、安装方式和常用命令。

这是什么

exam-paper-plugin 是 elegymythos 维护的 DeepSeek Harness 插件,许可证为 MIT。它把题目文件解析成可处理结构,按需抽题,并生成 .docx.html 试卷;智能引擎部分在本地做特征提取、聚类、向量检索和多样性重排。

核心功能

基础出卷

  • 自动解析 .doc / .docx / .pdf / .txt / .md 题目文件。
  • 识别选择题、填空题、判断题、解答题、作文等题型。
  • 提取题干、选项和配图;图片不处理内容,仅保留位置关联与 has_image 标记。
  • 支持 WMF/EMF 公式图:DOCX 输出补齐内容类型,HTML 输出自动转换为 PNG 预览。
  • 按需抽题并生成 .docx + .html 试卷。
  • 支持卷头、书写空隙、选择题双列等出卷配置。

智能引擎

  • 多视图特征提取:文本、分类、结构、统计。
  • HDBSCAN 自动聚类,支持离群点识别与聚类解释报告。
  • FAISS 向量索引与余弦相似度检索。
  • 分类硬过滤 + 向量召回 + MMR 多样性重排。
  • 提供 index_question_banksmart_select_questions 工具。
  • 提供 CLI 与 Python API,用于本地智能索引、聚类、检索与抽题。
  • 支持版本化评估工具和本地 Ollama Token 消耗评估。

安装与启用

插件依赖 @deepseek-ai/dsh-tools >=0.1.0-rc.0。按 DSH 插件方式安装时,可以使用仓库给出的 bundle 命令:

dsh plugin --profile <name> add "github:<owner>/exam-paper-plugin"

<name> 是 profile 名,<owner> 是仓库 owner,按实际环境替换。

智能引擎依赖集中在 requirements.txt。安装脚本默认创建 .venv 隔离 Python 依赖。如果未安装智能引擎依赖,原有 parse_question_file / generate_exam_paper 仍可使用。

典型用法

基础出卷

上传或指定题目文件后,可以对 Harness 会话说:

解析 /path/to/数学试卷.docx 里的题目

继续指定抽题和出卷参数:

要第 1、3、5 题,标题「数学单元测验(一)」,解答题留 8 行横线

这一步会按指定题目生成可打印试卷,输出包含 .docx.html

智能抽题

智能抽题使用 index_question_banksmart_select_questions 工具。对会话说:

用智能抽题从这些文件里选 5 道数学函数题

流程会先建立本地索引,再执行分类硬过滤、向量召回和 MMR 多样性重排,返回少量候选题。

CLI

独立运行智能引擎时,先初始化工作区:

python -m smart_engine.cli --workdir ./data/engine init

导入示例题目、建立索引和聚类:

python -m smart_engine.cli --workdir ./data/engine import data/sample/questions.json
python -m smart_engine.cli --workdir ./data/engine build-index
python -m smart_engine.cli --workdir ./data/engine cluster

检索和抽题:

python -m smart_engine.cli --workdir ./data/engine search --query "二次函数" --top-k 5
python -m smart_engine.cli --workdir ./data/engine select --query "二次函数" --count 3

版本化评估与本地 Ollama Token 评估:

python -m smart_engine.cli --workdir ./data/engine eval quick
python -m smart_engine.cli --workdir ./data/engine eval token --model deepseek-r1:1.5b --sample-questions 20 --num-ctx 16384

适用场景与注意

适合在本地维护题库、需要把 Word/PDF 题目转成可打印试卷、并希望减少完整题库进入大模型上下文的 DSH 用户。

使用前注意几点:

  • 插件以当前 dsh 进程权限运行。安装前应检查源码与许可证。
  • 图片只保留位置关联与 has_image 标记,不处理图片内容。
  • 智能引擎不引入难度维度。
  • 基础解析引擎继续零第三方依赖;智能引擎依赖集中在 requirements.txt,默认通过 .venv 隔离。
  • 真实试卷等大文件建议放在 data/ 下,但已被 .gitignore 排除;智能引擎运行数据位于 data/engine*/ 或会话工作区 .exam-paper/,同样不会提交。

结尾

exam-paper-plugin 把“解析题目、抽题、生成可打印试卷”放到本地插件里处理,再用智能引擎做索引、聚类、检索和多样性重排,适合作为 DSH 出题流程的基础能力。可以在 DeepSeek Harness 社区目录按 exam-paper-plugin 查找,也可以访问 GitHub 仓库:

https://github.com/elegymythos/exam-paper-plugin.git

羽毛球分组比赛记分
小程序二维码

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

Xiaoye