做营销广告这一行的人应该都有体会:货量再大,也架不住每个渠道、每个用户群都要单独出文案和素材。我们团队在货拉拉做增长营销,日常要覆盖App Push、短信、Banner、落地页、海报、朋友圈投放这些场景,过去全靠运营和设计手工产出,一天能憋出几十条就算高产,更别提不同业务线(搬家、拉货、租车、二手车)的素材还要互相独立。大模型来了以后,我们很自然地去想:能不能让机器先把初稿干了,人来改?这篇文章就把我们这大半年在货拉拉营销广告场景里落地大模型的全过程做个复盘,包括场景拆解、模型选型、系统架构、提示词工程、微调实战、评估方案和踩过的坑。如果你是做营销增长或者企业内AI落地的,应该能直接抄作业的地方不少。
1. 场景梳理与落地节奏
1.1 营销广告链路里,大模型最该先打哪个点
我习惯把营销链路拆成四段:创编(内容生产)、投放(渠道选择、出价、定向)、承接(落地页、活动页)、复盘(数据归因与迭代)。早期我们评估过很多“大模型改造全链路”的激进方案,最后明确了一件事:在货拉拉这个盘子,最容易出效果也最容易控制风险的是创编环节,因为这一环节本质是自然语言的生成和润色,恰恰是大模型最擅长的域,而且即便出错了也只是初稿质量问题,不会直接烧钱。
创编环节里,文案生成又是第一优先级。原因很简单:一个投放计划可能同时跑几十个渠道,每个渠道对字数、语气、落地页的要求都不同,人工适配的边际成本极高。比如同一个“搬家优惠”主题,Push要16个字以内、短信要带链接、Banner标题不能超过12个字符、落地页要分主副标题,用传统模板做出来的东西千篇一律,用户早就免疫了。大模型在这里的价值不是“造出完全没见过的话”,而是用极低的成本批量产出有差异但不跑偏的候选文案,把人工从“写”变成“选和改”。
1.2 素材生产场景的切入点比想象中更窄
图像素材是另一个被寄予厚望的场景。货拉拉的广告素材有很多本地化需求:不同城市的车型不同、主打业务不同、活动利益点不同,一套素材要衍生出几十个版本。文生图模型确实能大幅缩短设计初稿时间,但直接“文生图出合成图”在真实投放中风险很大,主要问题是文字渲染错误、品牌元素变形、车辆形态不真实。我们后来把场景收窄为“辅助设计而非替代设计”:用大模型生成背景、场景元素和配色方案,再由设计师把核心产品图、logo、文案叠加进去。这个定位很重要,它决定了后续所有技术选型的方向。
1.3 节奏规划:先内部效率,后用户侧体验
项目整体走了三个阶段。第一阶段是“人机共生模式”,大模型生成的文案由运营在内部工具里审核修改后再发布,不直接面向用户。第二阶段是“半自动批量模式”,在规定格式和合规检查通过后,文案可以批量生成至审核队列,个别高风险场景保持人工审核。第三阶段才是“个性化推荐模式”,根据用户分群和偏好动态生成推送内容,这部分我们目前还只在部分城市小流量测试。这个节奏不是保守,而是营销场景的错误成本太高,一条文案发错可能引发投诉甚至渠道封禁,宁可慢一点,也要把审核闭环做扎实。
2. 技术选型与架构设计
2.1 基座模型:开源、私有化部署,不赌单一模型
模型选型我们纠结了很久。最初也接过大厂的API,效果不错,但两个问题很致命:一是素材和用户特征属于业务核心数据,出到外部总有合规压力;二是API的高峰限流和计费模式不可控,做批量生成时成本会指数级上涨。最终选择基于国内开源模型做私有化部署,主力用的Qwen系列和ChatGLM系列,两个都做评估,哪个效果好上哪个,不搞绑定。
为什么同时保留两个?因为不同任务的表现差异很大。中文营销文案、口语化表达,ChatGLM在某些语感上更自然;结构化输出、多条件约束场景,Qwen遵循指令更稳定。我们抽象了一层统一的推理服务,底层模型可以切换和灰度,上层业务不用感知模型换了。
2.2 提示词工程 vs 微调:先做约束,再做风格适配
很多团队一上来就想着微调,我们恰恰相反,先用提示词工程跑了近两个月的线上值班。原因是营销文案的约束大部分是规则性的:字数、禁用词、利益点、行动词,这些通过精心设计的提示词和few-shot示例就能解决,没必要动模型权重。等到我们发现某些品牌风格(比如货拉拉“务实、接地气”的调性)总是不够稳定时,才开始上LoRA微调,让模型“记住”风格,而不是每次在提示词里辛辛苦苦描述风格。
提示词工程阶段沉淀了大量模板,后面微调时的训练数据也大量来自这些模板的高质量产出。换句话说,提示词工程不是微调的前置废案,而是数据积累的手段。这是很多项目没想明白的一点。
2.3 部署方案:vLLM打底,量化保成本
推理部署我们选了vLLM,主要看中的是PagedAttention对长文本生成的高吞吐。营销文案最长不过几百字,吞吐压力不大,但批量任务并发量高,一个几十条的批量生成请求如果串行跑会慢到被运营吐槽。vLLM支持Continuous Batching后,吞吐提升非常明显。
显存和成本方面,我们用了4-bit量化部署。实测下来量化对营销文案生成的负面影响很小,因为这类文本的语义复杂度不高,不像代码生成和数学推理那样对精度敏感。单机双卡可以稳定支撑线上小流量和内部运营工具的轮询调用,初期完全够用。训练侧用LoRA,只需要在量化基座旁挂一个小的adapter,显存开销可以接受。
2.4 整体架构:把模型藏起来,让业务无感
系统架构不复杂,但分层必须清楚。最底层是模型服务层,统一封装为HTTP接口,支持同步和异步两种调用模式,同步给内部工具用,异步给批量任务用。中间是策略层,负责拼装提示词、注入业务参数、调用合规检查服务、执行多候选过滤。最上层是业务接入层,给运营提供了一个Web工作台,运营可以提交“写20条搬家优惠Push文案”这种需求,系统批量生成后按相似度去重,然后进入人工审核队列。
这个架构最大的好处是业务方不需要知道大模型的存在,她们只是觉得“提交需求之后等两分钟就出结果了”。模型升级、换基座、调参数,业务侧零感知,这对营销团队这种非技术密集型组织来说非常重要。
3. 核心应用实现细节
3.1 文案生成系统的两大核心:上下文构造与后处理
文案生成系统的输入不是简单一句话,而是一个结构化对象,包含业务线(搬家/拉货/租车)、活动主题、利益点、投放渠道(push/短信/banner)、字数上限、受众特征、语气风格。这个结构化输入会通过一个上下文构造器拼装成提示词。构造器的关键是把约束条件显式化,比如“这是一条App Push文案,正文不超过16个汉字,语气活泼但不浮夸,必须包含‘搬家’‘立减’两个关键词”。
我贴一个我们压测后比较稳定的提示词骨架(已脱敏):
你是一名货运平台营销文案专家。请根据以下要求生成{num}条文案: - 推广场景:{scene} - 目标用户:{user_segment} - 核心利益点:{benefit} - 字数限制(含标点):{limit} - 语气要求:{tone} - 必须包含的内容:{required} - 禁止出现的内容:{forbidden} 要求: 1. 每条文案之间用空行分隔 2. 每条文案需要附上一句话说明(推荐理由) 3. 不要编造文案中未提供的优惠金额、活动时间 4. 不要使用“限时抢购”“错过等一年”等夸大用语注意最后两条,这是我们在吃了很多亏之后才加上的。生成阶段我们不追求过高的多样性,temperature设置在0.8到1.0之间,太高会产出“看似新颖实则乱来”的话。如果运营需要不同版本,我们更建议多次采样或者微调seed,而不是一味拉高temperature。
后处理阶段有几道硬性关卡:第一道是敏感词拦截,用词库方式兜底,因为广告法里那些违禁词是硬约束,模型记不住的;第二道是字数截断,半角全角标点都要算上,超过限制的直接丢弃或者重新生成;第三道是相似度去重,批量生成的候选文案中如果两两相似度超过阈值只保留一条,保证运营看到的是多样候选而非换皮复读。这套机制上线后,运营从“写文案”变成了“审文案”,单条产出时间从15分钟缩短到不到1分钟。
3.2 图像素材辅助:prompt反向工程和高频组合
图像素材这块,我们做了一个有意思的功能:prompt反向工程。设计师把历史上点击率高的优秀素材图喂给多模态模型,让模型描述图中的场景、光线、构图、风格标签,再把描述转成语义标签存入素材库。当运营要新做一张“夏季搬家清凉感”的素材时,系统会检索历史高光素材的语义标签,推荐最接近的prompt组合给设计师。设计师可以在文生图模型上先跑一版背景底图,然后放进设计工具叠加车辆实拍图和利益点文案。
这个流程不比直接文生图快太多,但胜在可控性。最后投放的成图一定是经过设计师手工调整的,大模型生成物只是素材,不是成品。对于中小型团队,我强烈建议走这种“AI辅助+人工收口”的路线,不要一上来就追求全自动出图投放,文生图在垂直行业素材上还远没到可以无审发布的程度。
3.3 个性化内容:从粗粒度分群到动态适配
营销广告做到后期一定会碰个性化。货拉拉的场景很特殊:用户使用频次低但单次决策重,搬家一年几次,拉货可能是周期性需求。这种情况下,个性化不是“猜你喜欢什么商品”,而是在正确的时机说出正确的理由。我们做了一版基于用户标签的文案动态生成,输入是用户的基础画像(城市、最近一次叫车时间、距离上次使用天数)、当前场景(搬家旺季/开学季/工作日通勤)和优惠策略(首单立减/复购券),系统输出3条侧重不同卖点的文案,由规则引擎根据用户偏好分群做最终裁决。
这里有个弯路要提醒:一开始我们让模型完全自由的根据用户画像生成“千人千面”文案,结果很糟糕,因为模型对“画像里的哪些信息真正影响转化”没有概念,经常把无关属性写进卖点。后来改成“候选生成+规则决策”的两段式,模型只负责从有限卖点池中组合生成,具体选哪条由运营配置的规则决定,效果立刻稳定下来。
4. 数据工程与模型优化
4.1 微调数据:质量优先于数量,标签比内容重要
虽然提示词工程先跑了两个月,但最终做LoRA微调时,我们并没有直接把历史文案全量灌进去。一是历史文案很多来自不同业务线,风格差异过大,混着训练会让模型学到平均脸;二是大量文案是失效活动,用户看到时已经过期,这类负样本要剔除。我们最终保留了约3万条高质量的、通过审核且产生过转化的文案,按业务线、渠道、活动类型、语气标签做了归类。
训练数据里除了text字段,还保留了标签元信息(如业务线:搬家;渠道:app_push;字数:16;语气:简洁有力),微调时这些标签拼在输入开头。这样做的好处是推理时你可以通过输入不同的标签组合来控制风格,一个模型顶多个模型用。如果你也在做营销文案微调,强烈建议把标签作为输入的一部分,而不是只喂纯文本。
4.2 LoRA微调的参数细节
LoRA微调参数没有标准答案,我们踩完后的经验值如下:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| LoRA rank | 32 | 太低(8)学不出风格差异,太高(128)容易过拟合 |
| LoRA alpha | 64 | 与rank配比为2:1,实测稳定 |
| learning rate | 2e-4 | 采用AdamW优化器,3e-4会些微不稳 |
| epoch | 3 | 超过3轮后验证集loss开始上升,明显过拟合 |
| max_seq_len | 512 | 营销文案短,太长浪费显存 |
| target modules | q_proj, v_proj | 同时调K和V效果提升有限,成本翻倍 |
微调过程中我们每个epoch保存一次checkpoint,并且保留了一份固定的中文广告语测试集,每次epoch结束都用同一组提示词生成文案做对比。肉眼可见地,第2轮之后文案开始有自己的风格,第4轮开始出现“用力过猛”的重复句。所以如果你也在做LoRA,一定要守着验证集看,不要图省事只盯着训练loss。
4.3 线上效果的评估闭环
评估体系分两层。离线层面:自动化指标我们用ROUGE和BLEU做了初筛,但必须承认这两个指标对营销文案的评估能力很弱,因为文案的好坏在于“用户是否愿意点”,不在于“和参考文案重叠多少”。真正靠谱的离线评估是人工评审,我们拉了运营、编辑、设计三个角色背对背打分,维度就三个:信息完整性(该说的说全了吗)、语气匹配度(像不像货拉拉该说的话)、合规风险(是否违反广告法或渠道规则)。
在线层面:选了点击率和转化率做核心指标,用增量实验对比“大模型生成文案+人工审核”和“纯人工文案”在同样投放条件下的表现。这里有个细节:文案的A/B测试必须控制变量到渠道、素材位、人群一致,否则对比没有意义。我们目前在小流量上跑出了点击率提升5%到12%不等的效果,但不同渠道方差很大,PurePush的文案效果提升最明显,Banner因为字数限制严重,大模型的发挥空间有限。
5. 踩坑实录与排查技巧
5.1 幻觉:模型编造优惠信息,必须压死在提示词和后处理
营销文案最严重的问题就是幻觉。我们曾遇到过模型在文案里写了“下单立减50元”,实际上活动只给了30元;还出现过“本周末限时活动”,实际活动是下周三开始。这两类问题单靠提示词无法根除,因为模型天生会“顺口接话”。我们的应对是三层防护:提示词里强制声明“只使用上文提供的信息”;后处理用规则匹配校验所有金额、日期关键词是否与活动参数一致;再给运营一个高亮工具,系统自动标出文案中被识别为事实性信息的内容,让人工优先检查高亮部分。三管齐下之后,事实性错误基本被拦截在审核环节。
5.2 合规:广告违禁词是零容忍红线
营销广告里的合规要求与通用内容生成完全不同。“最”“第一”“顶级”“国家级”这些极限词被广告法严格限制,普通开源模型根本不可能记住全量违禁词库。我们的做法是接入了企业内部已有的合规审核服务,所有大模型生成的文案在交付运营之前必须跑一遍违禁词检查。还有一类是渠道平台的规则,比如某些渠道不允许文案中出现价格歧视性的表述。这块没有捷径,只能把规则沉淀成配置,随着踩坑持续扩充。
5.3 成本:批量生成任务要控制并发和缓存
大模型部署成本一开始被我们严重低估。批量生成300条文案时,如果并发设得太高,GPU会OOM或者延迟飙升,甚至影响同样跑在推理卡上的在线个性化服务。后来做了三件事:在线个性化调用走独占低延迟通道,批量任务排队走异步高吞吐通道;相同参数和模板的生成结果做了语义级别的缓存,运营反复微调后重新请求时大部分内容能命中缓存;夜间自动跑预生成任务,把常用场景的候选文案提前生成入库,白天运营直接搜库,连GPU都不占。这三件事叠加,单月推理成本下降了40%以上。
5.4 效果波动:模型升级不是无脑更
中间我们做过一次基座模型版本升级,离线指标全面上涨,结果线上点击率反而下降。排查发现是模型的新版本更“听话”了,严格按照运营给的prompt输出,反而丢失了旧版本偶尔的“灵光一现”。这个经历告诉我们:模型升级必须做线上回归实验,不能只看离线分数。后来我们把推理服务做成支持多个模型版本混流,新版本先接10%流量跑三天,对比核心指标后再全量切换。
5.5 模板提示词的系统化:别让prompt散落在各个团队
项目做到中期,运营团队开始自己提需求,每个人写的提示词五花八门,同一个“搬家”主题能产出十个风格,质量完全看写的人。后来我们强制收口:所有提示词都必须在平台上配置,不允许在请求里直接塞大段prompt,只允许通过下拉选择场景、渠道、语气、补充字段。这样做的结果是,模型输出可控度大幅提升,排查问题时也不用翻聊天记录了。如果你们也在做企业内大模型应用,记住一条:提示词是产品的一部分,不是工程师的灵药。
6. 那些在文档里学不到的经验
回头复盘这大半年,我的体感是“大模型落地营销广告”这件事,真正的难点从来不在模型本身,而在三个地方:一是对业务场景的克制拆解,知道哪些环节值得用大模型、哪些环节用了反而添乱;二是构建完整的可落地的数据闭环,从提示词产出到人工筛选到反馈回收,每一步都在为后续优化积累资产;三是组织协同,运营、设计、工程师之间需要一个共同的语言和工具链,而不是各写各的prompt然后互相抱怨效果差。
最后分享一个很小的实操技巧:我们所有生成任务都会记录prompt版本和模型版本,这样一旦某次线上文案出问题,能快速定位是哪个模板哪版模型的锅。这个看似不起眼的埋点,帮我们省了无数次排查时间。大模型在营销广告的应用还有非常多可以挖掘的空间,比如更细粒度的用户意图识别、多模态素材联动生成、投放策略的自动调优,目前我们在做的只是第一层。但就这第一层,已经实打实把团队从重复劳动里解放了出来。后面大家的方向,是把释放出来的人力投入到真正需要创造力的地方去。