写公文这件事,我想了很久。
不是那种"AI 能不能帮我写公文"的轻巧想法,是一个更具体的问题:单位里那个笔杆子——办公室里那个最会写、最受领导信任、也最累的人——他脑子里那套东西,能不能被沉淀下来、复用下去、不随人走?
这个问题的答案,就是"笔杆子"这个产品。今天想把它的来龙去脉讲清楚:怎么来的、怎么实现的、怎么一步步走到现在。
一、起点:一个浏览器单页
最早的形态,是一个 HTML 文件。
没有后端,没有数据库,没有安装包。浏览器打开就能用。左边是开写(粘贴素材、选文种、生成初稿),右边是开练(上传真稿、提炼风格、写入风格库)。
为什么从单页开始?因为当时的判断是:先验证方法论,再谈工程。公文写作的核心难题不在代码量,在于"风格能不能被结构化"。如果"真稿 → 差距分析 → 风格规则入库 → 生成时套用"这条链路跑不通,写一万行代码也是白搭。
那个单页跑通了。问题也暴露出来了:浏览器直连云端模型,涉密材料不敢用;没有版本管理;没有授权机制。说不上是产品,只能叫工具。
二、第一次迭代:拆成两个 skill
第二阶段,把单页拆成两个独立的 skill:
开写(biganzi-baogan):收料 → 定调 → 读风格库 → 提纲 → 成稿 → 去 AI 味 → 迭代审批 → 定稿导出国标 Word。八步,每步有明确产物。
开练(biganzi-train):生成初稿 → 审批 → 标准答案 → 差距分析(5 维度)→ 提炼规则(3 类)→ 入库 → 审计。每次开练在训练流水里留一条记录,可追溯、可回滚。
两个 skill 共享同一个"风格库"目录——五张卡:领导风格画像、文种行文规范、单位专有口径、行文模板、训练流水。开写只读不写,开练是唯一写入方。
这一步的关键收获是:风格库必须独立于任何一次写作过程。它不是"这次生成用了什么 prompt",而是"这个岗位、这个领导、这个单位,长期积累下来的行文规则"。它要有自己的生命周期——新增、修改、调置信度、迁移、回滚——才叫记忆,否则只是缓存。
三、关键转折:把模型搬进机器里
skill 版本跑在云端大模型上,效果很好,但有一个绕不过去的问题:数据出网。涉密成稿不能走云端 API。
于是做了一个"笨"决定:把模型换成本地跑的。
这一步做完,场景就分清了:涉密成稿走本地模型,不涉密的日常起草走云端 API。同一套方法论——先核后写、去 AI 味、差距分析、规则沉淀——两个执行位置,各管各的场景。
四、产品化:从工具到软件
方法论验证完了,模型落地了,下一步是变成可交付、可授权、可更新的产品。
v0.3.0 的架构:
- 前端:那个 HTML 单页的延续,单文件、无构建依赖,terser 混淆后打进 pywebview 壳子,双击
.exe就能跑。 - 服务端:纯 Python 标准库,零第三方依赖,管账号、会员、配额、更新源。一台机器起一个进程。
- 双版本:
| 联网标准版 | 内网离线版 | |
|---|---|---|
| 激活 | 邮箱注册 | RSA 机器码激活 |
| 模型 | 云端 API(用户自配) | vLLM / Ollama 本地模型 |
| 数据 | 本机存储 | 本机存储,全链路不出网 |
| 适用 | 有外网的日常办公 | 无外网出口 / 涉密环境 |
离线版的 RSA 激活不是硬件加密狗,是软件验签:开发方用私钥签发激活码(绑定机器码 + 到期日),客户端用公钥验签。改时钟防作弊做了宽限 7 天,试用 14 天。够用了——这个场景下的攻击者不是黑客,是"同事偷偷复制了一份"。
五、它最不一样的地方
讲完了怎么来的、怎么做的,再说一句它跟别的 AI 写作工具最不一样的地方。
别的工具解决的是"写得快不快"。笔杆子解决的是"写得像不像"。
这个"像",不是像某个模板,不是像范文,是像你单位那个最会写的人。他开会时口头禅是什么,他写讲话稿时爱用什么句式,他怎么把一件小事拔高成"政治站位",他哪些话永远不会写进纸面——这些东西没有文档,没有手册,只存在他脑子里和过去那几百篇稿子里。
笔杆子做的事,就是把"脑子里"变成"风格库里"。开练一次,风格库厚一点;开写一次,风格库被用一次。用多了,它写出来的东西就越来越像你那个笔杆子写的。
这是一个把你单位最好的笔杆子,变成一套不随人走的规则系统的工具。
六、迭代节奏
回头看,笔杆子的迭代不复杂,但每一步都解决上一步暴露的那个"不够用":
- HTML 单页 → 验证方法论(风格能不能结构化)
- Skill 两件套 → 拆读写、建风格库生命周期
- 换成本地模型 → 解决数据出网
- v0.3.0 双版本 → 可交付、可授权、可更新的产品
七、现在它是什么样
现在打开笔杆子,就是八个功能区:首屏、开写、开练、风格库、版本管理、配置。素材进,公文出。GB/T 9704-2012 的版式,导出就是合规的 Word。风格库五张卡,越用越厚。
开写:四步成稿
开写的主流程是四步:收料 → 定调 → 生成与审批 → 定稿导出。

