平台用 AI 优化匹配,用 Agent 提升你在它后台里的操作效率——但这些智能都长在平台的墙里面。跨出墙头,你得有自己的一层。

作者:zhanbo · 2026-09-09

声明:本文为独立行业观察 / 独立技术实践,基于公开资料整理,不代表任何雇主或客户观点;本工作室不承接游戏(含手游 / 休闲 / 中重度)行业相关咨询。


tl;dr

  • 广告平台的 AI 投入方向一直很清楚:对内,用 AI 优化广告匹配——决定谁看到这条广告;对外,用 Agent 提升广告主在自家后台内的操作效率。这两件事平台都会越做越好,但它们有一个共同边界:只在自家平台的墙内生效,且优化目标天然对齐平台自己的收入。
  • 广告主的真实战场却是跨平台、多渠道的。一个账户同时开着几家媒体,每一家都有自己的"智能投放",每一家的智能都只对自己平台的钱包负责。于是广告主侧必然要长出自己的一层:聚合投放(一个入口管所有平台的动作和数据)→ 独立归因(跨平台的账算得清)→ 投放策略管理(预算怎么分、何时止损放量,规则在自己手里)→ 智能投放 Agent(这一层自己会感知、提议、执行、学习)。
  • 这不是"要不要做"的选择题,是分工演化的结果:平台越智能,广告主越需要一个跨平台、对齐自己生意目标、且自己可控的智能层。
  • 这套系统从第一天起就按真实广告账户设计、在真实投放中迭代。构建过程中最核心的结论是:它的护城河不在模型,也不在连接器,在"信任结构"——跨平台数据归一、写动作分级审批、动作结果延迟回采、策略只学真实样本。少一样,广告主就不敢把账户交出来,Agent 也学不到真东西。
  • 本文按业务需求 → 痛点 → 概念模型 → 技术架构 → 实现的顺序完整展开,包含十几个具体的工程取舍和理由。适合正在设计或评估"AI + 投放"系统的人收藏慢看。

一、业务需求:平台的智能,和广告主的智能,不是同一种智能

先把一个常见的误会拆掉。

很多人觉得,广告平台已经这么智能了——全托管 campaign、自动出价、自动扩量、自动生成素材——广告主再建一套"智能投放"是不是重复造轮子?

不是。因为平台的 AI 从来只服务两件事:

  • 对内,优化广告匹配:决定哪条广告展示给哪个人。这是平台收入引擎的核心,eCPM 竞价、点击率/转化率预估、探索与利用机制,全部围绕"平台生态的长期变现效率"设计。
  • 对外,提升广告主在自家后台内的操作效率:自动托管、智能建议、对话式助手、官方 MCP 接口——让你在它的体系里花钱花得更顺、更快、更少摩擦。

注意边界:这两件事都只在单个平台的墙内生效,而且优化目标函数天然对齐平台自己的收入,不是广告主的利润。广告主面对的真实战场是另一个形状:

  • 一个账户同时开着几家媒体,每家都有自己的一套"智能投放",黑盒程度不一,建议互相矛盾;
  • 预算总量是有限的,真正的决策不是"在 A 平台里怎么投",而是"这一万元分给 A、B、C 各多少、什么节奏、按什么信号再平衡";
  • 平台报表里的转化是平台口径,跨平台去重、真实增量、回收周期,平台不会替你算——它们既没有动力,也没有彼此的数据;
  • 投放经验(什么品类什么阶段用什么打法、什么信号可信、什么时候该逆着平台建议操作)散落在投手的脑子里和历史账户里,人一走就带走。

所以广告主侧必然要长出自己的一层。这不是"要不要做"的选择题,是分工演化推出来的,按依赖关系是四级台阶:

  1. 聚合投放:一个入口统一管理跨平台的计划、预算、出价、素材和报表,动作和数据先归一,结束"十个后台十套数"的状态;
  2. 独立归因与度量:跨平台账算得清——哪个渠道带来的是增量而不是平台自报的转化,LTV 回收按什么口径,这是后面一切策略的事实基础;
  3. 投放策略管理:预算分配规则、止损/放量阈值、素材轮换规则、平台建议的采信边界——把投手经验固化成可审计、可迭代、可复用的资产,而不是聊天记录里的手感;
  4. 智能投放 Agent:在以上三层之上,系统自己 7×24 感知异动、提出方案、在授权边界内执行、用真实结果复盘并改进策略。

