dsh-docx-format:让 DSH 生成的 Word 自动符合公文格式

前言

在 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 / 幻方无官方从属关系。

方式二:本地目录(开发调试)

  1. 将插件目录记为 <PLUGIN_DIR>。
  2. 在 profile 的 package.json 的 dependencies 增加 "dsh-docx-format": "link:<PLUGIN_DIR>"(或已发布版本如 "^1.0.0")。
  3. 同一 package.json 的 dsh.profile.bundles 追加 "dsh-docx-format"。
  4. 保证 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
羽毛球分组比赛记分
小程序二维码

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

小夜