
1. 项目背景与核心问题拆解货拉拉的营销广告业务和很多人想象中不太一样。它不是单纯地往流量平台投几张横幅图、写几行拉货搬家的文案那么简单。货运和搬家是典型的低频、高客单、强即时性的需求用户的决策链条很短但覆盖的人群极杂——有C端搬家用户、B端小微商户、还有平台上每天跑在路上的司机师傅。每一类人群在不同的时间窗口比如节假日搬家高峰、电商大促备货期、不同城市等级、不同车型偏好下对广告内容的敏感点完全不同。这意味着营销物料不能是一套通吃而是要像千层饼一样一个活动主题下衍生出几十甚至上百个变体。大模型在这个场景里的切入点就是把这套千层饼的生产效率从人工手写变成半自动甚至自动流水线。先说一个真实现状过去做一套投放素材从活动运营提需求、文案写标题、设计出主图、合规审核到适配各个流量平台的尺寸规范要跑四到五个角色链路一长一版物料从排期到上线需要三到五天。而投放侧的测试逻辑又是多素材同场竞争、快速淘汰没有足够的素材量整个投放模型就学不出来。这就形成一个死循环越缺素材投放越面投放越面运营越不敢催更多素材。我们当时盘点了一下一个月内同时在投的活动大约有几十个每个活动需要覆盖拉新、促活、召回三类目标每类目标下还有性别、城市等级、会员状态的分层物料需求缺口是以千为单位的。所以项目启动时我们内部定的目标不是让文案写得更漂亮而是把素材生产的瓶颈从人力换到算力上。当然大模型也不是万能的。它在这个项目里的定位我一开始就和团队说得很清楚辅助链路不是替代链路。文案它来写但决策人还是运营图片它来生成但品牌VI规范必须有一道机器兜底校验素材它来变体但最后能不能上投放必须经合规审核。我们把它定位成一个超级实习生可以快速产出70分的成品然后由人工把剩下的30分补齐。事实证明这个定位救了项目——因为它降低了对生成质量的绝对信任需求让整个系统可以以人机协同而不是全自动无人驾驶的方式先跑起来。再往深一层看大模型在营销广告里能解决的问题表面上是内容生产本质上是信息匹配。用户看到一个广告决定点不点击往往在一两秒内就完成了。这时候广告文案有没有命中他的处境下周搬家、有没有给出明确的利益点首单立减30、有没有降低决策门槛一口价不算重就变得极其重要。大模型真正擅长的事情恰好是从大量历史素材里学习什么样的组合能被什么人群接受然后按目标人群做语义层面的重构。这个能力传统基于规则的文案模板完全做不到因为它们只能填空不能理解再表达。所以整个项目可以拆成三条线一条是文案智能生产一条是多模态素材生成与审核还有一条是投放数据回流后的效果归因。三条线不是并列关系而是递进关系——文案是入口素材是载体数据是燃料。这个认知决定了我们后面所有技术选型和资源投入的优先级。2. 方案选型从能用到好用的三个决策2.1 为什么第一版选了开源基座而不是闭源API这个决策我们内部吵了很久。营销文案这种任务闭源大模型API的生成质量确实在线接入也快按token计费看起来成本可控。但货拉拉广告场景有一个绕不开的约束物料里有大量的活动利益点、补贴金额、城市策略、用户分层规则这些都是商业敏感信息。如果全部走外部API每一次调用都相当于把核心投放策略发给第三方合规和泄密风险都不可控。另外营销物料的生产往往是突发峰值比如某天运营临时决定追一个热点要在两小时内产出五百套素材外部API的限流和并发策略完全不在我们手里关键时刻被卡脖子会非常被动。所以我们定了原则核心生产链路必须私有化部署开源基座模型闭源API只用于一些低敏感度、非实时的辅助任务。第一款真正上线跑量的模型是在7B级别的中英文基座上做的参数量不大但在广告文案这种句子短、意图明、风格活的任务上7B和70B的差距没有想象中那么大。这里有一个通用的经验可以分享不要一上来就追大参数量而是先评估任务的复杂度上界。文案生成本质上是受控文本生成输入约束很强活动名、利益点、人群标签、禁忌词输出长度很短标题一般20字以内副标题40字以内不需要长程推理和大量知识记忆7B级别的模型经过针对性微调性价比是最高的。真正需要大模型思考的部分比如效果归因报告生成、活动复盘总结我们放在了后面的二期版本用的是更大参数量模型QPS要求低对成本不敏感。推理框架上我们选了vLLM。这个没有太多悬念因为它在吞吐量上的优势太明显了。vLLM的PagedAttention把KV Cache的显存浪费降下来了Continuous Batching让不同长度的请求可以高效拼批尤其适合我们这种同一个活动批量生成几百条文案的场景——请求长度分布极不均匀有的标题只有十几个token有的社媒文案要几百个token混在一起跑吞吐量能差出一倍以上。我们最开始用原生transformers直接推理单张A10卡大概只能支撑每秒两三个请求一批500条文案要跑几分钟这在编辑后台是能忍受的但一放到运营自助生成场景里体验就太差了。切到vLLM之后加了量化单卡吞吐量直接翻了好几倍这个我在后面部署章节会细说。2.2 多模态模型和纯文本模型的搭配分工货拉拉的营销素材不只是文案还有大量图片。投放素材的常见形态是一张主图一句标题两行描述主图决定用户第一眼的观感标题决定要不要停留。所以只有文本模型是不完整的必须有图像生成和图像理解能力的搭配。我们在这个项目里实际上跑了两类视觉任务。第一类是图像生成。最开始我们也试过从零开始微调文生图模型比如用历史海报数据做LoRA让模型学会货拉拉风的视觉表达。但效果不太稳定尤其是带品牌logo、带价格角标、带固定标语的海报模型生成的字经常是乱的logo容易变形。后来我们调整了策略不用文生图模型直接出终稿而是用它出底图素材比如背景、插画元素、场景渲染然后通过一个自动化的排版合成服务把文案、logo、角标这些确定性元素以程序化方式叠加进去。这样做的核心原因很简单——营销物料里最不能出错的部分品牌元素、价格信息必须100%准确而大模型擅长的是创造性地生成而不是精确地还原。把两者分开各干各擅长的事出错的概率才会降下来。第二类是图像理解与质检。这个我们最初没预料到会成为刚需。跑起来之后发现生成素材的合规审核量非常大如果全靠人工看等于把生产压力从文案转移到了审核闭环还是没有打通。所以我们微调了一个多模态模型专门做物料合规初筛包括几类检查有没有违反广告法的绝对化用语最便宜第一品牌这类词、logo有没有被拉伸变形、画面里有没有出现不该出现的人物肖像涉及肖像权风险、文字区域有没有被裁切。这套生成-合成-质检的流水线本质上就是把过去设计团队里被AI替代焦虑最大的部分重构成了人只处理机器判不准的边缘case。后面我还会说这个模型是怎么用历史违规素材做训练的。2.3 微调还是提示词我的选择标准这是很多团队做大模型应用时都会纠结的问题。当时我们在项目里同时试了三条路纯Prompt Engineering、RAG检索增强、全参/LoRA微调。最后跑下来结论其实不算激进能靠提示词少量few-shot解决的坚决不动微调一旦发现提示词工程质量提升进入平台期就果断上微调。怎么判断进入平台期我有个比较朴素的观察方法让运营同学盲评一批生成结果如果反复调整提示词的措辞、增加few-shot示例连续几次盲评的采纳率都卡在同一个水平线上不去说明基座模型本身对这类任务的生成偏好已经到顶了。广告文案这种任务特别典型它有很强的行业黑话和表达惯性比如货运场景里大车小用是个利益点但文案不能直接说我有大车通常会说按需派车不花冤枉钱——这种隐性的改写习惯靠提示词是教不出来的得让模型在大量带评注的历史数据里自己学。我们微调用的是LoRA不是全参。原因很现实团队没有那么多卡全参微调一个7B模型动辄要几天到一个星期而且容易灾难性遗忘把模型本来的通用能力洗掉。LoRA只训练低秩适配矩阵显存需求小训练速度快换任务就像换插件一样方便。我们的基线实验是用一套和业务无关的通用指令数据做对齐测试确保LoRA注入之后模型不会变傻然后再灌业务数据。LoRA的rank我们试过8、16、32三档在广告文案这个任务上rank16和rank32的差距已经非常小但显存占用和训练时间差了一截最后线上跑的是rank16步数控制在2000以内。这块的踩坑细节我在下一章具体讲。3. 核心链路落地素材生产、审核、投放的自动化闭环3.1 数据准备历史素材清洗与指令数据构造微调LoRA之前最大的工作量不在训练而在数据。货拉拉过去两三年积累的投放素材散落在不同的系统里有设计稿的源文件、有投放平台上的历史截图、有运营同学本地Excel里维护的文案表。我们做的第一件事是把这些素材按活动主题-目标人群-投放渠道-素材类型四个维度打上标签形成一张宽表。这一步听起来简单实际上很脏——同一个活动在不同平台上的文案记录格式不一样有的写在备注里有的写在邮件里还有相当一部分是聊天记录里的碎片信息。我们花了大概三周时间靠半人工半规则的方式把这套历史语料库整理出来最终拿到上万条有效文案和对齐过的素材图。下一步是构造指令数据。这是整个微调环节里最重要的部分直接决定模型生成质量的上限。我见过很多团队在微调时偷懒直接把业务文案攒成一堆丢进去训练结果模型学了个寂寞——它确实能生成看起来像营销文案的句子但完全不听指令让写标题它给你一段废话。我们当时设计了统一的指令模板每条数据由四部分组成场景描述活动背景、投放渠道、目标人群、约束条件字数上限、必须包含的利益点、要规避的违禁词、参考示例一到两条该场景下的历史优质文案、期望输出人工润色过的最终文案。一条完整的训练数据大约长这样场景描述货拉拉搬家季活动面向一二线城市25-35岁租房人群投放渠道为朋友圈信息流目标是促进拉新。 约束条件标题不超过20字必须体现新用户立减30元利益点不能出现最第一等绝对化用词风格轻快口语化。 参考示例搬家不搬家新用户首单立减30元。 期望输出租房搬家不将就新用户下单立减30轻装上阵。要注意一个细节我们特意把违禁词规避作为显式约束放进指令里并且在没有违禁词的语料中人为构造了一批负样本——也就是让模型看到一些违规文案然后输出修正后的合规版本。这一步对后续降低合规审核压力非常关键模型在生成阶段就把绝大多数的绝对化用语过滤掉了而不是等到质检阶段才拦下来。指令数据构造完之后还做了一轮很重要的去重和难度分级。去重是为了防止高频模板被过度学习比如xxx不xxx新用户立减xx这个句式在历史素材里出现频率很高如果不加干预微调出来的模型会疯狂复用这个模板导致生成结果千篇一律这对投放测试是致命的——多素材竞争的前提是素材之间有足够的差异性。难度分级则是把一些语义复杂的改写任务比如把司机端多接单赚得多的激励语改写成车轮一转油钱回本的口播文案单独挑出来过采样训练增强模型在非标场景下的表现力。3.2 提示词工程迭代与LoRA微调实战先讲提示词工程。虽然前面说提示词到平台期就微调但提示词工程并不是微调前临时应付一下它是贯穿始终的。我们内部有一套迭代方法论每个场景的提示词都遵循角色任务输入约束示例五要素结构并且每个提示词都提前准备三到五个种子case作为回归集。每次改动提示词都拿这组case跑一遍人工打分对比分数不回退才允许上线。这个习惯让我们在微调之后依然能通过提示词快速适配新增的投放渠道比如新接了一个短视频信息流渠道文案风格需要更网感而不需要每次都重启训练。微调实战的部分我分享几个对结果有实质性影响的细节。第一是数据配比。LoRA微调不是把所有数据一股脑灌进去我们用的是通用数据:业务数据1:9的配比跑了baseline效果不理想模型生成的内容业务味太重句子结构反而变僵硬了。后来调整到3:7通用数据用的是从通用开源指令集里抽出的对话和改写任务这个配比下模型既保留了对自然语言的驾驭能力又能精准理解业务指令。第二是训练参数。我们在小批量比如几百条上先做了学习率搜索区间是1e-4到5e-4最终确定在3e-4。优化器用AdamW权重衰减设了0.01warmup比例0.1。LoRA的target modules选了q_proj和v_proj没有动其他模块——考虑到成本与收益这两个投影矩阵已经足够承载广告风格的偏移了。第三是训练监测。LoRA训练最怕的不是欠拟合而是过拟合——模型开始背训练数据里的模板生成出的内容经常在原文案基础上倒单词甚至直接复读。我们的监测方法是每训练200步就停下来用固定提示词生成一批样本随机抽20条让人工盲评多样性和新颖性一旦发现重复率显著上升就立刻停。最后线上模型锁定在1800步左右这个步数下生成结果的多样性最好。坦白说微调这件事最反直觉的是它不是一次性的而是一条产线。我们后来每月甚至每季度都会结合最新投放数据做一轮增量微调每次增量训练之前都会重新清洗上个月的优质文案作为新标注数据让模型持续跟着投放侧的审美走。这也是为什么这套系统跑了这么久生成质量还一直在涨而不是像很多人担心的模型越用越旧。3.3 部署与性能优化vLLM与推理成本控制训练只是把手艺教给模型真正赚钱的是服务化。我们线上跑了两类推理服务一类是给运营后台用的批量生成API请求量大、对时延不敏感用户点一次生成变体按钮返回几十条文案等个两三秒完全没问题另一类是给自动化审核链路的合规初筛API它要在素材上传的瞬间完成校验时延控制在1秒到1.5秒之间。这两类服务都跑在vLLM上但做了不同的优化。批量生成服务用的单卡A10通过量化把模型压到INT8推理精度损失很小但吞吐提升了接近一倍。我们在vLLM里开启了continuous batching实测下来同一批请求里长文本和短文本混排时显存利用率和吞吐都比静态batching高不少。合规初筛服务因为用的是多模态模型输入图像要经过视觉编码器这部分是CPUGPU混跑的瓶颈我们的做法是先把图像预处理缩放、裁剪、格式转换全部移到独立的CPU worker池里GPU只做tensor计算这样预处理和数据传输可以和推理流水线并行单图审核时间直接降了一半。还有一个容易被忽略的坑是显存碎片与多模型共存。我们的GPU节点上同时部署了文案生成模型、多模态质检模型、以及一个用于离线打分的embedding模型三个模型的显存需求不一样如果各自独立申请显存很容易出现碎片浪费。最后我们统一用vLLM的多LoRA功能管理一个基础模型底座同时加载多个LoRA适配器按请求头里的模型标识动态切换。因为LoRA本身是增量参数显存占用很小这个方案比部署多个独立模型副本省了将近40%的显存也简化了运维的模型版本管理。另外我想强调一个很多团队会忽略的冷启动与缓存问题。营销文案里大量请求是同一个活动下的变体生成利益点、品牌词完全一样只是渠道或人群标签不同。我们增加了一层结果缓存基于提示词哈希做精确匹配同模版的请求直接返回缓存结果不做重复推理。实测下来运营批量操作场景下缓存命中率能到百分之三四十这等于白赚了接近一半的算力。4. 效果复盘与踩坑实录4.1 业务指标与团队效率的变化上线这套系统大概跑了三个月之后我们做了第一次全面复盘。最直接的变化是素材生产周期过去一个活动从物料需求提出到完成多平台素材铺排平均三到五天现在控制在半天以内大量模板类素材启动图、横幅图、信息流卡的变体基本能做到分钟级响应。这个速度带来的连锁反应是投放策略灵活度大幅提升——运营可以更频繁地上新活动、测新文案不用再挤在每周固定的物料排期里排队。第二个变化是优质文案采纳率。这里说的采纳率不是生成后被点击使用的比例而是被运营或设计选中去投放的比例。我们随机抽了最近几个活动做统计大模型生成的初稿被直接采纳或者仅微调后采纳的比例从早期的30%左右一路上升到70%上下——当然这里有个前提运营同学也在逐步适应给AI提需求的方式早期他们提交的场景描述太模糊生成出来的东西自然不够准。到后期运营们越来越擅长提供利益点、投放人群、参考案例人机配合的熟练度上来了采纳率自然水涨船高。还有一个我们没想到的收益在异业场景迁移。货拉拉的营销不止拉货搬家还有跨城货运、企业版、租买车、甚至后市场的维保服务。以前运营新接手一个业务线文案手感要重新养现在只需调用内部大模型生成平台选定业务线的专属LoRA、传入活动参数就能得到一批有该业务线风格的初始素材再在初稿基础上做人工精修和创新。这相当于把资深文案的直觉沉淀成了公司资产而不再依赖具体某个人。不过这里也提醒一句所有业务数据的提升都跟投放平台的算法机制强相关。素材越多、投放响应越快平台的机器学习排序模型越容易找到高潜力素材等于你喂给投放系统的探索材料变多了。我们这边CTR和CVR的绝对值提升并不算夸张但冷启动失败率素材上线后长时间零展示或低展示明显下降这个才是素材量上升直接带来的红利。4.2 典型问题与排查思路实录任何时候做大模型应用纸上谈兵是一回事上线跑起来是另一回事。我把这几个月踩过且真实影响业务的坑挑几个讲讲。坑一训练数据污染导致的幻觉利益点。有一段时间运营反馈模型生成的文案里频繁出现首单全免不限里程这些根本不存在或特定城市才有的优惠词。排查后发现是历史语料里包含了曾经做过但已下线活动的素材模型学了个历史残留把过期的利益点当成了通用规则。这个问题的根因不是模型而是训练数据没有做严格的时间有效性过滤。我们后来在数据流水线里加了一层活动状态校验只有已上线且未过期的素材才允许进入训练集同时把生成侧的提示词里加上仅使用下方提供的利益点列表双重保险解决。坑二微调后的模型太乖了导致风格趋同。这是前面提到的多样性问题在真实场景的爆发。我们的LOGO和品类词大量重复再加上LoRA对这种高度领域化词表的偏好模型学到的通用表达空间被压缩生成结果让人工评审觉得字都对怎么看都是一个人写的。解决的方法是双管齐下一方面在做数据清洗时引入了句式多样性惩罚对历史语料里过于雷同的句式做来源去重另一方面在推理侧的解码参数上下工夫把temperature从0.7提到0.9配合top_p0.9和repetition_penalty1.05让输出在保持合规的前提下有更多探索空间。坑三多模态审核模型的漏网之鱼。合规初筛模型上线早期出现过几例生成海报里的小字文案印错了但人工复核没发现的case。复盘下来当时模型对图像里密集小文字的OCR识别能力太弱很多小字号的中文被当成背景纹理忽略了。这个靠现有开源VLM一时半会儿解决不了我们的临时方案是生成链路强制大小字分离所有海报的小字内容比如条款、跳转链接都是程序化生成的文本不经过文生图模型也就不会出现模型手写真随机的问题。审核模型只负责检查大字标题、主视觉内容和logo规范小字部分走规则校验。这也再次印证了一个原则不要让生成模型做它有物理缺陷的事能程序化解决的就程序化解决。坑四vLLM长文本请求的显存陡增导致偶发OOM。我们的广告文案长度一般都很短但偶尔运营会传一段很长的产品说明作为参考材料模型在做摘要改写时会吃下很长的上下文导致单请求KV Cache占用飙升把整个批次的其他请求拖垮。排查后发现是vLLM的max_model_len设置了过大的上限导致显存预留量太大留给KV Cache的缓冲空间反而变局促。后来我们把这个值按实际业务需求卡在2048同时加了请求级长度限制超出直接报错提示请输入不超过2000字符的参考材料OOM问题基本绝迹。5. 对AI生成营销素材这件事的几点思考项目做了一年多如果让我总结最核心的心得第一句是在大模型落地营销广告这件事上模型能力远没有数据闭环重要。你可以用市面上任何一款主流开源模型做底座但决定生成结果上限的是你喂给它什么数据、用什么标准评估、以及如何把线上反馈快速变成下一轮训练的数据。这套数据-训练-评估-回流的闭环跑顺了效果只是时间问题反过来如果你有一个最强的模型但没有对历史素材的理解、没有对合规底线的沉淀生成出来的东西就像没有方向盘的车跑得越快越危险。第二句体会是审核兜底不是成本而是允许你大胆尝鲜的资本。正是因为有了自动化的合规初筛和人工复核流程兜底我们才敢放开让运营自助调用大模型生成素材。如果审核链路没有跟上这种自助模式根本不可能放开。很多团队在做AI内容平台时把审核当成最后的麻烦事但在我这个场景里审核能力有多强内容生产的自由度和速度就有多高两者是正相关的。第三句是给后续想做的团队的提醒别在初期就追求全自动无人审核或端到端AIGC。最务实的打法是把链路拆碎人机协同地跑。比如我们可以让AI生成、人工微调、机器审核、人工终审每个环节都有人的参与但每个环节人的工作强度都已经比过去低了很多。等跑通之后再逐步减少人工介入的点。这个循序渐进的过程既能让团队建立信任也能积累足够多的标注数据为下一轮自动化做好燃料储备。我们目前在做的下一步是把整个流程Agent化——让一个投放素材工单助手自动读活动需求、查历史素材库、生成素材包、送审、输出适配多平台的规格整个环节尽可能减少人工触点。从我手上已有的经验看技术挑战已经不大难度主要在组织协同让运营、设计、投放三个团队接受并共同维护这套系统的工作方式是比模型调参更费力的事。但一旦走通营销素材的产能天花板就真的从人力时薪变成显卡算力了。这条路我会继续走下去有新的进展和教训再来同步。