定调这一步,有两个 Tab:多对一(整合)和一对一(仿写)。多对一是把各部门报送的多份素材整合成一篇成稿;一对一是用一篇参考稿仿写。文种下拉预置了领导讲话稿、向上级汇报材料、工作总结、工作方案、请示五种常见公文,也可以自定义。角色岗位下拉会提示"该角色岗位暂无画像,将用通用笔杆子风格"——这句话本身就是产品逻辑:风格库是空的,开写先用通用规则兜底,开练跑一次就自动建立画像。

定稿导出这一步,格式面板 GB/T 9704-2012 :A4 纸张、上 37 下 35 左 28 右 26 页边距、公文标题方正小标宋二号、一级标题黑体三号、二级楷体三号、三级仿宋三号加粗、正文仿宋_GB2312 三号、固定行距 28 磅、首行缩进 2 字符、页脚居中页码格式"- 1 -"。底部红底按钮"导出 Word (.docx)",Word 打开即合规。
开练:四步学会你的笔杆子
开练是笔杆子最核心的功能——用一篇真稿教会它下一次。

开练第一步"收料与生成",表单比开写多了一个"场景目标"字段——比如"单位主要领导在半年工作会上的讲话稿"——以及"特定要求"字段。系统会根据这些参数先生成一个初稿,然后进入下一步。

第二步"审批标注"是三栏布局:左边是初稿原文,中间是标注列表,右边是审批面板。操作方式很直观:在左侧初稿里选中一段文字,就可以为这一处打分、写意见。选中文字即可标注批语——不需要事先划定段落,哪句觉得不对就选中哪句。

第三步"标准答案",上传那次实际用掉的真稿。这是开练最强的学习信号——系统会拿初稿和真稿做差距分析。"没有标准答案也能继续,但提炼出的规则置信度会偏低。建议尽量提供。"

第四步"差距与入库",两个模块:上面是"差距分析与规则提炼",带一个温度滑块(建议 0.2-0.4,偏低更稳定一致);下面是"提炼出的经验规则",列出生成的规则供你勾选入库,规则文本和归档类型都可以改写。开练到这里就结束了,风格库厚了一点。
风格库:五张卡,只读只沉淀

风格库五张卡:岗位画像(按角色岗位的风格共性,不针对领导个人)、文种行文规范(按文种的行文共性)、单位专有口径(术语称谓提法禁忌)、行文模板(常用成稿的结构骨架,开写时可直接套用)、训练流水(开练的历史记录,可追溯可回滚)。开写只读不写,开练是唯一写入方。
配置:云端和本地,二选一

配置页只有三件事:OpenAI 兼容云端(填 API 基址 + 密钥 + 模型名)、Vllm 本地模型(填地址)、Ollama 本地模型(填地址)。云端填密钥、本地填地址,二选一即可。还有一个"经本机后端代理"的勾选框——CORS 不放行时勾上就行,exe 版已自动内置代理,无需配置。
写这篇的时候我反复确认一件事:笔杆子不是一个"AI 写作工具"。它是一个风格沉淀系统,恰好以公文写作为载体。公文是最严格的文体——格式有国标、措辞有口径、站位有要求、领导有偏好——所以它是最能检验"风格能不能被结构化"这个命题的领域。
如果这个命题在公文上成立,那它大概率在别的领域也成立。
这是笔杆子最初想回答的问题,也是它现在还在回答的问题。
笔杆子 · 公文智能写作软件,在 eogee 工坊可以获取:
NEX·南霄 2026 年 10 月
举手提问