顺序不能反。没有聚合,Agent 只能一个平台一个平台地当外挂;没有独立度量,Agent 学到的全是平台喂给它的自我评价;没有策略管理层,Agent 的每次决策都是一次性的,组织没有积累。Agent 是这层的最终形态,不是起点。

再落到投放团队的日常,这层要承接的是四类动作:

  • 机械操作:调价、调预算、上下线、换素材。平台越来越复杂,一个投手同时管几十个计划组是常态;
  • 数据搬运与对账:媒体的数、归因的数、业务的数,每天先花一两个小时对数,是很多团队的早课;
  • 盯盘:成本突然飙了、ROI 跌穿保本线、素材衰减、账户异常,发生在任何时间,包括凌晨;
  • 策略迭代:素材配什么人群、预算往哪里倾斜、什么信号该喂给平台自动出价——真正决定 ROI、经验最密集的部分。

前两类是效率问题,后两类是效果问题。只解决效率,你得到一个更快的后台;跳过前三层直接承诺效果,你得到一个 PPT。

还有一个更硬的需求:可审计。每一次执行都要能回答——谁(或哪个模型)提议的、依据是什么、谁批准的、什么时候发出去的、媒体侧实际生效成了什么、两天后效果如何、这笔经验该不该进入下一轮策略。可审计不是合规要求,是广告主敢把账户交给系统的前提:每一次"自主"都必须可追溯、可解释、可回滚。

业务需求收敛成一句话:一个站在广告主一侧、跨平台、对齐自己生意目标、在授权边界内自主运转且每笔账说得清的投放智能层。

“广告主一侧"和"授权边界内"这两个词,决定了后面所有的架构。


二、痛点:为什么"接个大模型"解决不了

过去一年市场上出现了大量"对话式投放助手”,也有不少团队自己动手搭。把这些方案放到真实账户前面,会反复撞到同一组墙。

1. 命令解析器不是 Agent

最常见的形态是:用户输入一句话,系统用大模型做意图分类,映射到某个操作,调一下 API,返回一句"已为您完成"。

这不是 Agent,这是一个自然语言外壳。它没有自主循环——你不说话它不动;没有规划——一句话映射一个动作;没有观察之后的再决策;更没有记忆和复盘。它和传统后台的唯一区别,是把菜单换成了对话框。

判断标准很简单:命令解析器是"你说 X 它做 X";真正的 Agent 是"它知道目标,自己想出 X,做完再根据结果决定下一步"。 前者是工具,后者才是操盘手。

2. demo 里什么都好,上真账户就失灵

市面上不少"AI 投放助手"的演示非常丝滑:对话里说一句"把 ROI 低的计划停掉",屏幕上计划应声暂停、报表立刻更新。但追问一句会发现,整个演示跑在模拟数据和模拟接口上——从来没接过真实广告账户。

这是选型时最致命的错觉。模拟环境是开发和测试的必需品,任何严肃系统上线前都会先用沙箱账户完整验证;但沙箱是手段,不是产品。一个只会在沙箱里跑的系统,价值和飞行模拟器差不多——它证明不了团队处理过真实的限流、异步审核、接口超时、币种取整、权限分级和账户异常。

更危险的变种是边界混淆:演示环境的数据和真实账户的报表在同一个界面里混着呈现,盯盘的人分不清哪个状态是真的。对这类系统,判断标准只有一个:要求它说清楚每一个动作作用在哪个账户、什么时候真实生效、媒体侧回读结果是什么。不敢回答这三句的,一律按没上过生产处理。

3. 投放动作的分布式语义,比想象中难

