我用 MCP + 多 Agent 搭了一条自动化内容发布流水线

0 阅读3分钟

一句话总结:把「写好的 Markdown」变成「已发布的文章」,中间那些登录、排版、选标签、点发布的琐碎动作,现在交给一组会分工的 AI Agent 去干。

一、为什么要做这条流水线

我同时维护掘金、知乎几个阵地。一篇稿子写完,真正的消耗才刚开始:

  • 复制粘贴到各平台编辑器,格式经常乱掉;
  • 代码块要重新贴一遍,缩进全丢;
  • 每个平台的话题 / 标签规则不一样;
  • 发布前还得反复核对分类、封面、摘要。

这些活儿重复、机械、还容易出错,典型该被自动化。

二、整体架构:主助手 + 专职子助手

整条链路是「一个大脑 + 若干只手」:

用户指令
   │
   ▼
主助手(编排 / 决策)
   ├── 子助手 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 走它自己的解析流程:

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。这种情况就简单了——拿到实例直接写:

const inst = document.querySelector('.CodeMirror').CodeMirror;
inst.setValue(markdownText);

一句话搞定,比模拟粘贴稳得多。

4.3 规律总结

编辑器内核推荐注入方式
Draft.js伪造 ClipboardEvent('paste')
CodeMirror / Monaco拿实例调 setValue
原生 textarea直接赋值 + 触发 input 事件
contenteditable谨慎,优先走粘贴事件

五、几个真实的坑

  1. 键盘输入 ≠ 可控:某些编辑器上「全选 + 输入」会清空全文,务必先确认光标位置。
  2. CDP 的 Input.insertText 不通用:对 Draft.js 无效,对 CodeMirror 却好用,别一刀切。
  3. 中文选项要映射成 value:表单里的中文标签,实际提交的可能是英文 value,先建映射表再动手。
  4. 每步都要断言:填完一步就校验 DOM,别等最后才发现某步没生效。
  5. 出错先撤销:优先点编辑器的「撤销」按钮回退,比强行改 DOM 安全。

六、小结

这条流水线搭完之后,发布一篇稿子从「十几分钟的手工活」变成了「一句话 + 一次确认」。

我的几点体会:

  • 编排要扁平,别依赖深层嵌套;
  • 工具要原子,一个工具只干一件事;
  • 注入要因地制宜,先侦察编辑器内核,再选方法;
  • 校验要前置,每一步都留断言。

Agent 不会替你思考选题,但它完全可以替你干完那些「重复到不想干」的活。这才是自动化真正的价值。

使用的开源软件:xiweicheng.github.io/ai-helper/