AI Agent 架构实战:从零拆解多Agent协作营销系统的设计与实现

AI Agent 架构实战:从零拆解多Agent协作营销系统的设计与实现

36氪最近发文称"AI SaaS 潮水来袭,Agent 时代软件价值重估"。作为开发者,与其看行业分析,不如直接拆解一个真实的多 Agent 营销系统------本文从架构设计到代码实现,讲清楚多 Agent 协作到底是怎么落地的。

一、为什么营销场景需要多Agent协作

单个 LLM 调用能做什么?写一篇文章、回一条消息、生成一个标题。但一个完整的营销流程远不止于此:

  1. 选题研究:分析热点、匹配产品卖点、确定切入角度
  2. 内容创作:撰写稿件、SEO 优化、平台规则适配
  3. 多平台分发:格式转换、登录态管理、定时发布
  4. 数据回收:采集阅读/评论/收藏数据、异常检测
  5. 复盘优化:分析数据趋势、调整内容策略

每个环节需要不同的能力、不同的工具、不同的执行策略。用一个 Agent 做所有事,就像让一个人同时当策划、文案、运营和数据分析师------理论上可行,实际上每个角色都做不好。

多 Agent 协作的核心价值:让每个 Agent 专注自己的领域,通过结构化通信实现任务流转,最终形成 1+1>2 的协作效果。

二、系统架构总览

以一个实际运行中的 AI 营销系统(GrowthClaw)为例,它的多 Agent 架构分为四层:

复制代码
┌─────────────────────────────────────────────────┐
│                   用户层                          │
│  产品信息输入 → 目标设定 → 审核确认 → 数据查看     │
└────────────────────┬────────────────────────────┘
                     │
┌────────────────────▼────────────────────────────┐
│               调度层(COO Agent)                  │
│  任务拆解 → 优先级排序 → Agent 分派 → 进度追踪     │
└──┬──────────┬──────────┬──────────┬─────────────┘
   │          │          │          │
┌──▼──┐  ┌───▼───┐  ┌───▼───┐  ┌───▼───┐
│内容  │  │ 投放   │  │ 数据   │  │ 策略   │
│Agent │  │ Agent  │  │ Agent  │  │ Agent  │
│      │  │        │  │        │  │        │
│选题  │  │多平台  │  │指标    │  │营销    │
│创作  │  │分发    │  │采集    │  │计划    │
│SEO   │  │定时    │  │异常    │  │复盘    │
│审核  │  │登录    │  │报告    │  │优化    │
└──────┘  └────────┘  └────────┘  └────────┘

2.1 各 Agent 职责边界

Agent 核心职责 工具依赖 输入 输出
COO Agent 任务编排、进度管理、审核把关 Flow 引擎、待办系统 用户目标/营销计划 任务单、审核结果
内容 Agent 选题→创作→SEO→自检→提交 LLM、热点采集、内容注册表 任务单 审核稿件
投放 Agent 登录→发布→结果确认→回写 浏览器自动化、CDP 审核稿件 发布结果
数据 Agent 指标采集→异常检测→报告 CDP、指标库 已发布文章列表 运营数据
策略 Agent 计划制定→热点跟踪→复盘分析 热点采集、指标库 历史数据+产品信息 策略建议

2.2 关键设计原则

职责单一:每个 Agent 只做一类事,做好一件事。内容 Agent 不碰发布,投放 Agent 不写文章。

状态机驱动:任务生命周期由状态机(task.json)承载,不靠目录搬迁或文件重命名。状态流转有明确的前置条件和后置动作。

信箱接力:Agent 之间通过待办系统(todos.db)异步通信,不直接阻塞等待。登录失效?落待办、等用户扫码、自动续跑。

三、任务编排:COO Agent 的核心能力

COO Agent 是整个系统的"大脑",核心职责是把用户的模糊目标拆解成可执行的任务链。

3.1 任务拆解流程

以"本周在 CSDN 发 3 篇技术文章"为例,COO 的工作流:

python 复制代码
# 伪代码:COO 任务拆解
def plan_weekly_content(user_goal, product_info, hotspots):
    tasks = []
    for i in range(user_goal.article_count):
        # 1. 匹配热点与产品卖点
        angle = match_hotspot_to_product(hotspots, product_info)
        
        # 2. 生成任务单
        task = {
            "task_id": f"{date}-csdn-{i+1:03d}",
            "platform": "csdn",
            "status": "assigned",
            "research": {
                "angle": angle.description,
                "target_keywords": angle.keywords,
                "hotinfo_ref": angle.hotspot_id
            },
            "strategy": {
                "content_type": angle.content_type,
                "seo_strategy": angle.seo_plan
            }
        }
        tasks.append(task)
    
    # 3. 分派给内容 Agent
    for task in tasks:
        dispatch_to_content_agent(task)

3.2 Flow 引擎:步骤级编排

COO 不直接写代码控制流程,而是通过声明式的 Flow YAML 定义步骤链:

