version: 1.0.0 name: 中文文档生成 description: 起草并生成中文 Word 文档(.docx)。支持正式公文(GB/T 9704-2012)和通用文档两种模式。当用户要求起草、生成、写作任何中文文档时触发,包括:通知、报告、请示、函、纪要、讲话稿、方案、工作总结等。Do NOT use when the user wants to edit, modify, comment on, or extract text from an existing .docx file — use the docx skill instead.
version: 1.0.0
cn-docx · 中文文档生成
⚠️ 严格禁止的操作
- 禁止 用任何命令读取或显示已生成的
.docx文件内容(cat、type、hexdump 等均不允许) - 禁止 遍历或列出
node_modules目录(ls node_modules、find node_modules 等) - 禁止 读取
generate.js源码(不需要,直接调用即可) - 生成完成后,只告知用户文件保存路径,不做任何验证读取
version: 1.0.0
工作方式
收到用户的文档需求后:
- 先判断文档类型是否明确(见下方"文档类型澄清")
- 判断文档类型,选择
mode - 将内容组织成结构化的
body节点 - 用 stdin 调用
generate.js生成.docx文件 - 告知用户文件保存路径(直接完成,不读取文件内容验证)
中文引号
"这样写"直接写在 JSON 字符串里,完全没问题。
version: 1.0.0
文档类型澄清
当用户只给了一段文本,或需求描述模糊时,必须先澄清,再生成。 不要自行猜测。
按以下顺序判断是否需要澄清:
1. 用途/场景不明确 → 询问用途
用户说"帮我生成 Word"、"把这段话做成文档"、"帮我写一个关于 XX 的文件",没有说明是哪类文档,先问:
请问这份文档是用来做什么的?
- 通知 / 通报 / 请示 / 函(发给其他单位或部门的正式公文)
- 报告 / 纪要 / 讲话稿 / 方案(上报或内部使用的正式公文)
- 工作总结 / 项目方案 / 调研报告(个人或内部通用文档)
2. 文种已知,发文单位不明确 → 询问落款
确认是公文(official)后,如果用户没有提供发文单位和日期,再问:
请提供发文单位名称和落款日期,例如"某市应急管理局,2026年3月"。
如果是红头公文(strict 模式),还需要文号,例如"某政发〔2026〕1号"。
3. 内容已足够 → 直接生成,无需多问
用户已经说明文种("帮我写一个通知")且提供了标题、正文内容,直接生成,不用再问。
version: 1.0.0
模式选择
| mode | 适用场景 | 字体风格 |
|---|---|---|
official | 通知、报告、请示、函、纪要、讲话稿、方案 | 宋体/黑体/楷体,三号 |
general | 工作总结、项目方案、调研报告等个人/内部文档 | 黑体标题,宋体正文,四号 |
version: 1.0.0
调用方式(stdin JSON)
不要写临时 JS 脚本,直接用 stdin 传 JSON:
echo '{ ...JSON... }' | node {SKILL_DIR}/generate.js
official 模式 - standard 示例
echo '{
"mode": "official",
"style": "standard",
"docType": "tongzhi",
"outputPath": "{OUTPUT_DIR}/通知.docx",
"content": {
"title": "关于××××的通知",
"recipient": "各部门、各单位:",
"org": "××单位",
"date": "二〇二六年三月十五日",
"body": [
{ "level": 0, "text": "正文段落,首行自动缩进两字。" },
{ "level": 1, "number": "一", "heading": "一级标题(黑体三号)" },
{ "level": 2, "number": "(一)", "heading": "二级标题(宋体三号加粗)" },
{ "level": 0, "text": "正文内容。" },
{ "level": 3, "number": "1.", "heading": "三级小标题", "text": "后面是同段正文。" },
{ "level": 4, "number": "(1)", "text": "四级标题,行内正文。" }
],
"attachments": ["附件一名称", "附件二名称"]
}
}' | node {SKILL_DIR}/generate.js
official 模式 - strict 示例(红头公文,GB/T 9704-2012)
echo '{
"mode": "official",
"style": "strict",
"docType": "tongzhi",
"outputPath": "{OUTPUT_DIR}/红头通知.docx",
"content": {
"title": "关于开展安全生产大检查的通知",
"recipient": "各县区人民政府,市直各单位:",
"org": "某市人民政府",
"doc_number": "某政发〔2026〕1号",
"date": "二〇二六年三月十五日",
"serial_number": "000001",
"secret_level": "机密★1年",
"urgency": "特急",
"signers": ["张三", "李四"],
"cc": "市安委会各成员单位",
"print_org": "某市人民政府办公室",
"print_date": "2026年3月15日",
"body": [
{ "level": 0, "text": "正文内容。" }
],
"attachments": ["安全生产检查表"]
}
}' | node {SKILL_DIR}/generate.js
general 模式示例
echo '{
"mode": "general",
"outputPath": "{OUTPUT_DIR}/工作总结.docx",
"content": {
"title": "2026年第一季度工作总结",
"author": "张三",
"org": "某部门",
"date": "2026年3月15日",
"body": [
{ "level": 0, "text": "总体情况说明段落。" },
{ "level": 1, "number": "一", "heading": "一级标题(黑体小三加粗)" },
{ "level": 2, "number": "(一)", "heading": "二级标题(宋体四号加粗)" },
{ "level": 0, "text": "正文内容,宋体四号,1.5倍行距。" },
{ "level": 3, "number": "1.", "heading": "三级小标题", "text": "同段正文内容。" }
],
"attachments": ["附件名称"]
}
}' | node {SKILL_DIR}/generate.js
Markdown 输入模式(推荐用于 AI 生成内容)
当用户把 AI 的 Markdown 回答直接转为 Word 时,使用 markdown 字段替代 body:
echo '{
"mode": "general",
"outputPath": "{OUTPUT_DIR}/工作总结.docx",
"content": {
"title": "2026年Q1工作总结",
"org": "某部门",
"date": "2026年3月15日",
"markdown": "## 一、总体情况\n\n本季度完成了各项目标。\n\n## 二、主要成果\n\n| 项目 | 完成率 |\n|------|-------|\n| 建设 | 100% |\n\n- 完成预算编制\n- 推进重点项目"
}
}' | node {SKILL_DIR}/generate.js
markdown 字段支持的 Markdown 元素:
| 元素 | 语法 | 转换结果 |
|---|---|---|
| 标题 | # / ## / ### | level 1 / 2 / 3 节点 |
| 表格 | | 列1 | 列2 | + 分隔行 | type: "table" 三线表 |
| 无序列表 | - 项目 或 * 项目 | type: "list" |
| 有序列表 | 1. 项目 | type: "list" ordered |
| 嵌套列表 | 缩进子项 | children 最多 3 级 |
| 段落 | 普通文本 | level 0 正文 |
| 代码块 | ``` | level 0 纯文本 |
| 引用块 | > 内容 | level 0 正文 |
| 行内格式 | **粗** *斜* `代码` | 剥除格式符,保留文字 |
注意:
markdown和body二选一,同时存在时markdown优先。
version: 1.0.0
日期说明:
- official 模式默认使用汉字日期(如
"二〇二六年三月十五日"),可调用dateToChinese('2026-03-15')转换- general 模式默认使用阿拉伯数字日期(如
"2026年3月15日")date字段直接填写最终日期字符串即可
version: 1.0.0
文种(docType)
| 值 | 文种 | 需要 recipient |
|---|---|---|
tongzhi | 通知 | ✅ |
tongbao | 通报 | ✅ |
qingshi | 请示 | ✅ |
han | 函 | ✅ |
baogao | 报告 | ❌ |
jiyao | 纪要 | ❌ |
jianghua | 讲话稿 | ❌ |
fangan | 方案 | ❌ |
version: 1.0.0
style 模式
| 值 | 标题字体 | 正文字体 | 红头 | 二级标题 |
|---|---|---|---|---|
standard | 宋体加粗二号 | 宋体三号 | 无 | 宋体三号加粗 |
strict | 方正小标宋二号 | 仿宋_GB2312三号 | 有(需 org + doc_number) | 楷体三号 |
⚠️ strict 模式字体说明:
方正小标宋简体和仿宋_GB2312是 Windows 系统内置字体。在 macOS/Linux 上生成的文档,若对方机器没有这两个字体,打开时会降级显示。建议仅在 Windows 环境下,或确认接收方为 Windows 时使用 strict 模式。
version: 1.0.0
content 字段说明
通用字段
| 字段 | 类型 | 说明 |
|---|---|---|
title | string | 文档标题 |
org | string | 发文单位 / 落款单位 |
date | string | 日期字符串(直接使用) |
body | array | 正文节点数组 |
attachments | string[] | 附件名称列表 |
official 模式专用
| 字段 | 类型 | 说明 |
|---|---|---|
recipient | string | 主送机关(如"各部门:") |
doc_number | string | 发文字号(如"某政发〔2026〕1号") |
strict 模式专用(可选)
| 字段 | 类型 | 说明 |
|---|---|---|
serial_number | string | 份号(6位数字,如"000001") |
secret_level | string | 密级和保密期限(如"机密★1年") |
urgency | string | 紧急程度(如"特急""加急") |
signers | string[] | 签发人姓名(上行文用) |
cc | string | 抄送机关 |
print_org | string | 印发机关(默认同 org) |
print_date | string | 印发日期(默认同 date) |
general 模式专用
| 字段 | 类型 | 说明 |
|---|---|---|
author | string | 作者(显示在标题下方) |
version: 1.0.0
body 节点规范
official 模式
| level | 序号示例 | standard 字体 | strict 字体 | 格式 |
|---|---|---|---|---|
| 0 | 无 | 宋体三号 | 仿宋三号 | 正文,首行缩进两字 |
| 1 | 一 | 黑体三号 | 黑体三号 | 独立成行,不缩进 |
| 2 | (一) | 宋体三号加粗 | 楷体三号 | 缩进两字 |
| 3 | 1. | 宋体三号 | 仿宋三号 | heading 加粗 + text 不加粗,同段,缩进两字 |
| 4 | (1) | 宋体三号 | 仿宋三号 | 行内,缩进两字 |
general 模式
| level | 序号示例 | 字体 | 格式 |
|---|---|---|---|
| 0 | 无 | 宋体四号 | 正文,首行缩进两字,1.5倍行距 |
| 1 | 一 | 黑体小三加粗 | 独立成行,段前段后间距 |
| 2 | (一) | 宋体四号加粗 | 缩进两字,段前段后间距 |
| 3 | 1. | 宋体四号 | heading 加粗 + text 不加粗,同段,缩进两字 |
| 4 | (1) | 宋体四号 | 行内,缩进两字 |
level 3 同段格式说明
level 3 和 level 4 支持 heading + text 分开,实现"标题加粗+正文不加粗"同段效果:
{ "level": 3, "number": "1.", "heading": "加强管理。", "text": "各单位要认真落实各项管理制度。" }
生成效果:**1.加强管理。**各单位要认真落实各项管理制度。
如果只传 text 不传 heading,则整段加粗(向后兼容)。
序号说明:
number字段不需要带末尾顿号,一级标题会自动补上"、"。例如传"一"而非"一、"。
扩展节点类型(Phase 1)
除了 level 段落节点,body 数组还支持以下扩展类型,两种模式均可使用:
type: "table" — 表格
{
"type": "table",
"caption": "表1 项目进度",
"headers": ["阶段", "时间", "负责人"],
"rows": [["需求分析", "1月", "张三"], ["开发实现", "2月", "李四"]],
"style": "three-line",
"widths": [40, 30, 30]
}
| 字段 | 类型 | 说明 |
|---|---|---|
headers | string[] | 表头行(可选),自动加粗、灰色底色 |
rows | string[][] | 数据行二维数组 |
style | string | three-line(三线表,默认)/ bordered(全框线)/ light-grid(细网格灰线) |
widths | number[] | 各列宽度百分比,如 [30,40,30],不填则平均分配 |
caption | string | 表格标题,显示在表格上方,居中 |
type: "image" — 图片
{
"type": "image",
"src": "/absolute/path/to/chart.png",
"width": 120,
"caption": "图1 收入趋势图",
"align": "center"
}
| 字段 | 类型 | 说明 |
|---|---|---|
src | string | 本地图片绝对路径,支持 PNG / JPEG |
width | number | 显示宽度(mm),不填则按原始尺寸缩放到不超过页宽 |
height | number | 显示高度(mm),不填则按比例自动计算 |
caption | string | 图注,显示在图片下方,居中 |
align | string | center(默认)/ left / right |
type: "list" — 列表
{
"type": "list",
"ordered": true,
"items": [
{ "text": "第一项" },
{ "text": "第二项", "children": [
{ "text": "子项 A" },
{ "text": "子项 B" }
]}
]
}
| 字段 | 类型 | 说明 |
|---|---|---|
ordered | boolean | false(无序圆点,默认)/ true(有序数字) |
items | array | 列表项,每项有 text 字段;可嵌套 children(最多 3 级) |
type: "link" — 超链接段落
{ "type": "link", "text": "国家标准全文公开系统", "url": "https://openstd.samr.gov.cn", "prefix": "参考资料:" }
| 字段 | 类型 | 说明 |
|---|---|---|
text | string | 链接显示文字 |
url | string | 链接地址(外部 URL) |
prefix | string | 链接前的普通文字(可选) |
suffix | string | 链接后的普通文字(可选) |
type: "pageBreak" — 强制分页
{ "type": "pageBreak" }
在此处强制另起一页,无其他参数。
type: "divider" — 水平分割线
{ "type": "divider" }
渲染为灰色细线,用于章节之间的视觉分隔,无其他参数。
version: 1.0.0
页眉(general 模式专用)
公文模式无页眉(符合 GB/T 9704 规范)。通用模式可在 content 中设置:
| 字段 | 说明 |
|---|---|
header | 所有页统一页眉文字 |
headerOdd | 奇数页页眉(与 headerEven 配合使用,优先于 header) |
headerEven | 偶数页页眉 |
{
"mode": "general",
"content": {
"header": "某部门 2026年工作报告",
...
}
}
version: 1.0.0
版面规范
| official | general | |
|---|---|---|
| 页边距 | 上3.7 下3.5 左2.8 右2.6 cm | 上下2.54 左右3.17 cm |
| 行距 | 固定值约29pt(确保每页22行) | 1.5倍行距 |
| 页码 | — N — 宋体四号,单页居右空一字,双页居左空一字 | 阿拉伯数字居中 |
| 署名位置 | 右空四字 | 右对齐 |
version: 1.0.0
strict 模式 GB/T 9704-2012 合规说明
strict 模式严格遵循 GB/T 9704-2012 标准:
- 版头:发文机关标志红色小标宋体,上边缘距版心上边缘 35mm;发文字号下空二行;版头分隔线红色与版心等宽
- 主体:标题2号小标宋体,红色分隔线下空二行;主送机关标题下空一行
- 落款:成文日期右空四字
- 版记:自动生成抄送机关、印发机关和印发日期,含粗/细分隔线
- 页码:奇偶页分别居右/居左
- 可选要素:份号、密级和保密期限、紧急程度、签发人
version: 1.0.0
预设风格(preset)
在顶层加 preset 字段,一键选定文档风格,无需手动指定 mode/style。显式传入的字段仍可覆盖 preset 默认值。
| preset | 说明 | 适用场景 |
|---|---|---|
gov | 标准公文(standard 模式) | 通知、报告、请示 |
gov-strict | 红头公文(GB/T 9704-2012 strict 模式) | 需要红头、版记的正式公文 |
corporate | 企业报告,蓝色标题 | 商业报告、白皮书 |
academic | 学术论文,双倍行距 | 论文、研究报告 |
memo | 内部备忘录,紧凑行距 | 会议纪要、内部通知 |
minimal | 极简黑白,宋体贯穿 | 合同、协议 |
chinese-report | 微软雅黑标题,现代商务风 | 工作总结、项目方案 |
echo '{
"preset": "corporate",
"outputPath": "{OUTPUT_DIR}/商业报告.docx",
"content": {
"title": "2026年第一季度业务报告",
"org": "某公司",
"date": "2026年3月28日",
"body": [...]
}
}' | node {SKILL_DIR}/generate.js
preset 与 mode/style 可混用:
preset: "corporate"设为 general 模式,但仍可加"mode": "official"覆盖。
version: 1.0.0
生成报告
每次生成成功后,终端输出包含统计摘要:
✅ 已生成:/path/to/file.docx
📄 估算约 3 页 · 段落 12 · 表格 2 · 图片 1 · 列表 3 · 字符 2150
页数为基于字符数的估算值(公文 ~600字/页,通用 ~700字/页),仅供参考。
version: 1.0.0
依赖
Node.js ≥ 16,docx 库已随应用预装,无需手动执行 npm install。docx 版本已锁定,升级前务必先跑 node test.js 验证字体渲染正常。