elegymythos
exam-paper-plugin
DeepSeek Harness 插件:自动识别上传的 Word(.doc / .docx) / PDF / 纯文本 题目文件,抽取题目与配图,按你的选择生成一张带书写空隙的可打印试卷(.docx 可编辑 + .html 网页预览)。
- Stars
- 0
- Language
- Python
- Created
- Aug 15, 2026
- Updated
- Aug 15, 2026
Introduction
exam-paper-plugin
DeepSeek Harness 插件:自动识别上传的 Word(.doc / .docx) / PDF / 纯文本 题目文件,抽取题目与配图,按你的选择生成一张带书写空隙的可打印试卷(.docx 可编辑 + .html 网页预览)。
功能
- 自动解析题目:识别选择题 / 填空题 / 解答题 / 判断题,提取题干、选项和配图(按坐标关联到对应题目)。
- 按需抽题:先预览题目清单(带全局序号),再按序号选择要出的题。
- 生成可打印试卷:标题、卷头(姓名/班级/得分)、选择题可双列、每道题自动预留书写空隙(横线或空白、按题型定行数)。
- 双格式输出:
.docx(用 Word/WPS 打开打印)+.html(浏览器直接打印成 PDF)。
依赖
| 组件 | 用途 | 必需性 |
|---|---|---|
python3(Windows 为 python) | 引擎运行 | 必需 |
poppler-utils(pdftohtml、pdfimages) | 解析 PDF 文本与图片坐标 | 仅解析 .pdf 时需要 |
LibreOffice(soffice)或 antiword/catdoc | 解析旧版 .doc(前者保留配图,后者仅文字) | 仅解析 .doc 时需要 |
Python Pillow | 图片尺寸检测 | 可选(缺失用默认尺寸) |
.docx的解析用的是 Python 标准库zipfile,不需要unzip。
依赖均可选、不强制:缺失只影响对应文件类型,install.sh 会提示并由你选择是否安装。
一键安装
Linux / macOS
git clone https://github.com/elegymythos/exam-paper-plugin.git exam-paper-plugin
cd exam-paper-plugin
./install.sh
install.sh 会:
- 把插件(
plugin.mjs+exam_paper.py)安装到$DSH_HOME/plugins/exam-paper/(默认~/.dsh/plugins/exam-paper/)。 - 在插件目录建一个
node_modules/@deepseek-ai软链接,指向 Harness 自身的依赖作用域——这样plugin.mjs里的@deepseek-ai/dsh-tools裸导入才能解析(这些是 Harness 内置包,不在公开 npm 上)。 - 在
$DSH_HOME/.agent-presets/exam-paper/注册一个**「试卷生成」代理预设**(引用绝对路径)。 - 可选地检查并安装缺失依赖——会先询问,绝不强制。
install.sh 可选参数:
| 参数 | 作用 |
|---|---|
--with-doc | 同时询问是否安装 .doc 转换后端(LibreOffice 或 antiword/catdoc) |
--install-deps | 非交互地自动安装缺失依赖(best-effort) |
--skip-deps | 完全跳过依赖检查 |
--uninstall | 卸载 |
--help | 查看用法 |
Windows
双击 install.bat,或在 PowerShell 里:
powershell -ExecutionPolicy Bypass -File install.ps1
powershell -ExecutionPolicy Bypass -File install.ps1 -WithDoc # 询问安装 .doc 后端
powershell -ExecutionPolicy Bypass -File install.ps1 -InstallDeps
powershell -ExecutionPolicy Bypass -File install.ps1 -Uninstall
install.ps1 用**目录联接(junction)**替代软链接,无需管理员权限;依赖同样可选、不强制。
重新加载 Harness 后,新建会话选择「试卷生成」预设即可使用。
只想在现有预设里加这个能力?把下面一行加入你的
agent.cordis.yml即可(路径换成实际安装位置):- id: exam-paper name: '/home/<you>/.dsh/plugins/exam-paper/plugin.mjs'
使用
上传题目文件后,直接对 Agent 说:
解析 /path/to/数学试卷.docx 里的题目
会得到题目清单(含全局序号、题型、是否有配图)。然后:
要第 1、3、5 题,标题「数学单元测验(一)」,解答题留 8 行横线
生成的 .docx / .html 会写到会话工作区根目录。
两个工具
| 工具 | 作用 |
|---|---|
parse_question_file(files) | 解析题目文件,返回题目清单 |
generate_exam_paper(files, select, title, …) | 抽题并生成试卷 |
generate_exam_paper 关键参数:
files:源文件路径列表(必填)select:题目全局序号数组(省略=全部)title:试卷标题headerFields:卷头,默认["姓名","班级","得分"]blankLinesByType:各题型书写行数,如{"choice":1,"fill":4,"answer":8,"judge":1}ruledLines:横线(true)还是空白(false)optionColumns:选择题列数(1 或 2)
项目结构
exam-paper-plugin/
├── install.sh # 一键安装/卸载(Linux/macOS)
├── install.ps1 # 一键安装/卸载(Windows PowerShell)
├── install.bat # Windows 双击入口(调用 install.ps1)
├── preset.yml # 预设显示元数据
├── agent.cordis.yml # 预设组合(模板,安装脚本替换占位路径)
├── src/
│ ├── plugin.mjs # Cordis 主机插件(注册两个工具)
│ └── exam_paper.py # 文档解析 + 试卷生成引擎(Python)
├── README.md
└── LICENSE
工作原理
src/plugin.mjs是一个 ESM Cordis 插件,inject: ["tools","shell","fs"],用@deepseek-ai/dsh-tools的defineTool注册两个工具,通过shell服务调用 Python 引擎;会话工作区取自sandboxPolicy.resolve({session}).workspaceRoot,并把会话级沙箱策略传给 shell/fs 以正确读写。src/exam_paper.py无第三方依赖:.doc经 LibreOffice 转成.docx(缺失时用 antiword/catdoc 仅取文字);.docx用zipfile+ElementTree解出正文与word/media/*配图;.pdf用pdftohtml -xml取文本/图片坐标并按位置把配图关联到题目;.docx输出用 Python 标准库直接构造 OOXML。- 预设组合只消费宿主能力(persona / instructions / bash / fs / tools),不发布任何服务,因此无需
isolaterealm。