yaml 复制代码
# content-production-flow.yaml(简化版)
name: content-production-flow
steps:
  - id: preflight
    description: "平台匹配校验"
    
  - id: research
    description: "选题研究"
    condition: "$preflight.platform_match == true"
    
  - id: strategy
    description: "内容策略"
    
  - id: draft
    description: "内容创作"
    condition: "$strategy.strategy_done == true"
    
  - id: seo
    description: "SEO优化"
    
  - id: rule_check
    description: "平台规则审核"
    
  - id: quality
    description: "质量自检"
    condition: "$rule_check.passed == true"
    
  - id: submit_review
    description: "提交审核"

每个步骤有明确的前置条件 (condition)和输出产物(outputs)。条件不满足?流程自动停在那里,不会跳步。这是多 Agent 系统可靠运行的基础。

四、Agent 间通信:信箱接力模式

多 Agent 协作最大的工程挑战不是"怎么调用",而是"怎么处理失败"。

4.1 传统 RPC 的问题

如果 Agent A 同步调用 Agent B:

复制代码
Agent A → 调用 B → 等待 30s → B 失败 → A 也失败 → 整条链路重跑

在营销场景中,"B 失败"的原因往往是用户需要扫码登录------这不是代码能自动修复的,需要人工介入。同步等待会导致整个流程卡死。

4.2 信箱接力方案

GrowthClaw 采用信箱接力模式:

复制代码
Agent A → 写待办到 todos.db → 正常结束(不阻塞)
                                ↓
用户扫码登录 → 待办状态变更 → mailbox_relay 检测到 → 自动 resume Agent A 的后续步骤

核心代码逻辑:

python 复制代码
# 信箱接力:Agent A 发现登录失效
def on_login_expired(flow_id, task_id):
    # 1. 落待办(不阻塞)
    todo_upsert(
        type="login_pending",
        platform="csdn",
        task_id=task_id,
        action_hint=flow_id  # 关联 Flow ID,用于自动续跑
    )
    
    # 2. 通知用户
    notify_main_agent("请扫码登录 CSDN")
    
    # 3. 退出但保持 Flow blocked(不标记失败)
    sys.exit(1)

# mailbox_relay:后台轮询待办
def relay_loop():
    for todo in get_resolved_todos():
        if todo.action_hint:  # 有关联 Flow
            resume_flow(todo.action_hint)  # 从断点续跑

关键设计action_hint 字段关联了待办和 Flow,用户解决待办后系统自动续跑,不需要人工重新触发。

五、发布流程:浏览器自动化实战

投放 Agent 负责将审核通过的稿件发布到各平台。以 CSDN 为例,发布流程涉及浏览器自动化:

5.1 CDP(Chrome DevTools Protocol)操作链

python 复制代码
# 发布流程核心步骤
def publish_to_csdn(task, content):
    # 1. 检查登录态(三态契约)
    login_status = check_login()  # LOGGED_IN / NOT_LOGGED_IN / UNKNOWN
    if login_status != "LOGGED_IN":
        return on_login_expired(flow_id, task.task_id)
    
    # 2. 打开编辑器
    cdp_open("https://editor.csdn.net/md/")
    
    # 3. 隐藏 AI 助手弹窗(遮挡编辑区)
    cdp_evaluate("document.querySelector('iframe.ai-assistant')?.style.display='none'")
    
    # 4. 注入标题(nativeInputValueSetter 绕过框架)
    cdp_evaluate(f"""
        var input = document.querySelector('input[placeholder*="标题"]');
        var nativeSetter = Object.getOwnPropertyDescriptor(
            HTMLInputElement.prototype, 'value').set;
        nativeSetter.call(input, {json.dumps(title)});
        input.dispatchEvent(new Event('input', {{bubbles: true}}));
    """)
    
    # 5. 注入正文(contentEditable,禁止 browser type)
    cdp_evaluate(f"""
        var editor = document.querySelector('[contenteditable=true]');
        editor.innerHTML = {json.dumps(marked_content)};
        editor.dispatchEvent(new Event('input', {{bubbles: true}}));
    """)
    
    # 6. 点击发布(需 --submit-confirmed 人工确认)
    if submit_confirmed:
        click_visible_button("发布文章")
        article_id = wait_for_success_page()

5.2 安全机制

发布流程有多层安全门禁:

  1. pre_publish_validate:检查 draft 存在、status 合法、发布许可门匹配
  2. submit-confirmed 开关:没有这个标志,publish.py 不会真正点发布按钮
  3. verify_publish:发布后 HTTP 验证文章可访问 + 标题匹配
  4. archive_publish:幂等回写 content.db,COALESCE 保留已有值

六、数据闭环:采集→分析→优化

数据 Agent 负责采集已发布文章的运营数据,形成闭环:

6.1 数据采集架构

复制代码
content.db(已发布文章白名单)
        ↓
cdp_collect.mjs(CDP 网络拦截 + DOM 降级)
        ↓
store_metrics.py(幂等入库,INSERT OR REPLACE)
        ↓
