用 AI Agent 搭建微信公众号全自动内容 Pipeline:从选题到发布的事件驱动架构实战

一晚上从零搭建了一套 AI 驱动的内容自动化系统,从选题筛选到文章发布全流程覆盖。本文分享完整的架构设计、踩坑经验和关键代码。

前言

作为一个技术自媒体运营者,最头疼的事情不是写文章本身,而是整个内容生产流程:

  • 每天从几十个信息源里筛选值得写的选题
  • 选题确定后要做深度调研,不能写水文
  • 写完还要排版、配图、发布到多个平台

如果这些重复性工作能让 AI 自动完成,人只需要在关键节点做决策把关,那效率会提升多少?

答案是:我们用一晚上搭好了这套系统。

整体架构

事件驱动 + 人工卡点

这套系统不是"一键生成文章"的玩具,而是一个事件驱动 + 人工卡点交替推进的工程化 Pipeline:

定时触发 → AI筛选选题 → 【人工确认】→ AI深度调研+大纲 → 【人工确认】→ AI撰写全文 → 【人工确认】→ 自动发布

关键设计原则:AI 负责执行,人负责决策。 三道人工卡点保证内容质量。

三层分离架构

┌─────────────────────────────────────┐
│         Skill 层(编排入口)          │
│   SKILL.md 定义10种事件处理规则       │
└──────────────┬──────────────────────┘
               │
┌──────────────▼──────────────────────┐
│         Agent 层(思考执行)          │
│  Strategist │ Architect │ Scribe    │
│   选题筛选   │ 调研+大纲  │ 撰写全文  │
└──────────────┬──────────────────────┘
               │
┌──────────────▼──────────────────────┐
│         工具层(基础设施抽象)         │
│   db.py(14个子命令)+ config.py     │
│   Agent 不接触任何凭证和数据库连接     │
└─────────────────────────────────────┘

为什么要三层分离?

  1. 安全:Agent 通过工具脚本间接操作数据库,不接触 Supabase 密钥
  2. 可测:每层可以独立测试和替换
  3. 可维护:换数据库只改工具层,Agent 层和 Skill 层不用动

核心机制:Sub-Agent 接力

这是整套系统最关键的技术验证点。

问题

主 Agent 负责编排,具体任务(选题/调研/写作)交给 Sub-Agent 执行。但 Sub-Agent 完成后怎么通知主 Agent 继续下一步?

方案

利用 OpenClaw 的 sessions_spawn 机制:

# 主 Agent spawn 一个 Sub-Agent 执行调研任务
sessions_spawn(
    task="根据选题进行深度调研,生成文章大纲",
    label="architect-article-42",
    mode="run"
)

Sub-Agent 完成后,系统自动推送完成事件到主 Session。主 Agent 通过 label 识别来源,按 Skill 规则决定下一步。

验证结果

02:42 spawn Sub-Agent → 执行调研任务
02:43 Sub-Agent 完成 → 系统推送完成事件
02:43 主 Agent 收到事件 → 解析输出 → 接力下一步
✅ 全链路通过

这个接力机制是整套 Pipeline 能跑起来的基石。

三个 AI 角色设计

Strategist(策略师)—— 选题筛选

  • 输入:radar_outbox 表中的当日 AI 热点话题(由 HuggingFace Space 自动抓取)
  • 任务:从几十个话题中筛选 3-5 个最值得写的
  • 输出:带评分和理由的选题列表
  • 特点:纯判断,不搜索,不创作,确保筛选的客观性

Architect(架构师)—— 深度调研 + 大纲

  • 输入:确认后的选题
  • 任务:先调研(搜索引擎 + 官方文档),再生成大纲
  • 输出:带信息源标注的详细大纲
  • 关键约束:必须先调研后大纲,调研深度是核心价值

Scribe(撰稿人)—— 内容写作

  • 输入:确认后的大纲 + 调研材料
  • 任务:撰写完整文章
  • 输出:符合公众号风格的 Markdown 全文
  • 写作规范:禁止 AI 味重的表达("在当今..."、"让我们..."),要求干货密度

数据层设计

使用 Supabase 作为数据存储,核心表结构:

-- 文章主表
CREATE TABLE articles (
    id SERIAL PRIMARY KEY,
    title TEXT NOT NULL,
    status TEXT DEFAULT 'topic_selected',  -- 状态机
    topic_source JSONB,          -- 选题来源
    outline TEXT,                 -- 大纲
    content TEXT,                 -- 正文
    created_at TIMESTAMPTZ DEFAULT NOW()
);

-- 状态流转:
-- topic_selected → outline_draft → outline_confirmed 
-- → writing → review → published

状态机设计确保每篇文章都有清晰的生命周期,任何时候都知道它在哪个阶段。

工具脚本层

db.py 封装了 14 个子命令,覆盖 Pipeline 全流程:

# 获取今日热点话题
python3 db.py get-radar-topics --limit 20

# 保存选题
python3 db.py save-selections --article-id 42 --topics '[...]'

# 创建文章
python3 db.py create-article --title "xxx" --topic-source '{...}'

# 保存大纲/正文
python3 db.py save-outline --article-id 42 --outline "..."
python3 db.py save-content --article-id 42 --content "..."

# 查询状态
python3 db.py get-active-articles

Agent 只需要调用这些命令,不需要知道 Supabase 的 URL、Key 或者 SQL 语法。

踩坑与经验

1. Sub-Agent 的 streamTo 限制

最初想用 streamTo="parent" 实现实时流式输出,发现这个参数只支持 ACP runtime。但 push-based 的完成事件已经够用,不影响核心流程。

2. Skill 作为编排入口的好处

最初设计是让主 Agent 记住所有流程规则。后来改为写在 SKILL.md 里,主 Agent 每次查阅执行。好处是:

  • 流程修改只改 SKILL.md,不用重新训练 Agent
  • 调试时一目了然,知道 Agent 该做什么
  • 多个事件类型的处理规则不会混淆

3. Agent 不该直接操作数据库

第一版设计让 Agent 直接用 SQL 操作 Supabase。问题很明显:

  • Agent 需要记住 SQL 语法和表结构
  • 凭证暴露在对话上下文中
  • 出错难以排查

改成工具脚本层后,Agent 只需要 python3 db.py xxx,干净利落。

总结

这套系统的核心思想是:让 AI 做 AI 擅长的事(筛选、调研、写作),让人做人擅长的事(决策、把关、定方向)。

技术栈:

  • 编排:OpenClaw + Skill 事件驱动
  • 执行:Sub-Agent(Strategist / Architect / Scribe)
  • 存储:Supabase(PostgreSQL)
  • 抽象:Python 工具脚本层
  • 交互:Discord 频道(审核和确认)

从方案设计到代码框架,一个晚上完成。下一步是接入真实数据源跑起来,到时候再分享实战效果。


如果你也在做内容自动化,欢迎交流。 关注我,后续会分享更多 AI Agent 实战经验。


标签:AI Agent, 内容自动化, 事件驱动架构, OpenClaw, Supabase, 微信公众号, Sub-Agent

posted @ 2026-04-09 05:37  xiaochuran_ai  阅读(1047)  评论(0)    收藏  举报