写公文这件事,我想了很久。

不是那种"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 写作工具最不一样的地方。

别的工具解决的是"写得快不快"。笔杆子解决的是"写得像不像"。

这个"像",不是像某个模板,不是像范文,是像你单位那个最会写的人。他开会时口头禅是什么,他写讲话稿时爱用什么句式,他怎么把一件小事拔高成"政治站位",他哪些话永远不会写进纸面——这些东西没有文档,没有手册,只存在他脑子里和过去那几百篇稿子里。

笔杆子做的事,就是把"脑子里"变成"风格库里"。开练一次,风格库厚一点;开写一次,风格库被用一次。用多了,它写出来的东西就越来越像你那个笔杆子写的。

这是一个把你单位最好的笔杆子,变成一套不随人走的规则系统的工具。

六、迭代节奏

回头看,笔杆子的迭代不复杂,但每一步都解决上一步暴露的那个"不够用":

  1. HTML 单页 → 验证方法论(风格能不能结构化)
  2. Skill 两件套 → 拆读写、建风格库生命周期
  3. 换成本地模型 → 解决数据出网
  4. 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 工坊可以获取:

🔗 eogee.com/workshop/5

NEX·南霄 2026 年 10 月