给媒体平台发一个"暂停计划"的请求,听起来是一行 API 调用的事。但在真实世界里:

  • 请求可能超时——请求到底到没到、媒体执行没执行,你不知道;
  • 响应可能丢失,重试可能导致重复操作;
  • 平台 API 可能返回受理成功,但异步审核后实际没生效;
  • 你自己的服务可能在发出请求后、记录结果前重启。

任何一个环节处理不好,结果都是"系统说的账户状态"和"账户真实状态"不一致。而投手一旦发现一次对不上,对整个系统的信任就归零了。

4. 效果是延迟的、多源的、不完整的

按下"加预算"的那一刻,你拿不到效果。

媒体报表通常几小时内回传,独立归因平台可能要等一两天(归因窗口、回传延迟、时区切割)。也就是说,一个动作的真实成绩要分 2 小时、24 小时、7 天三个窗口才能看清,而且媒体口径和归因口径是两个数。更麻烦的是,“数据还没回来"和"数据回来了但是零"是两回事——前者是未知,后者是事实,绝大多数系统在这一步用 0 统一处理,直接把未知当成了"没效果”。

5. 错误的样本会训练出错误的策略

只要系统带一点"自学习",就会遇到样本污染:模型自己的预测值、平台后台的即时自报、还没回采完整的数据,不加区分地喂给策略模块,系统会"认真地"从不可靠样本里总结规律。

典型后果有两种:一是拿平台自报的转化当真相,策略越学越像平台的销售;二是数据没回全就当"没效果",把本来有效的动作判了死刑。等这些规律进入下一轮预算分配,花的就是真钱。这是自学习系统特有的、传统软件不存在的风险。学习门禁不是功能,是地基——策略只允许从真实执行、回采完整的样本里长出来。

6. 自主程度和信任程度,必须同步增长

还有一个组织层面的痛点:没有人敢第一天就把账户全权交给 Agent,也没有人愿意永远给每一个小动作点确认。自主性给得太快,客户睡不着觉;审批流卡得太死,Agent 退化成高级后台,效率价值又没了。

正确的形态是风险分级:只读操作自动执行;低风险写操作(比如换素材)在边界内自动;中风险(调价、调预算)主动提议、等人批准;不可逆或影响大的操作只建议、永不自动。并且分级必须是工具自带的元数据,不能靠模型每次自己判断"这次危不危险"。

这六个痛点指向同一个结论:模型解决的是"聪不聪明",而真实投放要解决的是"可不可信"。聪明可以靠 API 买到,可信只能靠结构建出来。


三、概念模型:大脑、身体、护栏、记忆

把上面的痛点翻过来,可以得到这套系统的概念模型。四个部分,一句话各管一件事。

1. 大脑:目标驱动的 Agent Loop

大脑是一个持续运行的循环:感知 → 规划 → 行动 → 观察 → 再规划,直到目标达成或需要人确认。它接受的输入是目标(“在 ROI 不低于保本线的前提下稳住量级”),不是指令(“把第三个计划暂停”)。

大脑可以用大模型,也可以在没有模型时退到规则引擎——但注意,大模型在这个系统里只负责"提议"。它不批准动作、不决定当前连的是真实还是模拟环境、不判定影响数据的真假、不参与策略样本的提权。这四件事全部由确定性代码路径控制。理由很朴素:凡是涉及钱和事实判定的环节,都不能受 prompt 影响。

2. 身体:连接器与数据地基

身体是和外部世界接触的部分:对接各媒体平台 API 的连接器、持续入仓的报表与归因事实表、四层运营实体(账户 / 计划 / 计划组 / 素材广告)。

大脑永远不直连媒体,它只能通过注册好的工具间接行动。这带来一个关键性质:所有动作都经过同一个控制点,分级、审计、限流、预算护栏自然全局生效,不存在"某条对话链路绕过了风控"。

3. 护栏:四级风险 + 环境隔离

