我做过一个接近完美的公文模板:《Word 样式的使用和公文模板下载(最终版)》。在 AI 纪元之前,我是手工编写 VBA 程序来生成这个公文模板的。

进入 AI 时代,软件可能是日抛的,是否还需要这个公文模板?

你可以使用 WorkBuddy 这类 Agent,告诉它:写一份什么什么公文,按照《党政机关公文格式》GB/T 9704—2012 的要求,生成 Word 文件。AI 能做到。

大部分人都是这么做的。

那是否还需要我的公文模板?

需要!

为什么请AI直接生成公文 DOCX 不可取?

我在某次 PPT 分享中介绍过 14 个 AI 技巧,其中第 2 个就是“确定性 VS. 不确定性”。我的建议是:确定性的工作,交给程序(由 AI 生成《OpenClaw 的安全用法:开发自动化,而不是执行自动化》)运行;不确定性的工作,才交给 AI。

这样可以减少 Token 消耗,降低幻觉风险,提高执行速度,也更便于代码审计和安全管理。

如果直接让 WorkBuddy 生成符合公文格式的 DOCX,在没有预先配置 Agent Skills 的情况下,它很可能会尝试编写 Python 代码来处理任务,然后不断调试,甚至引入视觉验证来检查版式。

这既耗时,也浪费积分。

更重要的是,最终生成的 DOCX 可能大量使用直接格式(Direct Formatting),而不是 Word 样式;可能没有正确设置大纲级别,无法自动编号,行距不是单倍而是写死多少磅,也未必能实现每页 22 行、每行 28 字的文档网格。

不够clean。

因此,即使在 AI 时代,你不需要直接打开我的模板来写公文,依然可以利用模板已经完成的工作,让 Agent 按照模板生成规范的 Word 文档。

因为 AI 足够聪明,你只要随便告诉它,使用模板“请示报告.郑海山dump.dotx”生成公文,他就可以完成,一般人到这里就不用继续看了,下面适合要求更高的人。

TL;DR

TL;DR

TL;DR

考虑整个公文流水线

  • 第一步:准备 Agent 和 Skill。 首先,你需要一个 Agent,例如 WorkBuddy,并为其配置一个公文 Skill。后面会具体介绍如何建立这个 Skill。

  • 第二步:生成 Markdown 初稿。 将相关文件放到某个目录,通过 @文件 等方式将它们加入上下文,也可以先在某个 Markdown 文件中整理初初稿,然后 @这个md。然后要求 Agent 使用公文 Skill 的 assets 目录中的 请示报告.郑海山dump.md 作为模板,生成公文的 Markdown 初稿(这个会预先被你定义成一个任务,放在SKILL.md里)。

  • 第三步:修改 Markdown。 你可以直接编辑生成的 Markdown 文件,也可以继续与 Agent 对话,让它修改文件内容。

  • 第四步:提交审核。 到这里,你已经有了一份自己满意的初稿,可以提交给部门领导审核。

  • 第五步:根据领导的工作方式选择审核流程。
    • 如果部门领导也在使用 Agent,他会要求你直接给他 Markdown 文件,这时候不必急着生成 DOCX。更进一步,如果组织的 AI 应用足够成熟,甚至可能使用类似 Paperclip 的工具,或者在 OA 系统中集成 Agent,让你和部门领导共享所有的上下文,一起指导 Agent 完成工作。
    • 如果部门领导仍然习惯使用 Word,你就需要提供 DOCX 文件。如果领导只提出少量修改意见,或者只提供修改思路,你可以将意见合并到 Markdown 中,或者直接交给 Agent 修改。如果领导在 Word 中进行了大量修改,那么这条自动化流水线可能就会在这里中断,后续需要人工处理所有内容。
  • 第六步:生成最终公文。 经过多轮修改并最终定稿后,再调用 Skill 中的 Python 脚本,将 Markdown 转换为 DOCX,完成公文输出(SKILL.md里的另外一个任务)。

公文 Skill 的内容

当然,我可以直接提供这个 Skill。不过,我不希望你养成一个不好的习惯:随意下载一个 Skill,就放进自己的 Agent 中运行。

因此,我在这里介绍如何自己生成这个 Skill。你可以让 Agent 帮你完成。

目录结构类似如下:

markdown-official-document/
├── SKILL.md
├── scripts/
│   └── generate_doc.py
├── assets/
│   ├── 请示报告.郑海山dump.md
│   └── 请示报告.郑海山dump.docx
└── references/
    └── 公文格式规范.md  # 可选

请示报告.郑海山dump.md

根据上一篇文章《推荐一些 Markdown 编辑器,重点介绍 Zettlr》的思路,中间过程应当使用 Markdown 文件,越晚生成DOCX,说明你组织的AI成熟度越高。

这个文件类似下面的示例,开头是元数据(Front Matter),后面是公文正文。

---
title: 关于申请共享数据的请示
recipients:
  - 人事处
  - 教务处
  - 网信办
attachments:
  - filename: 共享数据字段说明.docx
    id: attachment-brief
  - filename: 共享数据字段明细.xlsx
    id: attachment-desc
issuer: 信息中心
date: 2026-10-21
---

根据有关工作需要,现就申请共享数据请示如下。

## 基本情况

...

## 申请事项

...[](attachment-desc)

现申请以上数据,妥否,请批示。

generate_doc.py:Python 代码

你可以让 Agent 编写 Python 转换脚本。你可以给它类似下面这样的提示词。当然,也可以让 AI 自己探索模板结构,不过,提供明确的提示词会更方便。

## 任务目标

使用 Python 的 `python-docx` 模块,将 Markdown 文件转换为 Word 公文。

- **输入**:一个 Markdown(`.md`)文件和公文模板 `请示报告.郑海山dump.docx`。
- **输出**:生成一个 `.docx` 文件,保存在 Markdown 文件所在目录,文件名与 Markdown 文件同名,仅扩展名改为 `.docx`。

## 处理规则

1. **模板处理**:清除模板原有的正文文本,再填入 Markdown 内容。

2. **样式映射**:尽量使用模板中已有的样式,不随意创建新样式。
   - Markdown 二级标题 `##` 使用 `标题 1` 样式。
   - Markdown 三级标题 `###` 使用 `标题 2` 样式。
   - Markdown 四级标题 `####` 使用 `标题 3` 样式。
   - Front Matter 中的 `recipients` 字段使用 `主送机关` 样式。
   - `issuer`(署名单位)和 `date`(成文日期)使用 `无公章-署名单位/成文日期` 样式。

3. **署名排版**:计算署名单位和成文日期的文本长度,在文本后添加适当空格,使其达到按成文日期居中排版效果。

4. **附件处理**:
   - 当 `attachments` 数量超过 1 个时,插入 Word 文档部件 `附件说明表格`,将附件说明放入表格第二行第二列,并使用 `标题 5` 样式。
   - 当 `attachments` 数量不超过 1 个时,使用 `附件说明-单一附件` 样式。
   - 正文中的附件引用使用 Markdown 链接语法,通过附件 ID 匹配 Front Matter 中的附件,并替换为“附件1”“附件2”等文字。

## 实现要求

先检查模板中的实际样式和文档部件结构,再编写转换代码。注意保留模板必要的文档结构。

完成。