开篇:朋友问了一句「能不能给我也搭一套」
你的OPC系统已经能写文章、能接待客户、能交付产品、能分析数据、能自己照顾自己了。上一篇文章(从996到007——OPC的无人值守运维体系)里,我们把最后一个人肉环节也自动化了:系统挂了能自己爬起来,爬不起来才叫你。
然后有一天,一个做培训的朋友看完你的文章,问:「能不能给我也搭一套?」
你答应了。然后你打开代码,沉默了。
因为这套系统从头到脚都是给你自己用的:平台凭据写在脚本里,文章质量靠你人眼把关,发布记录躺在你脑子里。给朋友搭一套,等于把三个月的活儿重做一遍。你第一次意识到:系统搭得好,和系统能复制,是两件完全不同的事。
今天的解药是三步跃迁:配置化、门禁化、产品化。 三步走完,你的系统从「服务一个人」变成「能被很多人安装」——你从一个人公司,升级成系统公司。
一、先想明白:为什么复制系统比搭系统还难
系统不能复制的根因,不是功能不够,是「你」和系统绑得太紧。具体绑在三个地方:
- 凭据写死在代码里:换一个平台账号、换一个客户,都要改代码
- 质量靠你人肉把关:你盯着就正常,你不在就没人管
- 过程全在你脑子里:哪篇发了、发到哪、效果如何,没有任何可审计的记录
所以可复制系统的第一步,不是加功能,是把「你」从系统里拆出来。拆完之后,系统第一次可以被「别人」使用——而别人使用你的系统,才是你从卖时间转向卖系统的开始。
二、整体架构:可复制商业系统的4层

架构图就是这篇文章的路线图:
┌──────────────────────────────────────────────────┐
│ Layer 1: 内容生产层 │
│ → 一篇原文,内容工厂自动成稿,图文配齐 │
├──────────────────────────────────────────────────┤
│ Layer 2: 质量门禁层 │
│ → validate → continuity → checker → gate │
│ → 不通过就不许发布 │
├──────────────────────────────────────────────────┤
│ Layer 3: 适配器层 │
│ → 公众号 / Dev.to / Hashnode / 博客园 │
│ → 每个平台一个适配器函数 │
├──────────────────────────────────────────────────┤
│ Layer 4: 台账层 │
│ → publication-ledger,全平台URL注册表 │
│ → 上新平台 = 加一行 │
└──────────────────────────────────────────────────┘
前两层解决「系统怎么被信任」,后两层解决「系统怎么被复制」。下面逐层拆开,对应三步跃迁。
三、Step 1:配置化——把「你」从代码里抽出来
先解决最硬的一个坑:凭据和参数写在代码里,是系统不能复制的第一道锁。
早期脚本长这样:平台 token 直接写在文件顶部,换一个账号就要改代码、重新发布流程,而且代码一旦流出,凭据跟着泄露。解法只有一个动作:把配置从代码里挪出去。
第一步,创建 platforms.env 配置文件:
# platforms.env - one line per platform, one file for all platforms
# change account = edit this file, not the code
DEVTO_API_KEY=xxxx
HASHNODE_TOKEN=xxxx
HASHNODE_PUB_ID=6a6d64167b082815e6b87962
第二步,写一个统一的加载函数,代码里只认环境变量,不认硬编码:
# multi_publish.py - load credentials from config file
def load_creds():env = {}with open('/root/.wenyan/platforms.env') as f:for line in f:line = line.strip()if not line or line.startswith('#') or '=' not in line:continuek, v = line.split('=', 1)env[k.strip()] = v.strip().strip("'\"")return env
✅ 验证:删除脚本里的硬编码凭据,只保留 load_creds(),运行发布管道的第一道验证,输出应与硬编码时完全一致。
踩坑:配置文件的解析要比想象中严格。空行、注释行、带引号的值,三种情况都要处理,否则换一台机器就崩。上面代码里的 startswith('#') 和 strip("'\"") 就是为这三种情况写的。
直接价值:换一个人用你的系统,不再是改代码,而是复制一份配置文件:打开 platforms.env,写入新平台的凭据,代码一行不用动。换人 = 换配置,不换代码。
▸ 认知跃迁:配置化的本质,是把「你脑子里的知识」沉淀成「机器能读的数据」。系统第一次可以被别人安装。
四、Step 2:门禁化——把「质量」从人肉审核变成机器门禁
配置解决了「谁都能装」,但紧接着的问题更致命:系统被别人用时,你不可能手把手教每个使用者「文章要怎么写」。
早期我们靠人眼把关,结果踩过一个真实的坑:一篇已经进草稿箱的文章,缺下一篇预告、配图不合规、封面图和前两篇重复——人眼检查时全都没看出来,直到发布门全量扫描才暴露。人眼审核的缺陷不是不够认真,是不可复现:你状态好就看出来,状态不好就漏过去。
解法是把质量检查写成物理管道,执行下面4条命令,4道门缺一不可:
# physical pipeline - 4 gates before any publish
python3 validate_article.py check article-22.md
python3 check_series_continuity.py check
python3 article_checker.py article-22.md
python3 publish_gate.py article-22.md
再修改发布脚本,把门禁接到发布命令前面,不通过就直接拦下:
# publish_gate.py - core gate logic
def run_validator(filepath):result = subprocess.run(["python3", str(SCRIPTS_DIR / "validate_article.py"), "check", filepath],capture_output=True, text=True, timeout=30)if result.returncode != 0:return Falsereturn True
✅ 验证:故意在一篇文章里删掉下一篇预告,跑发布门,命令返回非零,发布被拦截;补上预告,再跑,通过。
踩坑:门禁必须放在发布命令前面,而不是发布流程里让人「记得跑」。放在前面,是物理拦截;放在后面,是道德约束。物理拦截不会忘记。
直接价值:质量第一次不依赖个人水平。客户催得再急,机制不放行就是不放行——机制不累,机制没有情绪。
▸ 认知跃迁:门禁化的本质,是把「你的标准」固化成「机器的确定性」。标准变成代码之后,系统第一次可以被别人放心使用。
五、Step 3:产品化——适配器 + 台账,把系统变成资产
配置让人能装,门禁让人敢用,但离「卖」还差一步:系统要能同时服务多个平台、多个客户,还要让每个平台的发布状态可查。
这一步做两件事:适配器让「平台」变成可插拔,台账让「记录」变成数据资产。
第一件事,适配器。每个平台写一个函数,输入统一,输出各平台格式:
# multi_publish.py - adapter pattern, one function per platform
def publish_hashnode(title, body_md, tags, token, pub_id):# check duplicate before publish - prevent double post on retryif hashnode_title_exists(title, token, pub_id):return f"SKIPPED (duplicate): {title}"create_q = "mutation CreateDraft($input: CreateDraftInput!) { createDraft(input: $input) { draft { id } } }"# then call publishDraft with the returned draft id
这个查重不是锦上添花,是用一次真实事故换来的:早期发布时,接口返回「Draft not found」,我们以为是失败就重试,结果文章其实已经发布成功——同一个标题在平台上出现了两次。发布前先查重,是适配器的最低底线。
第二件事,台账。一个文件管全平台,一行一篇:
# publication-ledger.md - one row per article per platform
| # | 标题 | 公众号 | 博客园 | Dev.to | Hashnode | 首发时间 |
|:-:|:-----|:-------|:-------|:-------|:---------|:---------|
| B6 | 把系统卖给更多人 | ✅草稿 | /p/xxx | dev.to/xxx | hashnode.dev/xxx | 2026-08-07 |