护栏的第一支柱是动作风险分级,L0 到 L3:

  • L0:只读和低风险动作(拉报表、换素材),自动执行;
  • L1:有资金影响但幅度可控(小幅调价、暂停计划),主动提议、人批准后执行;
  • L2:影响更大(预算上调、出价结构调整),审批之外加执行前重校验;
  • L3:不可逆或越权动作,只给建议,永不自动执行。

分级是工具注册时的元数据,是事实源——模型每次自己判断"这次危不危险"不可靠,一句话注入就可能改变判断。外部协议接入的工具,写操作默认按最高风险处理,不能因为第三方服务自称"安全"就自动给它开写权限。

护栏的第二支柱是环境隔离:测试沙箱和真实账户是物理分开的两套连接,任何操作都带着环境标识贯穿界面和审批卡;真实连接缺凭证或缺权限时明确报错,不存在"悄悄退回演示数据还报成功"的路径。这不是产品卖点,是工程底线——沙箱用来在上线前把逻辑验证充分,碰真钱永远是最后一步,但系统从第一天起就是按真实账户设计的,状态机、幂等、回读在两种环境里跑的是同一套。

4. 记忆:三层时间尺度

  • 情景记忆:每个写动作执行前后发生了什么——动作前的账户快照、模型预测、执行结果、三个时间窗的实际影响。
  • 反思层:把一段段情景复盘成自然语言结论和启发式规则(“这类计划加预算后 7 天平均 ROI 转负,增幅应收窄”)。
  • 策略层:把结论固化成可执行的数值参数(预算增幅上限、止损阈值、素材轮换触发线),带置信度和样本量,持久化、可跨账户迁移、可回滚。

这里有一条决定系统能不能"越用越好"的规则:只有真实执行、经事实表回采、且完整度达标的动作结果,才允许进入策略学习。模型自己的预测、平台后台的即时自报、还没回采完整的残缺数据,可以展示、可以复盘,但永远改不动生产策略。没有合格样本时,策略宁可保持上一次学到的结果,也不更新——本质上,这道门禁保证 Agent 学的是"生意真实发生了什么",而不是"某个人或某个平台声称发生了什么"。

5. 四部分的关系,一句话讲完

系统自己的"身体和护栏"(跨平台连接器、数据事实层、动作实体、审批、审计)是底座,Agent Loop 是大脑(感知、规划、反思、学习),记忆让大脑跨时间积累,风险分级保证大脑的每一次行动都在授权边界内。

很多团队的失败,是只想做大脑,没有身体和护栏——一个聪明的决策接在一套不可靠的执行和一笔糊涂账上,结果比没有大脑更糟。也有团队只做了聚合工具(身体),始终没长出策略和大脑,停留在"更好用的后台"。这层价值的天花板,正是给 Agent 留下的位置。


四、技术架构:六层拆解

概念落成代码,系统可以分成六层。下面逐层讲清楚每层有什么、关键数据结构是什么、以及为什么这么设计。

第一层:Agent Runtime(ReAct 薄壳)

Runtime 的核心是一个 ReAct 风格的主循环,但这个循环必须薄。

它只负责编排:思考 → 选择工具 → 调用 → 观察结果 → 继续思考。“这次调用能不能执行、要不要审批、有没有超预算"这类横切判断不写在循环里,而是下沉到工具管线(第二层)。我们在重构中把主循环从近 800 行压到 400 多行,不是为了代码美观,是因为主循环一旦同时管"调什么"和"能不能调”,每加一个安全规则都要改动核心路径,测试成本和回归风险会随规则数指数上升。

规划有两条路径:有大模型时走模型规划(要求模型输出结构化的工具调用序列),无模型或模型不可用时自动降级到确定性规则规划器。两条路径产出的动作走完全相同的护栏链路——模型的决策不享受任何捷径。会话状态(目标、步骤、待审批项、上下文)持久化到数据库,服务重启后会话不丢。

第二层:工具注册表 + 管线中间件

系统的所有能力——观察计划、筛选异常、预测影响、暂停、调预算、调价、换素材、出报告——都封装成标准工具,注册进统一的 Tool Registry。每个工具在注册时声明四个元数据:名称、参数模式、读/写属性、风险级别 L0–L3。

