一句话总结:把「写好的 Markdown」变成「已发布的文章」,中间那些登录、排版、选标签、点发布的琐碎动作,现在交给一组会分工的 AI Agent 去干。
一、为什么要做这条流水线
我同时维护掘金、知乎几个阵地。一篇稿子写完,真正的消耗才刚开始:
- 复制粘贴到各平台编辑器,格式经常乱掉;
- 代码块要重新贴一遍,缩进全丢;
- 每个平台的话题 / 标签规则不一样;
- 发布前还得反复核对分类、封面、摘要。
这些活儿重复、机械、还容易出错,典型该被自动化。
二、整体架构:主助手 + 专职子助手
整条链路是「一个大脑 + 若干只手」:
css
用户指令
│
▼
主助手(编排 / 决策)
├── 子助手 A:浏览器自动化(登录、填表、点发布)
├── 子助手 B:内容处理(Markdown 转换、摘要生成)
└── 子助手 C:数据回收(阅读量、展现量抓取)
主助手负责理解意图、拆解步骤,把子任务 dispatch 给对应的子助手;子助手只专注自己那一小块能力。
一个硬限制值得记一笔:平台对子助手的嵌套分派最多 2 层(主 → 子 A → 子 B 可以,子 B 再往下派就会被拦)。所以编排层要尽量扁平,别指望无限套娃。
三、工具层:让 Agent 真的能「动手」
Agent 光会聊天没用,得有手。通过 MCP(Model Context Protocol)把工具挂上去之后,它才能:
| 能力 | 对应工具 | 用途 |
|---|---|---|
| 浏览器控制 | 点击 / 输入 / 执行 JS | 登录、填表、发布 |
| 文件读写 | read / write | 存草稿、存配置 |
| 命令执行 | exec | 调脚本、转格式 |
关键在于:把「能力」抽象成工具,把「流程」留给 Agent 自己规划。这样换一个平台,只要加一个工具,不用改整套逻辑。
四、实战:不同编辑器,「注入姿势」完全不同
这是踩坑最多的地方。同样叫「编辑器」,底层实现天差地别,用错方法就是白干。
4.1 知乎:Draft.js 只认 paste 事件
知乎正文是 Draft.js。直接改 DOM 或 execCommand 会和它内部状态打架,表现为文字串位、莫名删除。
唯一可靠的做法是伪造一个粘贴事件,让 Draft.js 走它自己的解析流程:
js
const dt = new DataTransfer();
dt.setData('text/html', html); // 保留标题、列表、链接
dt.setData('text/plain', plain); // 兜底纯文本
editor.dispatchEvent(new ClipboardEvent('paste', {
clipboardData: dt,
bubbles: true,
cancelable: true
}));
小坑:粘贴后第 0 个块会丢文字,需要事后把光标移回去补一次。
4.2 掘金:ByteMD + CodeMirror,直接 setValue
掘金切到 Markdown 模式后是 ByteMD,内核是 CodeMirror 5。这种情况就简单了------拿到实例直接写:
js
const inst = document.querySelector('.CodeMirror').CodeMirror;
inst.setValue(markdownText);
一句话搞定,比模拟粘贴稳得多。
4.3 规律总结
| 编辑器内核 | 推荐注入方式 |
|---|---|
| Draft.js | 伪造 ClipboardEvent('paste') |
| CodeMirror / Monaco | 拿实例调 setValue |
| 原生 textarea | 直接赋值 + 触发 input 事件 |
| contenteditable | 谨慎,优先走粘贴事件 |
五、几个真实的坑
- 键盘输入 ≠ 可控:某些编辑器上「全选 + 输入」会清空全文,务必先确认光标位置。
- CDP 的 Input.insertText 不通用:对 Draft.js 无效,对 CodeMirror 却好用,别一刀切。
- 中文选项要映射成 value:表单里的中文标签,实际提交的可能是英文 value,先建映射表再动手。
- 每步都要断言:填完一步就校验 DOM,别等最后才发现某步没生效。
- 出错先撤销:优先点编辑器的「撤销」按钮回退,比强行改 DOM 安全。
六、小结
这条流水线搭完之后,发布一篇稿子从「十几分钟的手工活」变成了「一句话 + 一次确认」。
我的几点体会:
- 编排要扁平,别依赖深层嵌套;
- 工具要原子,一个工具只干一件事;
- 注入要因地制宜,先侦察编辑器内核,再选方法;
- 校验要前置,每一步都留断言。
Agent 不会替你思考选题,但它完全可以替你干完那些「重复到不想干」的活。这才是自动化真正的价值。
使用的开源软件:xiweicheng.github.io/ai-helper/