笔锋(PenFlow)— 企业公文智能撰写助手
根据用户输入的关键信息,自动生成符合中国公文规范的正式情况说明文档(.docx)。
核心能力
| 能力 | 说明 |
|---|---|
| 语义理解 | 将用户碎片化关键词解析为结构化要素(主体、事件、因果、措施) |
| 语境适配 | 根据致送对象自动选择公文语体和敬语体系 |
| 格式生成 | 按公文标准映射版面规范(页边距、字体字号、行距缩进),通过python-docx精确输出 |
触发条件
当用户需要撰写正式公文/情况说明时使用此技能。典型触发语:
- "帮我写一个情况说明"
- "生成一份情况说明"
- "出具一份书面说明"
- "帮写个说明文档"
- "写个公文"
- "笔锋生成"
使用方式
方式一:对话式(推荐)
直接向 AI 描述需要撰写的情况说明,AI 会引导您逐步确认各要素并直接生成 .docx 文件。
示例对话:
> 用户:「帮我写一个关于房屋租赁的情况说明,致送对象是XX公司。」
> AI:「好的,我来帮您收集关键信息:1. 租赁背景是?2. 需要说明的具体问题是?……」
方式二:表单式(可视化填写)
打开技能目录下的 assets/form.html,在浏览器中填写各要素,生成 JSON 配置文件后运行脚本。
步骤:
1. 用浏览器打开 assets/form.html
2. 按表单提示填写:文档类型、受众类型、标题、正文段落、落款信息等
3. 点击「生成配置文件」,下载 config.json
4. 运行:python scripts/generate_doc.py config.json
表单界面支持动态添加/删除正文段落和落款单位行,并会根据受众类型自动提示默认结尾语。
工作流程
步骤 1:收集关键信息
向用户确认以下要素(用户已提供则跳过,未提供则基于上下文合理推断并标注):
| 要素 | 说明 | 示例 |
|---|---|---|
| 标题 | 关于什么的情况说明 | 关于校园动感厅房租续签的情况说明 |
| 致送对象 | 说明提交给谁 | 西双版纳职业技术学院 |
| 受众类型 | partner(合作方) / superior(上级) / government(政府) | partner |
| 涉及主体 | 当事人/单位 | 中国移动XX分公司、XX学院 |
| 背景事实 | 发生了什么事 | 租赁协议到期,但无法续签 |
| 原因分析 | 为什么会这样 | 学院正筹备新合作项目,暂无法确定方案 |
| 当前措施 | 现在怎么处理的 | 已协调渠道商按月支付房租过渡 |
| 后续计划 | 下一步怎么做 | 待方案确定后按流程采购 |
| 公司全称 | 落款单位(数组,多行) | ["中国移动通信集团云南有限公司", "西双版纳分公司"] |
| 日期 | 落款日期 | 2026年6月27日 |
| 结尾语 | 可选,默认根据受众类型自动生成 | 望贵院予以理解与支持 |
受众类型判定规则:
- 致送对象为企业、院校、机构 → partner
- 致送对象为本系统上级单位 → superior
- 致送对象为政府行政机关 → government
- 无法判断时询问用户
步骤 2:语义解析与内容撰写
根据收集到的信息,按以下结构撰写正文:
- 背景段:说明涉及的协议、关系、事件背景
- 问题段:解释当前无法按常规流程推进的原因
- 措施段:说明已采取的过渡性安排和达成的一致意见
- 计划段:说明后续正式流程的启动条件和计划
- 结尾段(可选):表达希望得到的理解、支持或配合
行文规范——按受众类型加载 references/tone_guide.md 获取详细规则:
| 受众类型 | 自称 | 称谓 | 语气特征 |
|---|---|---|---|
| partner(合作方) | 我司/本公司 | 贵院/贵单位/贵公司 | 尊重诚恳,感谢合作 |
| superior(上级) | 我公司/本部门 | (省略称谓,直述事由) | 客观陈述,简明扼要 |
| government(政府) | 我单位/本公司 | 贵局/贵委/贵府 | 正式庄重,依法依规 |
详细语气适配规则见 references/tone_guide.md。
步骤 3:生成 JSON 配置并调用脚本
将撰写好的内容组织为 JSON 配置文件,然后调用生成脚本:
python scripts/generate_doc.py <config.json> [output.docx]
JSON 配置文件格式:
{
"doc_type": "situation_report",
"audience": "partner",
"title": "关于XXX的情况说明",
"greeting": "\u897f\u53cc\u7248\u7eb3\u804c\u4e1a\u6280\u672f\u5b66\u9662\uff1a",
"paragraphs": [
"\u7b2c\u4e00\u6bb5\u6b63\u6587\u5185\u5bb9...",
"\u7b2c\u4e8c\u6bb5\u6b63\u6587\u5185\u5bb9..."
],
"closing": "\u4ee5\u4e0a\u60c5\u51b5\uff0c\u7279\u5411\u8d35\u9662\u8bf4\u660e\u3002\u671b\u8d35\u9662\u4e88\u4ee5\u7406\u89e3\u4e0e\u652f\u6301\u3002",
"company": ["\u4e2d\u56fd\u79fb\u52a8\u901a\u4fe1\u96c6\u56e2\u4e91\u5357\u6709\u9650\u516c\u53f8", "\u897f\u53cc\u7248\u7eb3\u5206\u516c\u53f8"],
"date": "2026\u5e746\u670827\u65e5"
}
字段说明:
| 字段 | 必填 | 说明 |
|---|---|---|
doc_type |
否 | 文档类型,默认 situation_report。可选:situation_report(情况说明)、request(请示)、reply(答复函)、notification(通知) |
audience |
否 | 受众类型,默认 partner。可选:partner/superior/government |
title |
是 | 文档标题 |
greeting |
否 | 致送对象行(含冒号),省略时不输出 |
paragraphs |
是 | 正文字符串数组,每个元素为一个段落 |
closing |
否 | 结尾语,省略时不输出 |
company |
否 | 落款单位,字符串数组支持多行 |
date |
否 | 落款日期 |
output |
否 | 输出文件名,默认使用标题 |
JSON 编码注意事项:
- JSON 中的中文双引号必须使用 \u201c(左)和 \u201d(右)转义,不可直接书写 "" 字符
- 所有中文内容使用 UTF-8 编码
- 确保 JSON 格式合法(无尾逗号、引号闭合)
步骤 4:呈现结果
脚本执行成功后,使用 present_files 向用户展示生成的 .docx 文件,并简要说明文档结构和核心内容。
公文格式规范
生成的文档遵循中国公文标准格式,详细规范见 references/format_spec.md。
核心格式参数:
| 元素 | 字体 | 字号 | 对齐 | 其他 |
|---|---|---|---|---|
| 标题 | 黑体 | 三号(16pt) | 居中 | 加粗、段后24pt |
| 致送对象 | 仿宋 | 四号(14pt) | 左对齐 | 段后12pt |
| 正文 | 仿宋 | 四号(14pt) | 两端对齐 | 首行缩进2字符、固定行距28磅 |
| 结尾语 | 仿宋 | 四号(14pt) | 左对齐 | 首行缩进2字符 |
| 落款 | 仿宋 | 四号(14pt) | 右对齐 | 含单位全称和日期 |
页面设置: A4纸,上边距2.54cm,下边距2.54cm,左边距3.17cm,右边距3.17cm。
依赖环境
- Python 3.8+
- python-docx
安装命令:
pip install python-docx
注意事项
- 生成的 .docx 文件保存在用户当前工作目录
- 如致送对象为合作方,需在正文中体现尊重和协商态度
- 所有称谓在首次出现时写全称并附简称说明
- 避免口语化表达,使用正式书面语
- 脚本路径为技能目录下的
scripts/generate_doc.py,调用时使用相对路径