工具调用走一条洋葱式(onion)管线:

中间件 A.before → 中间件 B.before → 执行器 → 中间件 B.after → 中间件 A.after
  • before 正序执行,任一环节返回拦截结果就短路;
  • 执行器在最内层,负责真正的派发;
  • after 在 finally 中逆序执行,即使短路或异常也保证触发,适合挂指标和审计;
  • 异常路径上,中间件可以选择恢复,也可以继续抛出。

这个结构的实际收益在第一个真实中间件上就兑现了:预算护栏。所有带日预算的写动作,在进入审批之前先算相对增幅——把日预算从当前值一次性上调超过阈值(默认 50%)的动作,在机器侧直接拒绝,不生成审批卡。原因很实际:明显越权的上调不该浪费人的注意力去点"驳回";只有合理范围内的调整才配进入人审。冷启动(当前预算为 0 的新建计划)不拦截,避免挡住正常建计划。

新增一个横切逻辑(未来的 PII 脱敏、工具路由、限流)只需要注册一个中间件,主循环零改动。这一层还有意识地没有把审计单独做成中间件——执行链路内部已经写了操作意图记录、动作日志和情景关联,再包一层只会双写。架构上的克制和扩展同样重要。

第三层:跨平台连接器(聚合层的物理实现)

这层就是第一节说的"聚合投放"在代码里的样子:对上暴露统一的动作接口(暂停、调预算、调价、换素材、拉报表),对下适配每家媒体各自不同的 API 版本、字段口径和限流规则,上层大脑面对的永远是同一组工具,不需要知道平台差异。

连接器遵守三条契约:

  1. 环境显式:一个连接实例要么是沙箱、要么是真实账户,启动时确定、运行时不可替换,所有返回数据带环境标识;
  2. Fail-closed:真实连接缺凭证、缺 SDK、缺权限时明确抛错,绝不静默降级到演示数据;某家平台的对接没做完,就显式不开放该平台,而不是返回假响应冒充;
  3. 状态回读:每个写动作执行后,连接器再调一次只读接口,把媒体侧的权威状态读回来——暂停比对状态字段,预算允许 5% 以内的相对误差(覆盖币种最小单位取整),调价、换素材类操作只要回读到实体就算生效,真实效果交给后续观察窗口。

连接器还承担数据入仓:各平台报表和归因数据持续归一化落到事实表,每条记录保留来源平台标记,跨平台回采才能按源过滤。回采任务从事实表读数、不直接调连接器——连接器短时不可用时,只要事实表有数据,效果回采照常完成;反过来,连接器拉不到数据,事实表里也不会凭空多出假数。

第四层:动作实体、幂等状态机与派发器

这是整套系统最"金融工程"的一层。每一个真实写动作都是一个唯一实体,跨会话、步骤、账户关联,关键字段包括:

  • 幂等键:由会话、步骤、工具名、参数摘要哈希而成。同一个键提交两次,系统返回同一个动作,媒体 API 只被调用一次;
  • 状态轨迹:提议时间、批准时间、派发时间、受理时间、验证时间、失败时间;
  • 三份影响数据:预测值、观察值、归因值,各自独立存储;
  • 媒体侧请求 ID、原始响应、回读快照——事后对账的全部凭据。

动作走一条显式状态机:

提议 → 已批准 → 派发中 → 已受理 → 已验证
                            └→ 失败
                            └→ 未知(等待对账)

“未知"是这条状态机里最重要的设计。请求发出去了,但既没有成功的证据也没有失败的证据时,动作停在"未知”,不冒充成功也不冒充失败,等待后台对账任务批量收敛。做过分布式系统的人知道,这个"诚实的中间态"比非黑即白的状态机难做得多,但在资金场景里它是必需品。

审批本身也有两个容易被忽略的工程细节:

  • 审批过期:每张审批卡有有效期(默认 10 分钟)。过期后再点批准直接冲突,要求系统重新提案。因为十分钟前的账户状态和现在可能已经完全不同,执行一个陈旧决策和无人驾驶没有区别。
  • 状态漂移检测:批准的瞬间重新读取账户实体——如果提案时预算是 1000,批准时已经被人改成 3000(漂移超过 20%),拦截并提示,要求重新确认。

