
如果你在货运平台或者本地生活平台做过营销广告一定清楚这个场景有多特殊。货拉拉的业务核心是同城货运撮合一边是司机一边是发货用户营销广告既要拉新用户下单又要唤醒老用户还要兼顾司机端侧的激励触达。传统做法是人肉写文案、规则圈人群、静态出价素材更新慢、转化衰减快、跨城市复制难。我们团队从去年开始系统性尝试用大模型重构整条营销广告链路从文案生成、人群理解到投放策略每个环节都踩了不少坑也沉淀了一套可以复用的打法。这篇内容我会完整拆解我们的落地路径为什么选择开源基座加私域微调的技术路线提示词工程和上下文工程到底怎么分工微调数据怎么构造线上推理延迟怎么压以及效果评估和持续迭代的机制。如果你正打算在业务里引入大模型或者在做广告智能化的过程中遇到瓶颈这篇文章应该能给你一些能直接抄作业的参考。1. 整体设计与思路拆解1.1 先想清楚营销广告场景里大模型到底解决什么问题很多团队一上来就急着选模型、搭框架结果做出来的东西业务方不用。我们复盘后发现根因是没把业务问题拆解成模型可解的子问题。营销广告链路里大模型能发挥价值的地方其实集中在三类第一类是内容生产力问题。投放物料包括信息流文案、短信文案、Push通知、司机端任务卡片、社群话术过去这些全靠运营手工写。一个运营一天最多产出20到30条素材还要适配不同城市、不同车型、不同用户状态根本写不过来。大模型擅长的是在约束条件下批量生成变体这个场景天然适合。第二类是用户理解问题。传统人群圈选靠的是规则标签比如“最近7天有搬家行为”“上午10点打开过App未下单”。这些标签是离散的、静态的没法表达“这个用户可能是搬家高峰期临时起意”这种语义化洞察。大模型的语义理解能力可以把非结构化数据订单备注、客服对话、搜索词转化为更细腻的用户向量和意图标签。第三类是交互与决策问题。比如广告出价以前靠人工设系数现在可以尝试让模型基于上下文预测转化概率。再比如客服和销售场景里的智能应答、催付话术大模型的生成能力可以直接接管一部分人工。货拉拉的独特之处在于前后两端都是“人”。用户端有搬家、拉货、企业月结、同城急送等复杂需求司机端有接单偏好、车型限制、疲劳度管理。营销内容如果只面向C端用户而忽视司机端的承接能力转化再好也接不住单。所以我们在设计大模型应用时从一开始就把两端信息同时纳入上下文。1.2 技术路线选型为什么不走纯闭源API也不全自研关于模型选型我们内部讨论过三条路线全量调用闭源API、开源基座完全本地化、两者混合。最终选择的是开源基座加私域微调加轻量RAG的混合架构理由很实际。纯闭源API的问题不在效果而在数据合规和成本。营销素材里包含大量用户订单特征、价格策略、补贴信息这些数据出域要过合规评审而且每次生成都要把包含业务特征的上下文发给外部服务调用量上来之后成本不可控。另外广告物料对延迟敏感用户打开App的瞬间要决定Push推什么内容外部API的网络往返时间在高峰期不可接受。全自研基座就更不现实了。训练一个基座模型的成本、数据、算力、人才要求不是营销团队能承担的也没有必要。我们的定位是应用层创新不是在基座层重复造轮子。所以最后的方案是选一个开源基座我们主要对比了7B和14B两个规模用LoRA做业务微调让它学会货运行业的术语和文案风格用vLLM做推理部署遇到需要实时事实依据的场景比如查询当前优惠活动、司机实时位置距离再叠加一个轻量RAG或者直接走接口查询。这个组合的好处是核心生成能力可控、数据不出域、单次推理成本可以压到很低、迭代速度也快。1.3 分阶段落地路线先做一个极小闭环我们踩过最大的坑就是一开始铺得太开。Chatbot、素材生成、人群洞察、智能出价四个方向同时启动结果每个方向都做得不深业务方感觉“啥都能干但啥都不好用”。后来调整策略只选了一个业务线的一个广告位做突破同城拉货场景的短信召回文案。这个场景约束清晰短信有字数限制、效果可度量发送后24小时下单率、用户基数大非常适合验证模型能力。用两周时间把文案生成的闭环跑通在线AB测试提升明显业务方才愿意投入更多资源做后续的素材生成和人群洞察。所以如果你也想做类似的事我的建议是先别想着一盘棋全铺开找一个业务痛点足够痛、效果指标足够清晰的场景把模型流程业务三方协作打通再横向复制。这也是我们在货拉拉营销广告里能持续推进的关键方法论。2. 核心细节解析与实操要点2.1 提示词工程与上下文工程的分工很多人把提示词工程和上下文工程混为一谈实际上它们解决的是不同层次的问题。提示词工程解决的是“模型按什么格式、什么风格、什么约束生成内容”上下文工程解决的是“模型生成内容时能参考哪些事实依据”。以我们的短信召回文案为例提示词部分定义的是文案类型利益点前置型/紧迫感型/情感共鸣型、字数限制短信模板控制在55个字以内、禁用词不能出现“最”“第一”“国家级”等广告法违禁词、结尾必须带短链或者App唤起说明。这些属于约束条件告诉模型“怎么说”。上下文部分提供的是用户当前所处城市一线城市和下沉城市的文案语气差异很大、用户最近一次叫车时间判断用户熟悉度、常驻区域附近的商圈或批发市场特征、当前是否有可用优惠券、目标车型小面还是4米2货车。这些属于事实信息告诉模型“说什么”。我们内部把提示词和上下文拆成两个模块来管。提示词模板沉淀在配置中心运营同学可以直接编辑文案风格上下文则由特征服务动态组装每次调用实时拼装。这样做的好处是改风格不用动代码加特征不用改提示词。一个很容易被忽略的细节是上下文不是塞得越多越好。我们把用户近30天的12类特征全塞进去后模型反而开始“胡言乱语”生成的文案里出现不存在的优惠信息。排查发现是上下文过长模型注意力被稀释对关键利益点的聚焦能力下降。后来我们限定上下文最多8个关键特征超出部分放到RAG里按需检索问题才解决。2.2 业务微调的必要性与边界大模型通用能力很强但业务场景里三个问题不微调很难解决。第一个是业务术语缺失。货拉拉的“拼车”“冷鲜”“4米2”“爬楼费”“等时费”这些词通用模型不理解它们的具体含义和营销卖点。你让模型写一条“4米2货车搬家”的文案它可能会去强调“空间大、装得多”但真正打动用户的是“4米2车型可进地库、适合跨城搬家”。这种行业认知必须通过业务语料让模型学会。第二个是输出风格不稳定。通用模型写出来的文案偏“互联网大厂风”喜欢用“即刻”“尊享”“极致体验”。但货运用户群体偏实用主义司机师傅和批发市场老板看到这类文案会觉得“花里胡哨不实在”。我们希望文案接近“一个熟悉同城货运的邻居在给你建议”的感觉这种风格可以通过几十条高质量样本快速微调出来。第三个是合规约束。广告法对绝对化用语、虚假宣传、价格表述有明确限制。通用模型很难记牢所有违禁词微调时把带合规标注的业务语料喂进去能显著降低违规率。但注意微调不是万能的合规约束不能只靠模型记忆我们在生成链路最后仍然保留一层规则过滤。再说边界。我们并不建议营销场景一上来就全量微调。如果只是做头脑风暴式的灵感生成通用模型完全够用。微调投入大、周期长如果业务本身还没有稳定跑通微调就是过早优化。我们的经验是先用提示词加上下文把流程跑起来观察模型暴露出的短板当“术语理解错误”“风格偏离”“格式不稳定”这三类问题反复出现时再启动微调。2.3 从规则标签到语义人群的理解升级人群圈选是广告投放中承上启下的环节直接决定素材发给谁。传统规则标签的缺陷在于“静态”和“粗粒度”。比如“近7天有浏览搬家页面”这个标签筛选出来的用户其实包含好几种完全不同的意图有人是下周要搬家提前看价格有人是已经在别家下过单只是来比价有人只是误触。用同一个素材去打这三种人效果必然打折扣。我们用来做升级的方向是把用户行为序列喂给Embedding模型产出用户语义向量再基于向量聚类生成动态人群包。具体做法是取用户近30天的浏览、点击、搜索、下单行为序列用文本嵌入模型把行为特征转成语义向量然后聚类生成若干人群簇再人工给每个簇打上语义标签比如“搬家前比价型”“搬家决策果断型”“企业月结高频型”“周末搬家计划型”。这套体系和大模型的关系是双向的。一方面Embedding模型本身就是大模型技术栈的一部分另一方面聚类后的人群语义标签可以直接作为上下文特征拼装进文案生成的Prompt里让模型知道“我在和谁说话”。实际效果上基于语义人群包投放的点击率相对规则标签平均提升了将近20%。这个提升不是某一个素材的功劳而是人群理解变准之后素材匹配度、发送时机、出价策略都能跟着优化。3. 实操过程与核心环节实现3.1 从0到1搭建营销文案生成流水线我们最终跑通的方案是一个三段式流水线特征拼接、候选生成、规则校验。特征拼接阶段特征服务从数据仓库拉取用户基础属性、近期行为、优惠信息、城市和车型信息拼装成结构化的上下文JSON。提示词模板从配置中心读取两者合并后发给推理服务。候选生成阶段我们不是只生成一条文案而是让模型一次生成5到10条变体。参数上温度temperature设置在0.8到0.9之间让输出有一定多样性同时用重复惩罚系数压低重复句式。生成完成后优先做规则校验可以在很大程度上减少违规内容进入后续人工审核。规则校验阶段至少做四道检查第一道是敏感词和违禁词过滤用词表加正则匹配第二道是字数校验短信文案超过55个字就淘汰第三道是必含要素检查比如优惠金额、有效期、App唤起方式是否都在文案里第四道是品牌一致性检查确保文案语气符合当时定下的调性规则。通过校验的文案进入候选池由运营人工做最终抽检和确认再推送到投放系统。线上并发方面vLLM的continuous batching帮了大忙。我们最初用原生推理框架做批量生成GPU利用率只有不到30%换成vLLM之后利用率提升到70%以上。实测下来单张A10显卡部署7B模型在8并发下P99延迟控制在300毫秒以内完全满足短信和Push批处理的场景要求。3.2 微调实战用LoRA在业务数据上做轻量训练微调这块我重点说数据构造和训练配置这是踩坑最多的环节。数据准备阶段我们从历史投放素材里筛选了近万条高转化文案然后做清洗和重写。清洗包括去掉已失效的优惠信息、修正过期价格、标记违禁词重写是把非结构化的素材改写成“输入上下文加输出文案”的指令对格式。每条样本的输入部分是场景描述加用户特征加生成要求输出部分是标准的文案。这里有个经验宁可要500条高质量样本也不要5000条噪声样本。我们第一版就是贪量混入了大量低质量素材微调后模型反而变笨了后来人工逐条筛选到1800条效果才明显提升。训练配置上基座模型选的7B规模LoRA的rank设16alpha设32学习率设2e-4训练3个epoch。为什么用LoRA而不是全参数微调一是营销文案场景的任务层知识并没有改变模型的通用能力改动应该尽量局部化二是7B模型全参数微调的显存开销和训练时间对于投放侧的迭代节奏来说太慢了。LoRA可训练参数只占全部参数的大约1%一套训练跑下来在4张A100上只需要几个小时。训练过程中有一个值得注意的细节我们按照3比1的比例混合了通用指令数据。纯业务数据微调很容易让模型变得“只会写货运文案”连基本的逻辑推理和开放对话能力都退化这在需要模型理解用户自由输入时会出问题。混入通用指令数据后模型的泛化能力保持得比较好。微调完成后还要做一轮针对性的评测而不是只看loss下降。我们设计了一套营销场景的评测集包括30条典型场景输入、手工标注的期望风格和合规要求。每次模型迭代都要过一遍这套评测对比新旧版本的差异防止“修了一个问题引入两个新问题”。3.3 效果评估体系离线指标与在线AB的配合营销广告效果评估不能只看线上转化因为线上实验周期长、变量多。我们建立了离线在线两层评估体系。离线评估阶段自动更新指标包括语义相似度生成的文案和人工优秀文案的语义接近程度、规则通过率合规检查、字数检查、必含要素的通过比例、多样性同一prompt生成的多条文案之间的句式差异度。人工抽检是每个版本随机抽100条由运营同学做1到5分的打分重点看“落地感”和“真实感”。这个指标机器很难量化但和线上效果的相关性很高。在线评估阶段每个素材版本都要对应一个投放实验。我们会把同一人群随机分为对照组和实验组对照组使用人工写的存量文案实验组使用大模型生成的文案。核心观测指标包括文案送达后的1小时打开率、24小时下单转化率、退订率、投诉率。这里特别提醒短信场景一定要盯退订率。大模型为了凑字数容易写出“不可取消”之类的暗示性表述用户一旦反感直接退订等于丢失了一个长期触达渠道。我们跑过的几轮完整AB测试数据显示在短信召回这个场景大模型生成的文案在24小时下单率上相对人工提升了约15%到25%而且用户投诉率没有显著变化。这个结果给了业务方足够的信心后续才把范围扩展到信息流广告和司机端Push。4. 常见问题与排查技巧实录4.1 生成的文案“看着通顺但不落地”这是我们在早期遇到最多的问题。模型产出的文案语法完全正确读起来也流畅但就是感觉“差点意思”。比如用户明明在深圳文案却推荐“南京地区的优惠活动”用户叫过几次小面货车文案却推荐“4米2大货车搬家方案”。排查后发现根因只有一个上下文没有真正传到模型那里。工程上很容易出现一种情况特征是组装进字符串了但Prompt结构不合理模型没把特征当事实依据而是当成了背景噪声。解决方式很直接把关键特征放到Prompt末尾并用明确指令标注“以上是用户实时信息生成文案时必须引用其中至少一个具体信息”模型输出时引用指定特征的命中率大幅提升。4.2 广告合规红线如何守住广告法合规在营销场景里是红线大模型生成的内容天然就有“夸大”倾向。我们处理这个问题的组合策略是微调阶段加入合规负例比如“文案中包含绝对化用语扣分”推理阶段加入违禁词规则过滤上线前保留人工审核环节。三者叠加合规通过率从最初的不到70%提升到99%以上。这里有个细节值得强调规则过滤不是简单地匹配词表还要做语义层面的判断。比如“最省钱”这种词在货运行业属于绝对化用语要拦截但“更省钱”是合法比较级可以放行。词表加正则只能解决前者后者需要语义模型辅助判断。我们最终在规则引擎后面挂了一个小模型做合规二判虽然增加了一点延迟但安全收益很大。4.3 推理延迟和成本如何同时压下来营销批处理场景和在线实时推荐不一样对延迟没那么苛刻但成本控制压力很大。我们做了三件事把成本压下来了。第一是模型规模选型。一开始用14B模型效果确实好但一张A100只能部署一个副本高峰期还得扩容。后来做精细化的蒸馏和评测发现7B模型在文案生成任务上效果差距可以控制在5%以内果断切到7B单卡部署成本降了一半以上。第二是引入缓存和路由机制。不是所有请求都值得走大模型。对于优惠金额、有效期这类结构化信息的拼接我们直接用模板引擎生成只有需要创意表达的内容才调用大模型。经过路由分流真正打到推理服务的请求只占全部请求的40%。第三是batch优化。短信和Push的素材生成是明显的批处理场景我们把生成请求攒成batch一起送进vLLM实测有效把单Token成本降低了约30%。做批处理的时候有一点要注意一个batch里的请求最好不要超过32个太多会导致单条请求的P99延迟明显上升影响下游投放系统的调度节奏。4.4 微调后的“灾难性遗忘”怎么解决微调领域的老问题我们在业务数据上训练后也遇到了。模型对货运文案的理解变好了但通用能力明显退化比如让它解释一个用户问题变得语无伦次。我们最终用两个手段解决。第一是数据混合训练集里不仅放业务数据还要放一部分通用指令数据比例大概3比1保持模型对通用指令的响应能力。第二是引入回放评测每次微调迭代后除了跑业务场景评测还要跑一组通用场景的冒烟测试防止通用能力悄悄退化而不自知。4.5 数据飞轮如何让模型越用越聪明营销广告的效果数据本身就是最好的训练燃料。我们搭建了一套简单的数据回流链路每次投放的文案、曝光量、点击量、转化量会统一落库每周做一次效果复盘。高转化的文案自动进入“优质素材池”低转化的文案进入“待分析池”。优质素材池的数据经过人工确认后会作为下一轮微调的正样本待分析池的数据则用来做bad case分析找到模型常见的“伪痛点”表达有针对性地补充负例样本。这样每一轮微调迭代都在用真实反馈修正模型的营销直觉。目前这套飞轮大概每两周跑一轮模型效果在持续稳定提升。还有一个小技巧同一个文案素材在不同城市的转化率差异很大我们会按城市维度拆分统计把“某城市专属好文案”识别出来单独作为该城市定向微调的样本。这种粒度更细的反馈循环对多城市运营的营销场景特别有效。结语项目做下来我个人最核心的体会是大模型在营销广告场景里的价值不在于它能写出一句漂亮的广告词而在于它能补齐团队在规模化内容生产和动态人群理解上的短板。技术选型上开源基座加轻量微调加灵活编排的组合是当前阶段性价比最高的路径落地节奏上一定要从一个小场景快速打通闭环再逐步横向扩展。最后分享一个我们后期总结的扩展方向把大模型生成能力接入实时投放引擎根据用户实时行为动态调整素材内容和出价策略实现真正的“千人千面实时响应”。这条路我们已经开始试点了后续有阶段性成果再拿出来和大家分享。