1. 先想清楚:营销广告这道题,大模型到底该解哪个环节
1.1 货拉拉广告业务的特殊性,决定了不能照搬电商玩法
先说一个我在货拉拉营销广告项目里反复被问到的问题:大模型到底能在广告里干什么?很多人第一反应是拿来写文案,一个月生成几千条标题,但真正落地之后你会发现,写文案只是最表面的那层。
货拉拉的广告不像电商那样“短平快”。货运平台的业务线很杂:搬家、拉货、跑腿、同城配送,甚至还有面向B端商户的整车运输。不同业务线的用户画像差异极大——搬家用户关心的是价格透明、师傅靠谱、物品有没有保障;拉货司机和高频发货客户关心的是车型匹配、装卸效率、时效承诺;跑腿用户更在意“快”和“准”。同一句广告词,打给这三类人,效果完全不是一码事。
再加上城市差异这件事,杭州的用户和哈尔滨的用户对“满减”“优惠券”的敏感度都不一样,一线城市和下沉市场对“低价”“一口价”的信任度也不同。所以货拉拉的素材需求是典型的多维组合爆炸:业务线 × 城市 × 活动类型 × 人群包 × 投放位,随便乘一下就是几十万条的体量。靠人工一条条写,创意团队就算每天加班也供不上。
更为关键的是投放链路特别长。用户从看到广告到最终下单,中间要经过曝光、点击、唤起App、注册、浏览选服务、下单预约、实际履约,甚至还要等下次复购。广告点击和最终成交之间隔了好几层,归因天然困难。这条长链路意味着我们不能只把大模型用在“把文案写好”这一步,还得让它帮我们理解用户意图、做素材和人群的匹配、做合规审核,甚至帮我们把投放数据回传后形成优化闭环。
1.2 大模型的价值边界:该上的环节一个别少,不该上的别硬凑
做技术的人容易犯一个毛病:手里拿着锤子,看什么都是钉子。大模型刚火起来的那段时间,团队里也有同事提出要不要把广告排序模型也换成LLM,我当场就给否了。广告排序和出价环节,讲究的是数值精度、延迟稳定性和可解释性,这些恰恰是大模型的短板——它擅长的是语义理解和开放式生成,不擅长做精细的数值决策。
我把货拉拉营销广告的链路拆开,逐个环节过了一遍,最后划了一条清晰的边界线。
大模型该上的环节有四块。第一是创意生产,包括文案、短标题、banner图、视频脚本,这本质是开放式生成,机器干的活越多,人工释放的产能越大。第二是用户意图理解,过去靠规则标签,覆盖窄、维护难,大模型可以读用户行为序列然后输出泛化标签。第三是智能审核,广告合规门槛高,极限词、虚假宣传风险、品类限制都要查,大模型能做语义级初筛。第四是策略解释与辅助决策,投放运营想知道“这批素材为什么跑得好”,用大模型做归因摘要,比人肉翻报表快得多。
不该上的环节也有三个。出价和预算分配别动,那是数值优化问题,交给传统机器学习模型更稳;面向用户的最终价格、地址、时间承诺等强约束信息,别让模型自由发挥,必须走槽位填充和规则校验;凡是需要百分百确定性的内容,比如合同条款、售后规则说明,也别让LLM碰。
一句话概括:大模型负责“泛化理解和开放式创造”,规则和高精度模型负责“兜底确定性”。这不是谁替代谁的关系,而是各管一段、协作干活的关系。这个边界想清楚了,后面所有的架构设计才不会跑偏。
1.3 指标先行,别让“生成了几万条”骗了自己
立项的时候我提了一个在团队内部有点争议的要求:先把效果指标定义清楚,再谈技术方案。广告场景特别容易陷入“产能自嗨”——系统上线后,运营跑来跟你说“今天模型生成了两万条文案”,听起来很漂亮,但细问下去,被真正投放使用的可能只有几百条。
我们当时定了一套分层指标体系,核心看五样东西:
- 素材生产效率:单人单日可用素材产出量,衡量人效提升
- CTR和CVR:投放端的核心转化指标,衡量素材质量
- 单条可用素材的综合成本:算上GPU消耗、人工审核、返工成本
- 违规素材拦截率:合规性指标,宁可多拦不能放过
- 端到端投放ROI:最终算总账,看每块钱投放成本换来多少GMV
这五条指标里,前两个是“增量指标”,衡量大模型值不值得上;后三个是“风控指标”,防止上线后出幺蛾子。后来复盘时发现,这套指标框架最大的价值不是用来汇报,而是帮我们在技术方案上做了大量取舍——凡是没法直接贡献到这些指标的功能,优先级全部调低。
2. 模型选型与整体架构:不是端起LLM就往线上怼
2.1 模型选型不是越大越好,按任务分层部署
这是我在很多技术分享里都会重点强调的一点:广告场景用大模型,参数规模不是越大越好,而是越匹配越好。
文本生成这块,我们实测下来开源的中小尺寸模型完全够用。广告文案本身句子短、句式相对固定、卖点表达套路化,它对模型的“知识深度”要求并不高,真正要求高的是“指令遵循能力”和“风格稳定性”。我一开始也想用大参数模型,觉得生成质量肯定更好,但做了两轮评测之后发现,14B级别的开源模型经过微调之后,产出文案的通顺度和多样化已经能满足业务需求,而推理成本和延迟却比大参数模型低了一个量级。这一个对比,直接帮我们省下了一大半GPU预算。
模型选型上我们最后用了分层组合:
- 文本生成:开源7B-14B模型微调,负责广告文案、标题、活动描述
- 语义向量:用通用Embedding模型(bge系列这类)做用户query和素材的语义匹配
- 多模态生成:文生图模型做banner底图,配ControlNet做文字和版面的可控性处理
- 意图理解:开源LLM做用户行为序列摘要,输出结构化标签
这套组合里没有一个是“顶配”,但每个环节都是那个位置上性价比最高的选择。广告场景的ROI导向在这时候体现得特别明显:模型再强,如果成本摊不平,终究是实验室里的玩具。
2.2 离在线分层:把LLM挪到离线,线上只做检索
架构设计上我们踩过一轮坑,值得单独说说。最早我们有同事提过“用户请求进来,直接调LLM现写一条广告”,听起来很性感——千人千面、实时生成、无素材库存压力。但稍微算一笔账就知道不现实。
在线实时生成的问题首先出在延迟上。广告场景的流量是真实的,曝光请求打到服务端,几百毫秒内必须返回素材,否则流量就浪费了。LLM流式生成一条完整广告文案,在GPU上跑一次推理,运气好一秒能出来,P99一上来就直接破三秒,这种延迟放在广告链路里基本等于自杀。
其次在成本上。同样是一条文案,用LLM在线生成一次的成本,比从素材池里查一次向量、做一次排序贵上几十倍不止。广告是毛利导向的业务,花一块钱赚一块二的事,成本结构稍微失控项目就得砍。
所以我们最终的架构方案是“离在线分层”:所有需要大模型实时推理的工作全部离线化,线上只做检索和轻量排序。具体流程是这样的——
离线侧,每天定时批量跑生成任务,把所有候选创意素材生成出来,经过规则校验、合规审核、质量打分,写入素材池,同时做向量化索引。在线侧,用户请求进来,先用Embedding模型把query转成向量,再去素材池里做ANN检索召回最相关的素材,最后用一层轻量排序模型做个性和场景适配,返回结果。
这套架构落地之后,在线链路完全绕开了大模型推理,延迟直接降到50毫秒以内,稳定性也有了保障。线上可能出问题的就不再是“模型输出质量”了,而是素材池够不够丰富、检索召回准不准、排序模型能不能把最合适的那条素材顶到最前面。
2.3 成本账怎么算:离线比在线便宜一个量级,缓存和复用还能再砍一半
很多团队上大模型项目,成本预算是拍脑袋给的,我建议你把账算到“每条可用素材”这个粒度上。
以一个实际数字来演示:假设GPU按小时计费,某个时段的算力成本折算下来是每小时50元,单次推理平均生成一条文案需要消耗80个token,一个GPU实例每秒能跑20个生成请求,那生成10000条文案的算力成本大约是:10000 / (20 × 3600) × 50 ≈ 7块钱。看上去很便宜对吧?但这是纯算力,还没算数据准备、微调训练、人工审核、无效素材返工这些隐性成本。实际上线后,有效素材率大概只有六成到七成,所以“每条可用素材”的真实成本要再除以这个比率。
真正可怕的是在线实时生成。假设线上1000 QPS流量,每次请求生成300个token,一个GPU实例每秒只能处理3个请求,要扛住这1000 QPS,就得300多张卡同时在线,这个成本直接就把广告毛利吃光了。所以“先把模型用起来”远不如“先想清楚模型在哪一层用”,同样的模型,放在离线批量任务和放在在线实时推理里,成本能差两个数量级。
另外我们后来还做了两件事把成本再砍了一截:一是对生成结果做相似度去重和缓存,相同意图的query只生成一次,直接复用;二是把高频使用的素材做成了“半成品模板”,只在槽位参数上做轻量替换,连大模型都不用重新走一遍。
3. 四大核心模块的落地细节,逐块拆给你看
3.1 广告文案批量生成:结构化Prompt、槽位填充、多路抽样,一个都不能少
这一块是团队最早跑通的场景,也是踩坑最深的场景,值得重点讲。我们的文案生成不是简单的“丢一个标题给LLM让它写”,而是拆成了五步流水线:结构化Prompt → LLM批量生成 → 规则校验 → 相似度去重 → 人工抽检入库。
首先说Prompt。广告文案生成最怕模型自由发挥过头——它能把一个“搬家满减活动”写得天花乱坠,但价格写错了、城市写错了、承诺写过头了。所以Prompt里必须区分两类信息:一类是“业务参数”,比如活动名称、折扣力度、城市、服务品类、起送门槛,这类信息用槽位填充的方式固定住,不允许模型改动;另一类是“风格卖点”,比如“让搬家更省心”“师傅准时上门”“价格透明不踩坑”,这类交给模型去编排和润色。
我们的Prompt模板结构大概长这样:
你是货拉拉资深广告文案专家,请根据以下结构化信息生成一条广告标题和正文。 [业务参数] 服务品类:搬家 城市:杭州 活动:新用户首单立减30元 门槛:满100元可用 [创作要求] - 标题不超过20字,突出优惠力度 - 正文不少于50字,包含价格透明、师傅靠谱两个卖点 - 禁止使用夸张承诺,禁止出现“绝对”“第一”“最”等极限词 - 语气亲切但不低俗,符合货运平台调性 [输出格式] 标题:xxx 正文:xxx这里有两个细节容易被忽视。第一,Prompt里“禁止出现极限词”这句话不是可有可无的,它能在生成源头就大幅压低违规概率,后面审核环节的压力会小很多。第二,输出格式一定要给死,最好要求LLM输出JSON结构,方便程序直接解析入库,不然解析的一堆乱格式能让你怀疑人生。
再说多路抽样。同一套槽位参数,我们要生成多个不同风格的候选文案,不能每次点击都退回同一批内容。具体做法是把temperature设置在0.7到0.9之间,同时用top_p控制采样的集合范围。温度太低,文案千篇一律;温度太高,文案跑偏,连“货拉拉”都能写成“快递公司”。如果团队用的是开源自部署模型,建议同时开多个实例并发跑不同随机种子,这样多样性更可控。
最后是规则校验和去重。校验环节我们写了几十条正则规则,检查价格、城市、业务品类是否和槽位一致,检查有没有出现违禁词,检查有没有超字数。去重则用文本相似度计算,相似度超过85%的候选只保留一条。这层“笨功夫”极大降了后面审核和投放环节的无效工作量。
3.2 人群定向与意图理解:从规则标签升级到语义泛化,召回扩了一大圈
货拉拉广告投放的人群定向,过去是典型的规则标签体系:看过搬家页面的用户打上“搬家意向”标签,搜索过“面包车拉货”的用户打上“货运需求”标签,再靠规则去组合人群包。这套体系有两个硬伤——标签覆盖面窄,很多长尾行为根本定义不到;组合规则爆炸,运营同学手动维护几百条规则的痛苦谁做谁知道。
大模型切入后,我们把用户行为数据做成了“序列摘要+意图推理”的方案。离线用LLM去读一个用户的近期行为流水:看过几个搬家相关页面、搜索过什么关键词、点击过哪类素材、在哪个页面停留时间长,然后让LLM输出结构化的用户意图标签和置信度。比如它可以根据“浏览钢琴搬运页面+搜索‘易碎品搬运’+点击过宅急送素材”推理出“可能近期搬家且家中物品有高价值或易碎品,对搬运保护措施敏感”。
这套方案上线后最明显的变化是标签维度丰富了很多。规则时代的人群标签最多几十个,LLM时代可以自动产出几百个语义标签,还能按照置信度排序。这对广告投放的直接影响就是扩张了“可定向人群”的规模——过去买不到曝光的那群长尾用户,现在能被语义标签召回并精准命中。
但我这里要强调一个很实际的限制:不是所有用户都值得上LLM做行为理解。无行为记录的新客、行为稀疏的冷启动用户,喂给LLM也提炼不出多少信息,这些用户我们直接沿用规则标签和通用人群包,不走模型推理。大模型只覆盖活跃用户和中高价值人群,既能控制成本,又能保证意图识别的准确率。
3.3 合规审核:大模型做语义初筛,规则引擎做硬兜底,别指望单一防线
广告行业的合规审核是个高水位线,货拉拉这种体量的平台,素材一旦翻车,影响面比中小公司大得多。我们跑了近一年的素材,最怕的就是“看起来没毛病但细想有问题”的文案。
合规审核这块我们的思路是三层防线叠加。第一层是生成侧的Prompt约束,好的Prompt天然降低违规概率,这层前面已经说过。第二层是大模型语义初筛,让LLM判定文案是否包含虚假宣传、夸大承诺、价格误导等风险,输出“疑似违规”标记。第三层是规则引擎强制兜底,拉一个高频违禁词和敏感模式列表,凡是命中的素材直接打回,不管大模型说它多安全。
这里有个细节值得分享:大模型审核和规则引擎审核的侧重点完全不同。规则引擎擅长抓“看得见的词”,比如“全网最低价”“第一名”“100%有效”这种硬关键词;大模型擅长抓“看不见的风险”,比如“4小时保证搬完”这句话虽然没有违禁词,但本质上构成了对服务时效的绝对承诺,超出了平台能承诺的范围,这种语义层面的风险只有大模型能识别出来。
上线全量审核之前,我们专门整理了一批历史违规素材做回归测试,跑完一轮之后给大模型审核设置了一个“宁严勿松”的阈值:宁可把正常素材误杀一批再走人工复审,也不能让疑似违规素材漏进投放池。因为误杀的单条成本是几毛钱,漏杀一条可能引发的投诉和合规风险成本是十万级。
3.4 效果数据回流与创意打分:把投放端反馈变成生成端的燃料,闭环才算盘活
很多团队做大模型广告应用,做到“素材生成→投放”这步就停了,这是一个半成品方案。我见过最典型的场景是:模型生成了一万条素材,投放效果好的那几十条,和平庸的那几千条,混在一个池子里,运营根本分不清该如何扩大优势。
我们的做法是在闭环里再加两步。第一步是做创意质量打分模型。投放平台会回传每一条素材的曝光、点击、转化数据,我们用这些数据训练一个轻量级的创意打分模型,预测每一条素材在特定人群包上的CTR和CVR。每天凌晨凌晨,打分模型跑一遍全量素材池,把低于阈值的素材自动下架,把高分素材标记为“可扩容”,投放系统第二天就会给这些高分素材增加预算倾斜。
第二步是让投放端的数据反哺给生成端。我们把高CTR素材拆解成短语级别的“卖点因子”,比如“透明报价”“免排队”“车型多”“全程保险”这些表达,统计哪些卖点因子高频出现在高转化素材里,然后动态更新Prompt模板里的“卖点库”。生成端还不懂哪个卖点更有效,只能靠数据教它。
这个飞轮跑起来后,效果是实实在在的:第二轮素材生成的时候,高潜卖点的占比明显上去了,整体素材池的平均CTR比第一轮提升了。能做到这一步的关键是链路要长——从创意生成到投放反馈再到生成端迭代,整个周期不能超过一周,否则数据新鲜度一过,飞轮就转不动了。
4. 实战中的常见坑与排查实录
4.1 幻觉问题:文案写得行云流水,但价格和门店全是编的
这是所有做内容生成都会撞上的第一堵墙。大模型写得越流畅,越容易一本正经地胡说八道。我们初期跑生产的时候,系统生成过“跨城搬家只要59元”这样看起来特别吸引人、但实际根本不可能的价格,也生成过把“杭州”写成“杭州省”的低级错误。这种素材直接投放出去,带来的不是转化而是一堆客诉。
排查之后我们把根因分成了两类。一类是模型本身的训练数据里对货拉拉的收费结构、城市命名没有结构化认知,它只是在“猜”一个合理的值;另一类是Prompt里槽位信息给了,但模型没严格遵守,自己脑补了槽位之外的内容。
解法我前面提过,这里展开说三层:槽位参数用强约束语法包住,生成完成后必须做结构校验,校验不过的整条重试;任何价格、地址、时间承诺类信息一律不允许模型自由生成,全部来自业务系统注入的槽位;最后人工抽检比例不要低于10%,尤其在模型刚升级完的那几天更要加量。
这个坑我们前后踩了两轮才彻底堵住,最关键的认知是:大模型在广告场景里的定位是“包装者”,不是“定义者”。定义信息的权利必须握在业务系统手里,模型只负责把信息包装得有吸引力。
4.2 输出格式不稳定:JSON解析失败率飙升,问题出在微调的细节上
第二个高频坑是LLM输出格式不稳定。我们要求模型输出JSON结构,用来直接入库存,但实测下来,模型偶尔会在JSON里多一个逗号、少一个花括号,或者把中文标点和英文标点混在一起,导致解析程序直接报错。
第一反应是调整解析逻辑做容错,但治标不治本。后来排查发现,真正的问题是微调阶段我们在训练数据里混入了太多“非JSON格式”的对话样本,模型学坏了。后来我们把输出格式约束作为微调任务里的硬性指标,构造了大量纯JSON输出的微调数据,训练完成后再测,解析失败率直接降到1%以下。
如果你没有微调的预算,也可以用提示词硬约束加解析重试来兜底:让模型先强输出JSON,解析失败就自动重试一次,重试还失败就把这条素材标记为异常进入人工处理。这个方案简单但有效,唯一要注意的是重试逻辑一定要控制次数,无限重试等于给成本开了一个黑洞。
4.3 线上效果不涨:问题常常不在模型,而在归因链路
这是整个项目里最有争议的一个环节。有一段时间我们做了人群定向升级,LLM打出来的标签上线了一周,回收数据发现整体CTR比原来提升了几个点,团队兴高采烈地准备汇报。结果我把数据拆开一看,发现提升主要来自大盘流量波动,因为那一周正好赶上平台大促,流量质量本身就好,跟标签模型半毛钱关系都没有。
广告投放的效果受四个变量影响:素材质量、人群包质量、出价策略、大盘环境。它们同时变化的时候,你根本说不清提升是谁带来的。所以每次大模型相关的改动上线,我都会坚持做小流量A/B测试,严格控制变量:相同素材池、相同出价策略、只有人群包策略不同,或者只有素材不同。只改一个变量,数据才有说服力。
这个教训我们自己也要反思——技术团队太容易犯“功劳归因于自己”的毛病。后来我们定了一个铁律:任何模型升级,先跑两周的AA实验验证实验体系的稳定性,再跑AB实验看增量,最后才敢全量。这一步“麻烦”值得花,因为一旦归因错了,后面所有的优化方向都会被带偏。
4.4 成本失控:真正贵的不是模型,而是无效生成
成本问题我最后单独说,因为这是决定项目存亡的因素。我们上线第一个月月底看账单,GPU费用比预期高了三倍,排查下来发现三个黑洞:第一,重复生成——同一个活动、同一个城市、同一个业务线的文案,被不同运营提交了多次生成任务,产生了大量重复计算;第二,无效生成——生成了100条候选,最后只用了5条,剩下95条的全链路成本(算力、审核、存储)都摊到了这5条头上;第三,长文本浪费——有些任务我们默认设置了最大输出长度,但多数素材根本用不了那么多token。
解法也很直接:任务层加缓存和服务端去重,同一批参数24小时内重复请求直接返回历史结果;生成环节加“先小批量再扩容”策略,第一次只生成10条让运营挑,方向对了再批量生成;输出长度按任务类型限死,文案任务最多150个token,超出直接截断并告警。
成本控制这件事没有一招制敌的魔法,就是把这个账拆细,逐个环节堵漏洞,一个月下来能省30%以上。
5. 几点经验沉淀,说给想在这个方向落地的团队
5.1 大模型负责“无限创意”,规则负责“兜底确定性”
整个实践下来我最深的体会是:不要把大模型当成一个“超级可靠的业务引擎”,把它当成一个“创意放大器”就好。生产侧放开手脚让它生成多样化的素材,但凡是面向用户的最终输出,必须经过槽位校验、规则过滤、人工抽检三道关卡。模型的“可信”不是靠模型自己保证的,而是靠外围的工程约束和流程管理保证的。
我们后来每次讨论新功能,团队都会先问一个问题:这个环节的“确定性兜底”在哪?如果答不上来,这个功能就不会推进。这个提问习惯帮我们避开了很多想当然的方案——大模型能写文案,但能保证它写出来的价格一定正确吗?能理解用户意图,但能保证它输出的标签一定靠谱吗?在这些问题没有明确答案之前,大模型的能力再强也只能当配角。
5.2 推动落地的小技巧:先找ROI最清晰的场景,把管线跑通再复制
我经常被问“大模型在广告里还有哪些场景可以做”,我的回答永远是:先把一个场景做成标杆,再横向复制。货拉拉这个项目里,文案批量生成就是那个最先跑通的标杆场景。它的ROI最清晰——人力替代效果可量化、质量评估有客观标准、上线流程相对简单。这个管线一旦打通,Prompt怎么写、审核怎么过、数据怎么回流、成本怎么控,全都沉淀成了可复用的方法论,后面再做人群标签、做智能审核就轻车熟路了。
另外一个小建议:团队汇报的时候,千万别用“生成了多少条素材”当核心指标,要用“被采纳了多少条”“带来了多少增量消耗和转化”。让业务同事看到的是一个能算账的投产比,而不是一堆看起来高大上的技术名词,这样项目才拿得到持续的资源。
5.3 接下来的方向:从“预制素材+检索”走向“生成式个性化”
我们目前的架构还是离线的“预制素材池+在线检索”,这个方案胜在稳定和便宜,但天花板也很明显:素材池再大,也不可能覆盖所有用户的所有实时意图,检索召回总会有“找不到完全匹配”的空隙。
所以我们规划的下一个方向是“生成式个性化”——当在线检索发现素材池里没有合适的素材时,用一个小而快的生成模型实时拼装一条符合当下用户意图和场景的广告。这需要在线推理延迟压缩到百毫秒级、生成成本压到足够低、并且生成结果的合规校验全部前置。短期内还做不到,但方向是明确的。再往后走,就是多模态素材和投放人群的联合建模,让素材画面风格、文案语气、人群偏好三者真正对齐。这些方向能不能落地,不取决于大模型本身有多强,而取决于我们这些做工程的人能不能把成本、延迟、稳定性和效果校验这四道关都守住。