第五层:影响回采、学习门禁与策略存储

动作验证生效后,系统自动生成 6 个延迟任务:观察值和归因值各按 2 小时、24 小时、7 天三个窗口,到点从事实表聚合,用"动作前 7 天日均 vs 动作后窗口日均"的口径计算 delta,写回动作实体。

三份数据在界面上并列展示:预测(动作瞬间即有)、观察(媒体口径)、归因(独立归因口径),未到窗的明确显示"未观察/未归因",数据完整度不足的给黄色提示。“未采到"用空值表达,“采到了但是零"用完整度 0.0 表达,消费方必须区分对待。

学习门禁是这一层的闸门。一个动作结果要"提权"为可学习样本,必须同时满足:动作真实执行于生产账户、影响数据来自观察或归因回采(模型预测和平台自报不算)、完整度大于零。三个条件缺一不可。策略学习入口只读取通过提权的样本:

  • 有合格样本:学习结论带样本数前缀,比如"基于 6 条真实样本:加预算 6 次、7 天平均 ROI 变化为负,增幅收敛到 10%",更新策略参数;
  • 没有合格样本:策略保持上一次学到的结果,不回退到出厂默认值,返回信息明确说"无可用真实样本,策略不变”。

这意味着沙箱里的全部测试动作、模型自己的预测、残缺的回采数据,都改不动生产策略。门禁是硬代码路径,不依赖任何人的自觉。

策略参数本身(止损阈值、预算增幅上限、素材轮换线等)带置信度和样本量,落盘持久化,可随账户迁移——新账户从第一步就用历史经验,不必重新交学费。规划器取值的优先级是:已学策略 → 情景记忆里的近期教训 → 硬编码默认值。

第六层:主动自治、外部供给与运维底座

最后一层让系统从"人召唤才动"变成"主动守护”:

  • 周期巡检:定时扫描异常(CPI 飙升、ROI 跌穿、素材疲劳、花费异常、账户异常),按风险分级处置——换素材这类低风险动作自动执行,暂停、调预算生成提案推到审批队列,纯通知类异常(花费异常、账户封禁)只告警不自动缩量,危险的自动操作宁可不动;同类异常按时间桶去重,不重复打扰。
  • 持久化后台任务:延迟回采和周期巡检统一落任务表,调度器只负责高频"滴答"(比如每 30 秒),到点任务由通用任务运行器领取执行,状态机为"已调度 → 运行中 → 成功/失败",失败按次数重试,进程重启时先恢复崩溃在半路的任务、再补跑离线期间到期的任务。任务用幂等键去重(影响任务按"动作+类型+窗口",巡检按"账户+时间桶")。
  • 外部能力的两个入口,刻意分成"真工具"和"说明书"两条路:
    • MCP Provider:通过 MCP 类标准协议把外部服务的工具拉进注册表,命名空间隔离(服务名__工具名),和内置工具走同一条审批、护栏、审计链路。外部写工具默认按 L3 处理,要降级必须在配置里显式声明。外部服务连不上时返回空工具集加警告,不拖垮主系统启动。
    • Skill:一份带参数头信息的 Markdown 文件,描述"什么场景下、用什么默认参数、按什么流程调已有工具"。它不注册新工具、也不能改变工具的风险级别——只提供默认参数(调用方显式传入的参数优先)和一段给模型的流程提示。这个权限隔离是故意的:不能让一个说明书文件绕过审批。工程同学写底层工具,投放同学写 Skill 扩展打法,两类角色的工作面自然分开。
  • 安全底座:对象级授权以应用/账户为租户边界,查不到和无权访问统一返回 404,避免对象被枚举;实时推送通道用短期一次性票据(默认 60 秒),长期令牌不出现在 URL、代理日志和浏览器历史里;所有数据库结构变更走迁移工具管理,启动前先迁移,不允许靠运行时自动建表混过去。