✅ 验证:接一个新平台,写一个适配器函数 + 台账加一行,发布一次,台账里出现对应 URL,流程闭环。
踩坑:台账必须发布完立刻登记,不能攒着。我们吃过三次「已发未登记」的亏:文章在海外平台都上线了,队列里却没有条目,导致分发任务看不到、不补发。发布动作和记录动作要绑在同一步。
直接价值:添加一个新平台时,只需要写一个适配器函数、台账加一行。系统从「一个脚本」变成「一份资产清单 + 一套复制流程」。
▸ 认知跃迁:产品化的本质,是把「过程」变成「资产」。适配器是可插拔的接口,台账是可审计的记录——系统第一次可以被别人接管。
六、Before vs After:人肉公司 vs 系统公司
| 环节 | 人肉公司 | 系统公司 |
|---|---|---|
| 接新客户 | 重写一遍代码 | 复制一份配置文件 |
| 质量把关 | 靠你人眼审核 | 4道机器门禁 |
| 发布记录 | 在你脑子里 | 台账可查可审计 |
| 新平台接入 | 从零研究一遍 | 写一个适配器 |
| 扩展上限 | 你的时间和精力 | 系统的吞吐能力 |

七、进阶思考:可复制系统的本质,是「信任机制」
很多人以为「卖系统」就是把代码打包卖出去,收一次钱。方向不对。
系统公司卖的不是代码,是确定性。 客户敢用你的系统,不是因为你个人靠谱,是因为机制保证「谁用都不会跑偏」:
- 机器门禁 = 质量的确定性:不管使用者是谁,不合格的输出都进不了发布管道
- 台账 = 过程的确定性:任何一篇发到哪、什么时候发的,都查得到
- 适配器 = 平台的确定性:新平台接入有固定套路,不依赖某个人的经验
再往深一层看,这就是 Loop Engineering 的终局:把「复制系统」这件事本身也做成闭环。 每复制一份给新客户,就得到一份真实反馈——哪个平台跑不通、哪个门禁误伤、哪个适配器要升级。反馈回灌系统,系统下一次复制时就更完善一点。
复利就在这里:一次构建,N 次复制,每次复制都是增量反馈。 从「卖时间」到「卖系统」,再从「卖系统」到「卖进化」——后者才是真正的系统公司。
八、总结:今天就能开始的三件事
回顾三步跃迁:
- 配置化:platforms.env + load_creds(),把凭据从代码里挪出去
- 门禁化:validate → continuity → checker → gate 四道物理管道
- 产品化:每个平台一个适配器 + publication-ledger 台账
不要等有人来问你「能不能给我也搭一套」。今天做三件事:把凭据挪进配置文件;给发布命令前加一道验证脚本;建一个台账文件记录全平台的发布状态。
做完这三件,你的系统就从「你的系统」变成了「能卖的系统」——这是 OPC 系列的最后一块拼图,也是系统公司的第一块地基。
下一篇预告:开启新系列——数智化转型实战
系列二收官了。一个人的系统方法论已经完整:从架构蓝图到内容工厂,从智能客服到无人值守,从 A/B 测试到可复制系统。但一个人再强,也只是一个人。下一篇开始,我们把视角从「一个人」拉到「一个组织」——数智化转型实战系列第一篇:一个人的方法论,怎么迁移到一个团队?
本文认知索引
️ 实体:配置化 · 物理门禁 · 平台适配器 · 发布台账 价值:系统复制 · 多平台分发 · 可审计记录 认知:从「卖时间」到「卖系统」,再到「卖进化」
关于作者:魏无记,AI 和数智化实践者。专注 Agent 工程化与 Loop Engineering 研究以及数智化转型。公众号持续更新 Agent 工程化实战系列和数智化转型相关知识实践——每篇都是保姆级教程照做就行。