前言¶
在 DeepSeek Harness(DSH)里让模型写 .docx,常见做法是堆提示词约束字体、行距和页边距,或在生成后再手工改 Word。模型仍可能漏项,脚本产出的 docx 也不会自动对齐同一套规范。下面介绍 Romebody 维护的工作流插件 dsh-docx-format:把《通用公文格式规范》落到工具、提示词和结果钩子三层,排版引擎在 lib/docxfmt.py(python-docx),插件只负责调度。
这是什么¶
dsh-docx-format 面向 DSH 智能体与工作流:凡会话命中触发条件且产出 .docx 的路径,可自动或按需套用统一版式;也提供 docx_format、docx_read 供模型显式调用。插件已发布为 npm 包 dsh-docx-format(当前资料中 package 版本为 1.1.2,MIT 许可证)。社区目录页:skillhub.cn 插件页;源码:GitHub - Romebody/dsh-docx-format。
三层如何生效¶
任一层命中即可向规范靠拢;README 中的分工如下。
| 层 | 机制 | 作用 |
|---|---|---|
| 提示词 | systemPrompt.section(order 3260) |
生成 docx 前模型已知字体、字号、行距、缩进、页边距 |
| 工具 | docx_format |
mode=check 体检;mode=apply 规范化并写回 |
| 钩子 | tools/result 观察者 |
任意工具(含 ops_bash、技能脚本)产出 .docx 路径后自动排队规范化 |
核心能力(与 README 一致)¶
版式要点¶
- 页面 A4;页边距上 3.6cm、下 3.0cm、左 2.7cm、右 2.7cm。
- 正文仿宋三号(16pt),两端对齐,首行缩进 2 字符(
w:firstLineChars="200"),行距固定 29 磅,段前段后 0;空行用空段落表达,而非段前段后间距冒充。 - 大标题方正小标宋简体二号(22pt)居中;标题上 2 行、下 1 行空段。
- 一级标题黑体三号、二级楷体三号、三级仿宋三号;编号如「一、」「(一)」「1.」(全角点)。
- 数字与字母 Times New Roman;表格单元格段落水平与垂直居中;页脚页码「— N —」等细节见仓库 README「规范内容」一节。
请求门控与落款¶
默认 triggerKeywords 为 ["公文"]:只看当前会话最后一条用户消息,须含触发词才自动套版;未提「公文」时整条停用(钩子不排队、docx_format 返回 skipped,可传 force=true 强制处理)。将 triggerKeywords 设为空数组则任意请求都触发(旧行为)。提示词要求用户未要求署名/日期时不写落款;引擎只格式化文档里已有的落款,不凭空新增。
附件与 v2 引擎行为¶
附件缩进按 2 / 6 / 5 / 6 字符分段实现;长条目在装有 Word 或 WPS 时可用实测折行拆段,无 Word/WPS 时退回 attachSplit.mode="indent-only" 并提示「附件自动分段不可用」。重复 apply 幂等,check 稳定。
docx_read¶
纯标准库 lib/docx_read.py,不需 python-docx、不改原文件,便于模型读取已有 docx 正文(默认前 12000 字,可 max_chars / offset 续读)。
安装与启用¶
环境要求:Node ≥ 20;Python 3.9+ 与 python-docx(DSH 自带运行时中通常已有)。装了 Word 或 WPS 时附件自动拆段能力完整;没有则仅缩进、不拆段。
方式一:从 npm 安装(推荐)
dsh plugin --profile <profile> add dsh-docx-format
收录进插件市场后,也可在市场搜索 docx 安装。DSH 生态以「一切皆插件」为思路;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
方式二:本地目录(开发调试)
- 将插件目录记为
<PLUGIN_DIR>。 - 在 profile 的
package.json的dependencies增加"dsh-docx-format": "link:<PLUGIN_DIR>"(或已发布版本如"^1.0.0")。 - 同一
package.json的dsh.profile.bundles追加"dsh-docx-format"。 - 保证
node_modules/dsh-docx-format指向该目录后重启 dsh。
安装后可在启动日志中确认类似 [docx-format] ready python=... trigger=["公文"]。
典型用法¶
命令行(可脱离 DSH)¶
python lib/docxfmt.py 报告.docx --mode check
python lib/docxfmt.py 报告.docx --mode apply
python lib/docxfmt.py ./docs --mode apply --recursive
python lib/docxfmt.py 报告.docx --mode check --json
check 有偏差时退出码为 2。
模型侧¶
docx_format(path="C:/.../通知.docx", mode="apply")
docx_format(path="C:/.../通知.docx", mode="check")
docx_format(path="C:/.../公文目录", mode="apply", recursive=true)
docx_format(path="C:/.../通知.docx", mode="apply", force=true)
读取已有文档:
docx_read(path="C:/.../毕业论文.docx")
docx_read(path="C:/.../毕业论文.docx", max_chars=60000)
docx_read(path="C:/.../毕业论文.docx", offset=12000)
常用配置¶
默认值在 cordis.patch.yml,可通过 profile 覆盖。节选:
| 键 | 默认 | 说明 |
|---|---|---|
autoFormat |
true |
关闭后只保留工具与提示词 |
formatExisting |
false |
true 时连插件加载前的旧文件也处理 |
triggerKeywords |
['公文'] |
空数组 = 任何请求都触发 |
skipPatterns |
*格式要求* 等 |
路径命中则跳过自动改 |
debounceMs |
1200 |
结果钩子去抖 |
defaults |
{} |
透传给 docxfmt.py,覆盖引擎 DEFAULTS |
附件相关可写在 defaults 内,例如 attachSplit.enabled、attachSplit.mode(word / indent-only)、attachSplit.minCharsToMeasure(默认 20)等,详见 README「配置」表。
适用场景与注意¶
适合在 DSH 中批量生成或修订机关公文类 Word,且希望模型提示、显式工具与脚本产出三条路径共用同一套规范的团队或个人。写周报、简历等非公文 docx 时,默认因未命中「公文」而不会改文件,避免误伤。
插件以当前 dsh 进程权限运行 Python 子进程读写磁盘上的 docx;安装前应阅读 源码与许可证,确认 skipPatterns 与触发词符合本单位安全与合规要求。未生效时先重启 dsh,并查日志是否出现「本条请求未提「公文」 — 不自动格式化」。
结尾¶
dsh-docx-format 把公文版式从「靠模型记忆」变成可检查、可重复执行的引擎加 DSH 集成:提示词预防、工具纠偏、钩子兜底。需要细节时以 README 为准。
- 目录页:https://www.skillhub.cn/plugins/Romebody/dsh-docx-format
- GitHub:https://github.com/Romebody/dsh-docx-format