一张分层总览

层核心组件回答的问题
决策层ReAct 主循环、规划器、模型路由下一步做什么
管线层工具注册表、风险分级、洋葱中间件、预算护栏能不能做
执行层连接器、动作实体、幂等状态机、派发器、回读对账做没做成、账户里实际变成了什么
事实层报表/归因事实表、三窗口回采、三类影响信封做完之后到底有没有用
学习层情景记忆、反思、学习门禁、策略存储下次怎么做得更好
运行层持久化任务、巡检自治、MCP/Skill 供给、授权与票据怎么 7×24 安全地跑下去

五、实现:演进顺序和那些"反直觉"的决策

架构图谁都画得出来,真正值钱的是顺序和取舍。这一部分按这套系统实际演进的时间线,讲每一步做了什么、为什么是这个顺序、以及哪些当时看起来"更先进"的做法被明确放弃了。

阶段 0:先做聚合和真实数据地基,再谈智能

第一件事不是接大模型,是把第一节的前两层台阶打实:跨平台连接器统一动作和数据口径,平台报表和归因数据持续入仓,投放动作的真实结果有地方可查、可信地查。

这个顺序的理由在实践中非常清楚:聚合和度量不存在,Agent 只能当个平台外挂,学到的全是平台喂给它的自我评价。这个阶段同时立起三条贯穿始终的契约——环境显式、fail-closed、写后状态回读。开发测试当然在沙箱账户里做,但沙箱只是验证手段,系统从第一天起就是按生产账户的失败模式设计的:超时、重复、异步审核、币种取整、权限不足。

如果只能切一个最小切片,建议是:选一个平台,接一个最简单的真实写动作(暂停计划),打通"真实执行 → 次日数据回采 → 界面里展示计划与结果"这一条窄链路。窄链路端到端跑通,后面的记忆、反思、学习才有真实燃料;窄链路没通之前写的所有"智能",都是悬空的。

阶段 1:装进 Agent Loop,但同步立起审批

第二阶段才把单轮命令解析升级为目标驱动的多步循环:给一个模糊目标,系统自己拆步骤、调多个工具、中途对高风险动作发起审批。

审批流在这个阶段同步落地,而不是"等以后补"。审批卡上能看到动作内容、作用账户、风险级别、模型的推理过程和预期影响;驳回后系统记住被驳回的动作并重新规划。安全机制必须和能力同生,不能等能力长大了再管教——后补的护栏在代码里永远是补丁,在组织里永远是事故报告。

阶段 2–3:记忆、反思、策略,逐步闭环

  • 先做情景记忆:每个写动作自动沉淀"动作前状态 + 三窗口影响 + 结果";
  • 再做反思:把情景复盘成结论和启发式,并且反哺规划——同类问题第二次处理时动作更稳(典型例子:历史加预算的 7 天平均 ROI 转负后,规划器自动把建议增幅从 20% 收窄到 10%);
  • 然后才是策略层:从情景里挖掘可学习的数值参数,带置信度和样本量,落盘持久化、跨账户迁移。

顺序不能反过来。没有情景的反思是空谈,没有反思的参数挖掘是数字迷信。

阶段 4:主动自治,但只开放"敢负责"的那部分自治

巡检和主动提案上线时,自治权限的发放极其克制:低风险自动、中风险提案、通知类只告警。账户异常时绝不自动缩量——因为账户异常期间的数据和状态本身就不可信,基于不可信状态自动做花钱决策,是把故障放大。

阶段 5:工程化,把闭环磨成生产系统

