dsh-tool-hongtou:两阶段流水线生成标准红头公文

前言

在 DeepSeek Harness(DSH)里做会话总结或事项归档,常见做法是让模型直接输出 Word 或 Markdown,再由人工调整版式。红头公文对机关名、文号、标题、正文缩进、落款与行距有固定规范,模型直接排版容易出现序号错乱、占位符残留或版式偏差。

下面介绍 dsh-tool-hongtou:由 ExElectron 维护的工作流插件,采用「LLM 结构化提纲 + 确定性 Word 2003 XML 渲染」的两阶段解耦流水线,把内容生成与版式渲染分开处理。

这是什么

dsh-tool-hongtou 是 Cordis 主机侧 DSH 插件,当前版本 0.2.0,MIT 许可证。它在会话中提供 /hongtou 命令,读取完整会话上下文,先产出合法 JSON 提纲,再注入标准红头模板骨架生成 .doc 文件并落盘到 output/

插件托管于 GitHub:ExElectron/dsh-tool-hongtou;社区目录页:SkillHub 插件页(SkillHub 为独立社区目录,与 DeepSeek / 幻方无官方从属关系)。

架构:两阶段解耦

执行 /hongtou [事由/标题] 时,流水线如下:

/hongtou [事由/标题]

  ├─ 会话上下文:ctx.sessionQuery.readSession() 读取完整原始事件日志

  ├─ 阶段一:LLM 结构化输出(lib/phase1-llm.js)
  │    · 只输出合法 JSON 提纲,严禁手写 XML 标签与 Markdown 符号
  │    · 输出经 schema 校验(lib/schema.js)+ Markdown/占位符清洗
  │    · 失败自动重试一次;仍失败回退确定性提炼(lib/fallback.js,同为 JSON)

  └─ 阶段二:确定性排版渲染(lib/phase2-render.js)
       · Node.js 纯代码解析 JSON,注入 templates/document-skeleton.xml 骨架
       · 序号(一、/(一)/1.)、字体、行距、红线全部由代码确定性生成
       · 最终校验:无文本框/批注/注释/占位符/Markdown 残留 → 落盘 output/

阶段一只负责结构化内容;阶段二由代码接管版式,模型不参与排版。

核心能力

版式复刻

模板 templates/document-skeleton.xml 由一次性构建脚本从样板真实片段组装,主要保证包括:

  • 完整复制样板 <w:fonts>(含方正粗宋简体、华文中宋、宋体、仿宋_GB2312、黑体、楷体等)与 11 个 <w:styles>
  • 红头机关名使用 VML 艺术字 v:textpath(华文中宋加粗、红色、高度 51pt,宽度按字数自适应居中);
  • 红色分割线为样板原样双 VML 线条;
  • 文号、标题、正文首行缩进、落款、日期等段落属性与 28 磅固定行距由代码注入;
  • 模板不含文本框与批注,生成后移除占位符并校验无注释残留。

模型零排版权

LLM 输出进入渲染层前经 stripMarkdownhasForbiddenContent 双重清洗,过滤链接符号、占位符(如 xxxx(空一行)(此处填写…) 等)。非法内容直接回退,不进入文档。

序号确定性生成

sections 编号为「一、二、…」,子条款为「(一)(二)…」,由阶段二按数组顺序生成,避免模型序号错乱。

安装与启用

插件通过 dsh.bundle.patch 声明挂载。安装到 web profile 可用以下命令:

# 从 npm 安装
dsh plugin --profile web add dsh-tool-hongtou

# 或从 GitHub 安装
dsh plugin --profile web add github:ExElectron/dsh-tool-hongtou

也可手动在 profile 的 package.json 中添加依赖并声明 bundle:

"dependencies": {
  "dsh-tool-hongtou": "^0.2.0"
  //  "dsh-tool-hongtou": "github:ExElectron/dsh-tool-hongtou"
},
"dsh": { "profile": { "bundles": ["dsh-tool-hongtou"] } }

挂载后需重启 dsh(web profile 在启动时装配 bundle 补丁)。运行环境要求 Node.js >= 22.19.0;peer 依赖包括 @deepseek-ai/cordis ^4.0.1、@deepseek-ai/dsh-llm ^0.1.0-rc.6、@deepseek-ai/dsh-session-query ^0.1.0-rc.6。

典型用法

重启 dsh 后,在会话中输入:

/hongtou
/hongtou 红头公文插件重构事项

不带参数时,插件从当前会话上下文提炼内容;带参数时,参数作为事由或标题线索参与结构化输出。生成的 Word 2003 XML 文档写入 output/ 目录。

适用场景与注意

适合需要将 DSH 会话内容整理为标准红头公文格式的场景,例如事项总结、内部通报草稿等。两阶段设计把「写什么」与「怎么排」分开,降低模型直接输出 Word 时的版式风险。

使用前请注意:

  1. 插件以当前 dsh 进程权限运行,安装前应阅读源码并确认 MIT 许可证条款;
  2. 输出为 Word 2003 XML 格式(.doc),需用兼容该格式的编辑器打开;
  3. 阶段一依赖 LLM 与 schema 校验,模型不可用时会回退到 lib/fallback.js 的确定性提炼,内容质量取决于会话上下文完整度。

开发与验证

维护者在 README 中提供了语法检查与测试命令:

node --check lib/index.js && node --check lib/schema.js && node --check lib/phase1-llm.js && node --check lib/phase2-render.js
node --test --test-isolation=none test/schema.test.js test/phase1.test.js test/phase2.test.js test/e2e.test.js

主要模块:lib/index.js(入口与编排)、lib/phase1-llm.jslib/schema.jslib/phase2-render.jslib/fallback.jstemplates/document-skeleton.xml

结尾

dsh-tool-hongtou 把红头公文的生成拆成 LLM 结构化提纲与确定性 XML 渲染两步,在 DSH 工作流里提供可复现的版式输出路径。如需查看源码或提交 issue,见 GitHub 仓库;社区索引见 SkillHub 目录页

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

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

小夜