data/csdn.db(article_metrics + account_metrics)
        ↓
COO Agent(异常检测 + 复盘报告)

6.2 幂等性设计

数据采集的核心挑战是幂等性------同一天多次运行不能产生重复数据:

sql 复制代码
-- 唯一索引保证幂等
CREATE UNIQUE INDEX idx_article_daily 
  ON article_metrics(article_id, metric_date, account_id);

-- INSERT OR REPLACE:同日同文章重采覆盖而非追加
INSERT OR REPLACE INTO article_metrics 
  (platform, article_id, metric_date, clicks, likes, ...)
VALUES (?, ?, ?, ?, ?, ...);

七、落地经验与踩坑记录

7.1 浏览器自动化的坑

  • CSDN 编辑器 :标题输入必须用 nativeInputValueSetter + dispatchEvent,直接设 value 不触发框架更新
  • AI 弹窗遮挡:编辑器打开时自动弹出 AI 助手 iframe,必须先隐藏才能操作
  • 标签输入丢事件:Enter 后 DOM 重建丢事件(实测 4 丢 2),需要两段式「设值→sleep→补发 Enter→验证」
  • 冷启动时序:新开浏览器 tab 后 SPA 需要额外加载时间,直接操作会找不到 DOM 元素

7.2 多 Agent 协作的坑

  • 并发冲突:同一平台同时发布两篇文章会导致浏览器状态混乱,需要串行调度
  • 状态不一致:task.json 和 content.db 必须保持同步,单点写入(content_registry.py)是关键
  • 待办过期:login_scan 待办如果用户一直不处理,需要有超时和重试机制

八、FAQ

Q1:多 Agent 和单 Agent + 多工具调用有什么区别?

单 Agent + 多工具的问题是上下文膨胀------一个 Agent 要记住所有工具的用法、所有平台的规则、所有流程的状态。当工具超过 10 个、流程超过 5 步时,LLM 的指令遵循能力会显著下降。多 Agent 通过职责拆分,每个 Agent 只需要理解自己领域的 3-5 个工具,可靠性大幅提升。

Q2:Agent 之间怎么传递数据?

两种方式:共享文件系统(task.json + content.db)和待办系统(todos.db)。不走 RPC,不走消息队列------文件系统是最简单、最可靠的共享状态方案,崩溃恢复天然支持。

Q3:这套架构适合什么规模的团队?

最适合一人公司或小团队(1-3 人)。大团队有专职运营,不需要 AI 替代;一人公司需要 AI 承担全部营销工作,多 Agent 架构正好填补这个需求。

Q4:怎么保证生成内容的质量?

三层质量门禁:规则审核(违禁词/字数/格式)→ 质量自检(产品一致性/品牌调性/CTA)→ 人工审核(主理人把关)。AI 自动过前两层,人工只审最后一层,效率和质量兼顾。

Q5:开源吗?有完整代码吗?

本文描述的架构来自 GrowthClaw 项目的实际实现。核心组件(Flow 引擎、待办系统、内容注册表、指标采集)均已工程化,但本文侧重架构设计而非逐行代码讲解。感兴趣的开发者可以关注后续的工程实践系列。

九、总结

多 Agent 营销系统的核心架构可以归纳为三个关键词:

  1. 职责拆分:COO 编排、内容创作、投放执行、数据采集、策略优化,各司其职
  2. 状态驱动:task.json 状态机 + Flow YAML 步骤链,不靠目录搬迁,不靠口头约定
  3. 信箱接力:Agent 通过待办系统异步通信,中断可恢复,用户介入不影响自动化

这套架构已经在实际生产环境中运行,覆盖 CSDN、头条、微博、知乎、搜狐等 11 个平台的内容创作和分发。对于想做 AI 营销自动化的开发者来说,多 Agent 不是概念,而是工程落地的正确路径。


本文架构描述基于 GrowthClaw 项目的实际实现。数据和案例来自真实生产环境运行记录。

相关推荐
遥感知识服务1 小时前
从局部阈值、双极化到暗地表剔除:NASA OPERA DSWx-S1全球动态水体算法拆解
大数据·人工智能·深度学习·神经网络·算法·机器学习
讲温控就好了1 小时前
从医疗影像到能源存储——芯片冷却温控技术的跨行业赋能
人工智能·python·能源
Rain的Java大神之路1 小时前
短信接口被狂刷怎么处理
java·运维·后端·web安全·面试·架构·xss
ZJU_统一阿萨姆1 小时前
【算子开发】算子融合与Softmax_LayerNorm实现
人工智能·算法·语言模型·硬件架构
chunmiao30322 小时前
皮尤研究:ChatGPT 发布后,超三成新网页带 AI 创作痕迹
人工智能·机器学习·chatgpt
HIT_Weston2 小时前
181、【Agent】【OpenCode】TuiThreadCmd(类型增长)(编译&运行时)
人工智能·agent·opencode
jeffsonfu2 小时前
循环神经网络(RNN)详解:处理序列数据的自然选择
人工智能·深度学习