功能闭环之后,又做了一轮基础设施级的重构,这轮重构的价值经常被低估:

  • 管线抽离:横切逻辑全部中间件化,主循环薄壳化(近 800 行到 400 多行),加预算护栏这类新规则不动核心路径;
  • 外部能力分层:MCP 真工具 + Markdown Skill 说明书,工程和投放的工作面分开;
  • 动作粒度下钻:从计划层扩展到计划组和素材广告层,每接一个新平台、一个新粒度,先用沙箱账户端到端验证再切生产——环境隔离的价值就在这里:新逻辑零风险验证,生产路径始终是真实对接;
  • 任务持久化:回采和巡检从"靠定时进程活着"升级为"任务在表里,任何一个实例重启都能续跑";
  • 零手动启动:一条命令完成依赖安装、数据库迁移、种子数据、前后端起服务。新环境上手不需要读 README 猜步骤——这条看似和 Agent 无关,实际决定了系统能不能被第三方团队真正部署起来。

这轮重构完成后,自动化测试接近 200 个,且每一项重构都要求既有测试零修改通过。测试不是用来证明新代码对的,是用来证明旧契约没被碰坏的。

那些被明确放弃的"先进做法"

实现过程中做过一组刻意的"不做"决策,每一条都值得单独说:

  • 不把主循环换成任何开源 Agent 框架。自研主循环加测试是资产,跨语言重写的成本远大于收益,外部框架的设计思路可以借,代码不借。
  • 不引入重型编排框架(LangChain/LangGraph 一类)。能跑通的自研循环上再叠抽象层,只会增加调试深度。
  • 不上微服务、不上 Celery/Temporal/Redis。单进程加单机数据库在当前部署形态下完全够用,任务持久化用一张表解决;多实例并发锁、优先级队列、任务依赖这些,等真的有第二个实例再加。为想象中的规模付真实的复杂度,是工程里最常见的烂账。
  • 不做多 Agent 协作。能用无状态 Skill 解决的事,就不开一个有状态、有 token 成本的子 Agent。
  • 不让 Skill 改变风险级别。说明书永远不能成为绕过审批的路。
  • 不在主循环里做异步重构。管线保持同步语义,幂等、回读、对账的推理在同步模型下最简单可靠;等真正出现吞吐瓶颈再谈。
  • 默认不开放 shell 类通用工具。系统的动作空间由注册表显式枚举,不给模型"什么都能做"的入口。

给建设者的落地顺序清单

如果把这篇文章浓缩成一张施工单,顺序是这样的:

  1. 接一个平台、一个真实写动作、一条真实数据回采的窄链路,先证明系统在生产账户上成立;
  2. 把连接器推广到全部在投平台,完成动作和数据的聚合归一,这是广告主自有层的地基;
  3. 立起环境显式和 fail-closed,沙箱与生产物理分开,任何路径不允许降级造假;
  4. 注册工具表,给每个动作打上读/写和 L0–L3 标签,审批同步上线;
  5. 上动作实体、幂等键、状态机(含"未知"态)、回读与对账;
  6. 上三窗口、多来源的影响回采,严格区分"未采到"和"零";
  7. 上学习门禁,只让真实完整样本进入策略;
  8. 做记忆、反思、策略参数化,让跨平台经验可积累、可迁移;
  9. 做主动巡检,按风险等级谨慎发放自治权;
  10. 横切逻辑中间件化,任务持久化,零命令启动,再谈接更多平台和更多自治。

每一步都能独立验证、独立上线。反过来,第一步就追求"全平台 + 全自动 + 大模型端到端"、聚合和度量却空着的项目,大概率会在第二层和第五层之间的某个位置,还一笔信任的债。


写在最后

投放这件事正在经历一次静悄悄的权力分层:平台用 AI 做好平台内的匹配和效率,这件事会继续进化,广告主不该、也没必要去重造;但正因为每家平台都在把自己的智能做厚,跨平台那一层——聚合投放、独立归因、策略管理、以及长在这三层之上的 Agent——才是广告主不能外包的部分。方向盘一旦交出去,预算分配权、数据资产和策略经验会一起交出去。

智能投放 Agent 不是"更省人的投手",它是广告主这一层智能的最终形态:站在广告主一侧,对齐广告主的利润目标而不是任一平台的收入目标,对每一笔动作和每一笔钱诚实。

平台越智能,广告主越需要自己的智能。 这就是从聚合投放到智能投放 Agent 这条路,为什么不是选择题。