
大模型在货拉拉营销广告的应用实践这个话题拿出来说的人不多。货拉拉的业务链路以货运、搬家、同城物流为主广告侧的物料和玩法与电商、本地生活不太一样既要覆盖司机的拉新/转化又要触达货主和搬家用户还得考虑小B商家这类专业人群。我们内部从去年开始把大模型系统性地接入广告营销链路不是简单地拿ChatGPT写几句文案、配上图去投放而是真刀真枪地嵌入了创意生成、素材生产、人群定向文案适配、活动页搭建、线上效果归因等环节。这篇文章把整条链路的设计思路、模型选型、微调细节、部署踩坑一次讲透适合正在做广告系统、营销中台、内容生成平台的同学参考。1. 项目背景与业务痛点为什么广告营销需要大模型1.1 货拉拉广告营销的独特场景货拉拉的广告业务横跨三条线品牌广告、效果广告、以及营销活动。品牌广告偏LBS定向曝光讲究的是覆盖和心智效果广告承载下载、下单、领券转化讲究的是点击率和成本营销活动则是节假日或大促节点的集中爆破比如搬家季、双11同城货运高峰。这三条线都有一个共同的瓶颈——营销物料产能。广告文案、落地页、banner图、活动规则、push推送、短信文案全部依赖市场部和投放团队人工产出。以前做一次大促文案组要提前两到三周开始磨创意每个人一天能产出十条高质量的文案已经很极限了。短视频素材出现以后需求面积进一步扩大同一套活动要拆成不同拍摄风格、不同口播脚本、不同字幕包装。人力堆不过来了。更麻烦的是货拉拉的营销物料几乎是全人群覆盖的。司机群体要的是“多接单、多收益”货主关心的是“运价合理、时效稳定”搬家用户看重“靠谱师傅、价格透明”企业客户在意“合同结算、车队管理”。同一张优惠券在四类人群面前说法完全不一样。过去靠人工做差异化文案要么做不出要么做出来之后没法系统化地进行A/B验证。1.2 传统广告物料生产的流程缺陷在没有大模型之前广告物料生产是一个典型的串行流程运营提出活动目标和玩法文案撰写初版广告语、利益点描述设计出图或视频脚本审核合规平台审核公司内审投放测试看CTR、CVR回传效果人工复盘、迭代这个流程的致命问题是创意-投放-反馈的闭环周期太长。一次素材迭代要一周甚至十天一个大促窗口期根本等不起。而且失败成本高——一个物料上线到发现数据不行已经花掉了不少曝光预算。创意空间的探索基本靠拍脑袋能测试的版本数量非常有限根本不是数据驱动而是小样本运气测试。大模型的机会恰恰就在这它可以批量生成不同侧重点、不同风格的文案把素材数量从几十条放大到几千条它可以把人群标签、优惠券信息、运营目标全都揉进上下文实现系统化的千人千面文案它还能在生成链路里做标准化的质检和筛选让无效迭代的成本提前耗在离线阶段。1.3 大模型应用的目标说白了我们不追求做一个“用AI写出旷世文案”的实验性项目而是要做一套能在广告系统里跑起来的生产工具。三个核心目标产能广告文案类物料的生产效率至少提升5倍让运营能够用更少的人力覆盖更多的渠道和人群包。转化通过个性化文案和快速A/B测试让广告点击率、活动参与率相对于人工基线有可量化提升。可控生成内容必须过审核、无违规风险、品牌调性稳定不能出现“全网最低价”“跳楼清仓”这类不合规表达。围绕这三个目标我们在技术架构、模型微调、评测体系上做了不少取舍。后面展开讲。2. 整体技术方案设计选模型、搭链路、定边界2.1 基座模型选型开源优先游戏的第一道选择题是用闭源API还是开源模型。闭源API比如市面上的通用大模型接口的好处谁用谁知道出稿质量稳定、语义理解强、不需要自己维护推理环境。但广告场景有两个绕不开的问题。第一是数据安全。广告文案会带着真实的优惠策略、人群包标签、转化数据进上下文这些属于业务敏感信息。把这类数据批量送到外部模型做推理合规风险很高。第二是成本结构。广告物料是高频低单价场景一次文案生成如果按token收费几千条文案、几十轮改稿迭代费用会非常夸张远高于固定GPU的摊销成本。所以我们定下原则线上链路全部使用开源模型私有化部署。具体选了通义千问Qwen2.5系列作为主基座7B规模跑文案生成14B规模跑审核和质检。选Qwen的原因很直接中文广告语境下的指令跟随能力在开源模型里属于第一梯队且对超长中文上下文支持好同级别的Llama系在中文广告场景里总有一股“翻译腔”需要更多的微调成本去掰回来。我们内部也做了对比同样的800条广告promptQwen在合规表达、押韵、口语化和卖点响应四个维度的命中率整体高出Llama-3.1-8B大约8到10个百分点。2.2 分层生成架构不是所有场景都硬调大模型搭建广告物料系统不能遇到什么需求都往大模型上堆。我们落地时把场景拆成了四层Top层策略层由业务规则和用户画像驱动决定“这条广告该说什么”不涉及生成。比如司机人群说收入稳定货主人群说运价优惠。由策略引擎输出约束标签。Middle层生成层大模型在这里把策略标签扩写成自然语言。这是整个系统唯一使用扩散或生成模型的地方。Bottom层渲染层把生成结果填入物料模板产出最终广告图、短信、push、H5页面。旁路质检层独立的前置审核和效果预估模块负责挡住坏内容并为后续A/B提供分层依据。这样分层的好处是改动策略不用重跑模型改动模板不用改prompt。大模型被当作一个纯粹的“语言渲染器”而不是被塞进所有逻辑里做一个全家桶。方案对比下来我们对不同场景的模型使用采取了混合策略用表格总结一下场景数据量要求实时性要求模型策略部署形态广告文案生成中中秒级返回Qwen2.5-7B LoRA微调vLLM本地集群素材多语言/多风格改写高低离线批处理基座模型直接生成离线批式任务内容安全审核高高毫秒级规则引擎Qwen2.5-14B兜底常驻推理服务活动规则摘要/QA机器人低中基座模型RAG独立服务2.3 为什么文案场景选微调而不是纯提示词其实我们早期也试过纯提示词路线靠精心设计few-shot样例来约束输出。效果在初期还可以但碰到三个瓶颈第一风格漂移。同一个prompt模板在不同时间、不同批次调用里输出语气会飘。今天给的是“亲和温暖风”明天同样的词出来变成“激进促销风”这对品牌向物料是致命的。微调之后模型学到的风格是强绑定在权重里的稳定性高得多。第二指令纠缠。广告文案的需求往往由七八个标签组成人群、利益点、品类、时长限制、字数限制、语气限制、合规例外。标签之间组合爆炸纯靠prompt去约束所有组合最后会得到一个极其复杂的prompt模板模型理解不过来经常顾此失彼。微调之后模型把“标签-表达”映射内化成能力输入侧只需要喂结构化字段输出侧不需要反复强调规则。第三成本。长prompt的token消耗量远高于短prompt。一条广告文案可能最终只有二三十个字但prompt模板动辄上千token在日生成量大的时候成本压力很明显。微调后prompt可以压缩到一半甚至三分之一。2.4 系统链路全景整套系统跑起来之后的调用流程是这样的运营在后台创建活动录入利益点、人群、预算等结构化信息系统自动组装上下文调用模型生成多版文案。候选文案先过一次规则引擎做硬性合规检查再进模型质检打分保留得分高的Top N条交给运营人工挑选或者直接进入投放池做A/B。投放过程中的曝光、点击、转化数据会回流喂给评估模块定期反向优化prompt和微调数据。这条链路看起来工程化程度很高但实现起来没有黑魔法就是一套标准的模型服务加上一套规则管线。下面几节拆开细讲。3. 广告文案生成的微调实践数据、方法与评测3.1 训练数据的构造不等于把历史文案灌进去微调大模型的第一步是造数据。最偷懒的做法是把货拉拉历史上所有的广告文案扔给模型去学我们一开始也差点这么干后来是效果测试把我们劝退了——这样训出来的模型确实学会了“写广告”但把两三年前的过时风格也学了进去缺乏通用性换个品类就露馅。我们最终把微调数据定位成**“策略标签到广告表达”的映射语料**。每一条数据是一个结构化的输入输出对输入包含人群属性、品类、利益点、语气要求、字数范围输出是满足这些约束的一条或多条文案。数据来源有三个历史物料库中表现好的文案由运营手工打标签标注它对应的受众、利益点和风格。用闭源大模型生成一批候选配合人工改写改写的目的是纠正生成模型习惯性的“大词”“空泛形容”。我们自己在线上投放池里筛选出来的优质素材反向标注。数量上大概攒了6000多条高质量数据这个量级训7B模型足够了。我们做过分层验证3000条时生成效果有明显短板——长句子控不住、语气容易跑偏6000条之后曲线开始平缓。提示广告文案微调不要贪多。宁可用5000条高质量精细标注的数据也不要2万条直接从历史库捞出来的脏数据。脏数据会把模型对“什么是不好的文案”的判断力直接毁掉。3.2 LoRA微调的参数配置我们用的是LoRALow-Rank Adaptation方案全参数微调在7B模型上的成本太高而且容易灾难性遗忘——模型会丢掉通用的中文表达能力变成一台只会写广告的偏科机器。LoRA把可训练参数控制在全部参数的1%到2%效果上已经能追平全参数微调同时保留通用语义能力。关键参数如下秩rank64。广告文案属于需要较多风格维度的任务秩太小比如8-16会让模型只能记住有限的风格模式输出容易同质化。alpha128。与rank保持2倍关系让权重更新步长更稳定。dropout0.05。广告数据里存在一定的噪声标签dropout太大会导致模型学不到风格细节太小则容易过拟合。学习率1e-4配合cosine调度总训练轮数3轮。超过3轮在验证集上开始掉点说明记忆性增强但泛化性下降。训练工具选的是HuggingFace的TRL库Transformer Reinforcement Learning底层用PyTorch。单卡A10080G就能训完7B模型的LoRA训练时间大约4到5个小时。在训练环节我们发现一个对结果影响很大的细节正负样本需要同时喂。所谓负样本就是历史素材里那些效果很差、不建议模仿的文案在训练时作为“bad example”和“good example”成对出现让模型明确学“不要写成什么样”。这个策略比单纯增加好样本数量更管用模型生成的合规率和可用率明显提升。3.3 模型评测机器打分人工抽样投广告的文案是需要对效果负责的不能只看生成出来“像不像广告”。我们建了一套三层评测体系第一层是规则硬校验。字数范围、敏感词、竞品词、格式要求任何一个不过直接淘汰。这一层就是死标准没有商量余地。第二层是模型打分器。我们用Qwen2.5-14B加了一套评分prompt从相关性、吸引力、合规性、品牌一致性四个维度给候选文案打分。打分结果不一定绝对准确但用于排序足够稳定。实践下来与运营人工打分的相关系数能做到0.7以上这已经能支撑自动筛选的诉求。第三层是小流量线上验证。Top候选进入真实投放后观察点击率和转化率。由于现在候选基数大我们可以快速跑出统计显著的结论然后反过来回灌数据优化生成策略。这个闭环的好处是模型的迭代不再依赖人的主观感觉而是看数据说话。哪个方向的数据好就加大那个方向的生成权重。4. 营销内容生产全流程从创意生成到素材渲染4.1 文案生成的prompt工程虽然做了微调prompt仍然很关键。微调解决的是风格稳定和标签映射问题prompt解决的是当次生成的业务上下文理解问题。我们的prompt结构分四段第一段是角色设定明确告诉模型它是一名货拉拉资深广告文案专家。第二段是结构化任务描述列清楚人群、品类、利益点、投放渠道、字数上下限。第三段是可以参考的示例每条示例都是以JSON结构化方式给出的。第四段是输出约束重点强调禁止使用绝对化用语、禁止堆砌形容词、禁止不按利益点虚构活动。这里有一个很多人会踩的坑不要在prompt里写太多“不要”的禁令。模型对否定指令的理解能力其实有限写十条“不要出现XX词”不如写两条“请重点突出XX、YY、ZZ”正面指令有效。我们后来把合规约束从prompt里移出了大部分交给规则引擎去硬挡prompt只负责“写好的东西”逐步收敛到“用什么表达、突出什么卖点、保证什么语气”生成可用率反而上升了。4.2 模板化落地页与素材组装生成不是终点物料要进入投放系统必须按照模板结构去组装。我们的做法是大模型只产出结构化短文本渲染交给模板引擎。一个典型的banner位物料配置长这样物料类型: banner图文 尺寸: 750x360 文案区: 主标题: {generated_title} 副标题: {generated_subtitle} 利益点标签: {coupon_tag} 行动按钮: 立即领取大模型的输出会被解析并填入对应的字段。为了提高解析成功率我们强制模型输出JSON格式同时渲染层做了容错——解析失败就降级用默认文案不会让空字段直接展示给用户。这里还涉及一个细节大模型生成的文案往往偏长。广告banner位上只放得下8到12个字模型给出的“同城货运快人一步”没问题但“同城货运让你的搬家比想象中更轻松”就直接溢出。我们在生成端直接限制字数同时渲染端做逐级截断先截主句再截从句最后只剩品牌名兜底保证界面不破不丑。4.3 千人千面的文案适配货拉拉的广告投放系统支持人群包级别的定向。过去千人千面主要体现在出价和选品上文案是一刀切的。有了大模型之后我们实现了真正意义上的“文案千人千面”司机人群文案侧重点在“多接单、收入提升、平台奖励”。货主人群文案侧重点在“发货快、价格透明、运力稳定”。搬家用户文案侧重点在“师傅专业、收费明确、保险齐全”。企业客户文案侧重点在“合同结算、专属客服、批量下单”。实现上并不复杂。策略层根据人群标签生成一组约束字段模型根据约束字段生成对应文案然后渲染层装上A/B分流标记观察每个文案组合在对应人群上的表现。最终的效果是点击率平均提升12%到15%部分人群包提升超过25%。这个结论是可以复现的关键在于你的用户画像标签要足够准确否则模型再会写文案也匹配不到对的人。4.4 活动页的AI辅助生成除了广告物料营销活动页也是一个产能瓶颈。以前做一次活动首页前端加设计要排期三到五天改版一次又要重新排期。我们用大模型做了一层“活动页配置生成器”运营输入活动主题、玩法、给到的权益列表模型生成活动页的模块配置JSON包括页面结构、模块顺序、标题文案、按钮文案、配图关键词。前端模板引擎读取JSON自动渲染。整个流程从三到五天压缩到半天内。这背后的技术实现其实是对生成能力的复用。模型输出的结构化JSON格式我们做了专用微调数据让输出的可用率从一开始的60%多提升到了92%。剩余的8%由运营在编辑后台手动修正。5. 部署与服务化vLLM、并发与流式输出的工程细节5.1 推理服务选型vLLM确实是广告场景的最优解文案生成和审核这两个线上场景需要频繁调用推理服务且有一定的并发压力。我们一开始用Transformers库的generate接口直接起服务后来发现并发一上来延迟根本压不住果断换成了vLLM。vLLM的核心优势是PagedAttention显存管理以及连续批处理continuous batching。简单说它能把多个请求的动态显存需求合在一起处理同型号GPU能撑住的并发量比原生方案高好几倍。我们用两张A10080G跑Qwen2.5-7B的微调模型单卡并发控制在64路。实测单条文案生成输入约500 token输出约80 token的P95延迟在1.8秒左右完全可以满足运营在后台操作的体感要求。启动命令长这样python -m vllm.entrypoints.openai.api_server \ --model /data/models/qwen2.5-7b-ad-lora \ --served-model-name ad-copywriter \ --tensor-parallel-size 2 \ --max-model-len 8192 \ --gpu-memory-utilization 0.9 \ --trust-remote-code注意广告文案的输入输出都很短max-model-len不需要设太高。8192足够覆盖prompt输出设太大会白白浪费显存降低能撑起的并发路数。我们一开始因为默认4K不够用升到16K结果并发量近乎减半后来仔细分析业务场景8K搭配截断策略是性价比最稳的配置。5.2 OpenAI兼容协议与SSE流式输出前端运营后台对生成体验的要求比较高希望像ChatGPT那样一个字一个字“流”出来而不是干等两三秒出全文。我们直接用vLLM自带OpenAI兼容API的流式模式前端用EventSource或者fetch reader方式接收SSE事件流。后端封装的时候有一点要注意流式输出的首字时间会显著影响主观体验。vLLM本身的prefill耗时在那里想在首字上再压只能调整prompt长度或启用自动前缀缓存。我们的做法是把公共的系统提示词放在prompt头部并开启vLLM的enable_prefix_caching公共部分的KV cache被复用首字延迟能压下来差不多30%。前端配套的还有一个abort控制逻辑。运营在改稿的时候经常中途反悔我们提供“停止生成”按钮后端收到终止信号后立即中断推理释放显存占用和计算资源。这个在并发紧张的时候特别重要——一条长输出占着显存不撒手下面十几个短请求全部堵死。5.3 混合部署为什么要留一个14B模型做质检7B模型生成文案14B模型负责打分和质检是我们反复验证后定下来的配置。7B做生成速度快、成本低但让它自己去判断自己生成的文案好不好很容易出现“自我感觉良好”的偏差。14B模型能力更强打分更接近人的判断而且作为独立模块部署和生成服务互相隔离——生成挂掉不影响质检链路反之亦然。这条链路里还有一个需要重点盯的细节并发隔离在高峰期的表现。大促期间投放系统流量是日常的十倍质检请求量会飙升。我们在vLLM上给质检服务挂了独立的实例池禁止与生成服务混部否则一次大促流量抖动就能把两边一起拖死。6. 效果数据与避坑实录真实收益和那些想骂人的问题6.1 产能与转化数据系统上线三个月后的数据是这篇文章最有说服力的一部分指标上线前上线后提升幅度周物料产能文案/素材约200条1500到2000条7到10倍单条文案制作平均时长约1.5小时约10分钟近90分钟缩短广告CTR点击率基线12%12%广告CVR转化率基线8%8%素材上新到投放测试周期一周左右1到2天缩短约80%运营人力占用大促期间15人6人节省约60%最直观的感受是运营的工作模式变了。以前是“辛辛苦苦做出来投出去才知道行不行”现在是“批量生成海量候选筛出最优去投不行马上换一批再投”。大模型没有让经验型运营下岗而是把他们的工作重心从写文案挪到了定策略、看数据、调方向上。6.2 质量可控与合规审核广告物料成本再低质量不过关就是浪费。我们的质检系统有三道关第一道在生成前策略约束检查利益点和人群标签是否匹配。第二道在生成后规则引擎扫描违规词、极限词、竞品词。第三道在投放后监控文案在曝光阶段的CTR异常波动如果某条文案的点击率异常低系统会自动降低它的投放权重。要说合规这里必须负责任的讲一句绝对化用语和夸张促销语是广告大忌也是整个AI广告项目最需要严防死守的红线。我们在规则引擎里维护了一份覆盖几百个敏感词的黑名单凡是生成结果中命中黑名单无论模型打多少分一律淘汰宁可少投也不冒风险。很多做AI广告的团队在这块栽了跟头内容投放出去了被渠道驳回一整个流量池全部浪费。6.3 实操中的坑上下文过载、标签错配、重复句式任何一个项目都不可能一路平静地跑上线我们踩过的坑值得拿出来供同行避雷。第一个坑上下文过载导致“上下文迷失”。微调初期我们总想让模型看到更多业务知识把品类介绍、历史投放数据、甚至转化率报表全塞进prompt。结果输出质量反而暴跌模型开始编造数据和虚构活动。后来定位清楚7B模型的注意力窗口在业务信息冗余时会退化无关信息越多越容易丢核心指令。我们的解法是prompt瘦身把不必要的背景知识从生成任务里拿掉业务标签只放最精炼的一层。第二个坑千人千面变成“千篇一律”。刚开始接入人群标签做文案时我们发现不同人群的文案在语义上拉不开差距。原因很直接——标签字段喂给模型的方式不对直接用自然语言描述人群特征模型根本get不到约束强度。后来我们改为结构化标签键值对比如“target_groupdriver”然后在微调数据里强化了这类特征与文案侧重点的绑定产出才真正分化。第三个坑重复句式和模板腔泛滥。模型写着写着会陷入“同城货运就选货拉拉”“专业搬家就找货拉拉”这种排比克隆模式。解决方式是在prompt里增加“避免与示例文案句式结构雷同”的约束同时在评测体系中加入“句式多样性”指标监控Top候选文案的相似度超过阈值自动降权。第四个坑改稿功能不成熟。运营经常不是要全新文案而是要在已有文案基础上改几个词。我们早期把改稿需求也直接抛给大模型做整句重写结果经常把原本没问题的主文案改得面目全非。后来拆成了两条路轻改换词、换顺序直接走规则模板重改换卖点、换语气才走模型。别让大模型干它不擅长的小活。6.4 模型迭代与数据飞轮广告文案的流行趋势变化很快模型必须持续迭代。我们固定下来的迭代节奏是每两周做一次增量微调。新物料库里的优质文案会被标注、清洗以增量数据集的形式参与训练。同时会把最近一周线上表现差的文案作为负样本加入训练语料做“纠偏型微调”。这个机制听起来简单想跑顺有几个前置条件需要保证一是真实反馈数据的回流要及时投放系统的点击转化日志质量要高二是打标签的工作要固定到专人不能今天运营标明天产品标标注口径一乱训练数据就废了三是每次微调后必须回归测试老场景防止“修了新问题砸了旧能力”。另外要提醒一点不要把线上真实转化数据直接拼进prompt让模型学习可解释性和稳定性都会失控。我们尝试过让生成模型参考历史CTR数据来写文案效果非常不稳定。数据反哺的正确路径是离线离线标注、训练、上线、验证让飞轮的节奏走在流程里而不是推给模型现场理解。7. 一些经验总结与后续方向做这个项目最大的体会是大模型落地广告营销真正的难点从来不是模型本身而是把模型嵌进业务链路的工程能力和治理能力。生成效果再好的模型没有稳定的推理服务做底座没有严格的合规质检做防火墙没有清晰的数据回流做迭代闭环最后只能变成一个昂贵的“炫技玩具”。关于后续我们内部已经在推进三个方向的工作一是把生成能力从文案扩展到短视频脚本和口播词二是尝试引入多模态能力直接生成带画面的广告素材雏形三是探索在活动页、企业服务等更复杂的ToB内容场景里复用这套生成与质检框架。这些方向能不能成还是得看数据和业务反馈的脸色。最后分享一个对正在做同类项目的同行有用的冷知识大模型广告项目的ROI一半取决于生成质量另一半取决于你运营后台的交互效率。如果运营需要复制文案、打开编辑器、粘贴模板、手动预览那生成速度再快整体产能也起不来。我们在后端把生成结果一键接入素材库、一键同步到投放平台运营在后台完成选择、确认、发布那个效率提升才真正兑现了。别让流程拖累模型这是所有AI工程落地最朴素的真理。