ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

广告传媒AI Agent实战:素材整理与方案辅助智能体搭建指南

广告传媒AI Agent实战:素材整理与方案辅助智能体搭建指南 1. 广告传媒行业为什么需要专属的素材整理智能体广告传媒这个行当外人看着光鲜实际干过的人都知道最消耗精力的从来不是创意本身而是创意周边那些琐碎到让人抓狂的杂活。一个中型广告公司每周产生的素材量轻松过千客户给的品牌VI、历史投放的平面稿、视频素材、KOL返稿、竞品截图、提案PPT里的参考图、设计师的PSD源文件、剪辑师的工程文件……这些东西散落在各个同事的硬盘、网盘、微信群、邮件附件里等到真正要用的时候找一张三个月前客户确认过的KV主视觉能在群里问上半小时。我接触过不少广告传媒团队的负责人他们提到最多的痛点高度一致素材找不到、方案写得慢、重复劳动多。这三个问题看起来是三个独立的事但根子上是同一个问题——团队的知识资产没有被结构化地管理起来。素材是资产过往的方案是资产客户的偏好记录也是资产但这些资产目前基本处于人脑记忆文件夹命名的原始状态。这就是为什么我决定动手搭一套面向广告传媒场景的AI Agent。它不是那种泛泛的万能助手而是专门解决素材整理和方案辅助这两个具体环节的智能体。关键词里的AI Agent、智能体、素材整理、方案辅助、定制开发正好对应了这套系统的五个核心维度技术形态、产品形态、第一功能、第二功能、交付方式。先说清楚这套东西适合谁。如果你是广告公司的项目经理、创意总监、客户执行或者是一个三五人的小型创意工作室主理人日常被素材管理和方案撰写拖住大量时间那这套思路可以直接拿去用。如果你是大厂的AI工程师想了解垂直行业Agent的落地细节这里面的架构取舍和踩坑记录也有参考价值。我不打算讲空泛的概念下面全部是我实际搭建过程中验证过的方案、参数和教训。在正式拆解之前先给一个整体判断广告传媒场景的Agent核心难点不在模型能力而在素材的结构化治理和检索的精准度。很多人一上来就想着接个大模型让它写方案结果发现素材库一团乱麻模型再强也喂不出好结果。这个顺序不能反。2. 素材整理智能体的核心架构拆解2.1 从文件夹思维切换到标签向量双轨制传统素材管理靠文件夹层级比如2024年/某汽车客户/夏季campaign/平面/KV/终稿。这套逻辑在素材量少的时候没问题但一旦超过几千个文件文件夹就变成了迷宫——同一张图可能既属于某汽车客户又属于户外广告还属于蓝色调参考你只能把它放在一个文件夹里其他维度就丢失了。我的做法是彻底放弃单一文件夹依赖改成标签体系向量索引双轨并行。标签体系负责精确筛选比如客户名、项目名、素材类型、投放渠道、色彩倾向、尺寸规格这些结构化字段向量索引负责语义检索比如你输入那种夏天海边很清爽的汽车广告感觉它能找到视觉风格相近的素材哪怕文件名是IMG_20240612_final_v3.psd。具体实现上我用了一个轻量的元数据表来存标签字段设计如下字段名类型说明是否必填asset_idstring素材唯一ID用哈希生成是file_pathstring原始存储路径是clientstring客户名称否projectstring项目名称否asset_typeenum平面/视频/音频/文档/源文件是channelstring投放渠道可多选否color_tonestring主色调自动提取否dimensionstring尺寸规格否created_atdatetime创建时间是tagsarray自定义标签否embeddingvector视觉/文本向量是这张表看起来简单但每一条都有讲究。比如asset_type用枚举而不是自由文本是为了后续筛选时不会出现图片图像pic三种写法混在一起的情况。color_tone我做了自动提取用OpenCV取主色因为广告行业经常需要找一张和这张色调一致的图。注意标签体系一定要在导入阶段就强制规范后期再清洗的成本是前期的十倍以上。我一开始偷懒让同事自由填标签结果出现了汽车车企车厂automotive四种写法后来花了整整两天做归一化。2.2 向量化策略视觉和文本要分开处理素材整理里最容易被低估的环节是向量化。很多人直接把所有文件丢给一个多模态模型生成一个向量就完事了实际用起来检索效果很差。原因是广告素材的信息维度太丰富一张海报既有视觉风格又有文案内容还有版式结构单一向量没法同时表达这些。我的方案是双向量并行视觉向量用CLIP系列的模型提取专门负责看起来像什么文本向量用中文语义模型提取负责文案说了什么和标签描述了什么。检索的时候根据用户意图决定走哪条路或者两条路的结果做加权融合。具体参数上视觉向量我用的维度是768文本向量是1024。为什么文本维度更高因为中文语义的细微差别比视觉风格更难区分比如高端感和奢华感在视觉上可能差不多但文案语境里差别很大需要更高维度来保留区分度。向量数据库我选的是Milvus的轻量版单机部署足够支撑十万级素材。这里有个经验不要一上来就上分布式集群广告公司的素材量级通常在几万到几十万单机加好索引完全够用分布式只会增加运维负担。索引类型用HNSW参数M16efConstruction200这个配置在召回率和速度之间平衡得比较好实测十万条数据下单次检索在50毫秒以内。2.3 自动打标流水线的设计细节素材导入后如果全靠人工打标那这套系统就失去了意义。我设计了一条自动打标流水线分四个阶段第一阶段是文件类型识别根据扩展名和文件头判断是图片、视频、音频还是文档。这里踩过一个坑有些设计师会把PSD的扩展名改成PNG来绕过某些平台的上传限制所以不能只看扩展名要读文件头的magic number。第二阶段是内容提取。图片走OCR提取文案加视觉特征提取视频抽关键帧后同样处理同时用语音识别提取旁白文档直接解析文本。这一步的耗时最大我用了异步队列来处理避免阻塞主流程。第三阶段是标签生成。把提取到的内容喂给大模型让它生成结构化标签。Prompt我调了很多版最后稳定下来的版本大意是你是一个广告素材管理助手请根据以下素材内容输出JSON格式的标签包括客户行业、素材类型、视觉风格、情感调性、适用渠道五个维度每个维度给出最可能的1-3个值。第四阶段是人工复核队列。自动打标不可能100%准确我设置了一个置信度阈值低于0.7的自动进入人工复核队列由团队成员快速确认或修正。这样既保证了效率又保证了质量。整个流水线跑下来一万个素材的初始处理大约需要4-6小时取决于机器配置之后新增素材是增量处理基本无感。3. 方案辅助智能体的能力边界与实现路径3.1 方案辅助不是让AI写方案而是让AI做方案的第一稿这里必须先纠正一个普遍误解。很多人一听方案辅助智能体脑子里想的是我输入一个需求AI输出一份完整方案。实际做过就知道这在广告行业几乎不可能直接实现因为广告方案的核心价值在于策略洞察和创意概念这两样东西高度依赖对客户业务的理解、对市场的判断、对消费者心理的把握目前的模型还做不到独立产出可用的策略。那方案辅助智能体到底做什么我的定位是做方案的第一稿和素材组装。具体来说它承担四件事第一根据项目brief自动检索相关历史方案和素材把可复用的部分整理出来。比如客户是快消品牌要做夏季促销Agent会自动找出过去三年同客户或同行业的夏季campaign方案提取其中的策略框架、创意概念、媒介组合方式。第二生成方案骨架。基于检索到的历史方案和当前brief输出一个结构完整的方案大纲包括背景分析、策略方向、创意概念、执行规划、预算分配、效果预估这些标准模块。第三填充可自动生成的部分。比如竞品分析、市场趋势、媒介环境这些偏事实性的内容Agent可以基于检索到的资料快速成稿。创意概念和核心策略则留空或给出几个方向供人选择。第四素材匹配。根据方案各模块的需求自动从素材库中推荐可用的图片、视频、案例截图并标注版权状态和使用限制。这套定位下来方案辅助智能体实际能帮团队节省的是60%-70%的资料整理和初稿撰写时间而不是替代创意工作。这个预期管理很重要如果一开始就奔着全自动写方案去最后一定失望。3.2 检索增强生成在方案场景的具体调参方案辅助的核心技术是RAG检索增强生成但广告方案场景的RAG和通用问答的RAG差别很大。通用RAG通常检索几个片段就够了广告方案需要检索的是结构化的历史方案全文而且要考虑时效性和客户相关性。我的检索策略是三层过滤第一层是硬过滤按客户、行业、项目类型、时间范围做筛选。比如当前项目是汽车客户那就只检索汽车行业或同客户的历史方案时间范围默认最近三年因为广告策略的时效性很强五年前的方案参考价值有限。第二层是语义检索在硬过滤后的候选集里做向量相似度匹配找出和当前brief最相关的方案片段。这里我把方案按章节切块每个块单独向量化检索时返回的是具体的章节而不是整份方案这样精度更高。第三层是重排序用一个轻量的交叉编码器对检索结果重新打分把最相关的排到前面。这一步能把检索精度提升大约15%-20%代价是增加一点延迟但方案生成不是实时场景这点延迟完全可以接受。生成阶段的Prompt设计也有讲究。我用的结构是系统指令检索到的历史方案片段当前brief输出格式要求。系统指令里明确告诉模型你是广告策略助手输出要专业、简洁、有洞察避免空话套话。检索片段按相关性排序控制在上下文窗口的60%以内留出空间给生成。输出格式用JSON Schema约束确保结构稳定。提示方案生成一定要做事实性校验。模型有时候会把历史方案里的数据当成当前项目的数据写进去比如把去年的市场规模直接搬到今年。我在输出后加了一个校验步骤所有数字类信息必须标注来源没有来源的自动标红提示人工确认。3.3 方案模板的可配置化设计不同广告公司的方案模板差异很大有的用PPT有的用文档章节顺序和命名也不一样。如果Agent的输出格式写死那每家客户都要改代码不现实。我的做法是把方案模板做成可配置的YAML文件定义章节结构、每章的必填字段、生成策略自动生成/检索填充/人工填写、字数要求。Agent读取模板配置后按结构生成输出格式可以是Markdown、JSON或者直接调用PPT生成库输出PPTX。一个典型的模板配置长这样template_name: 快消行业标准方案 sections: - name: 项目背景 strategy: auto max_words: 500 required_fields: [客户需求, 市场环境, 项目目标] - name: 策略方向 strategy: assist max_words: 800 required_fields: [核心策略, 支撑论据] - name: 创意概念 strategy: manual max_words: 600 - name: 执行规划 strategy: auto max_words: 1000 required_fields: [时间线, 渠道组合, 物料清单] - name: 预算分配 strategy: assist max_words: 400 - name: 效果预估 strategy: auto max_words: 500strategy字段有三个值auto表示完全自动生成assist表示生成初稿供人修改manual表示留空由人填写。这样一套配置就能适配大部分客户的方案需求新客户来了改改配置就行不用动代码。4. 搭建过程中踩过的坑与排查实录4.1 素材去重为什么哈希去重不够用素材库最头疼的问题之一是重复。同一个文件被不同同事下载了五次改了名字放进不同文件夹系统里就变成了五个素材。我一开始用MD5哈希去重结果发现只能去掉完全相同的文件稍微改个尺寸、转个格式、加个水印就识别不出来了。后来改成感知哈希向量相似度双重去重。感知哈希pHash对图片的缩放、压缩、轻微调色不敏感能识别出视觉上几乎相同的图。向量相似度则能发现同一张图的不同裁剪版本这种更隐蔽的重复。两个方法结合去重率从最初的30%提升到了85%以上。但这里有个坑去重不能太激进。有些素材看起来相似但实际用途不同比如同一张产品图一张是横版用于banner一张是竖版用于开屏这两张不能算重复。我的处理是设置相似度阈值高于0.95的自动合并0.85到0.95之间的进入人工确认队列低于0.85的保留。4.2 大文件处理视频素材的异步流水线广告素材里视频文件动辄几个G如果同步处理整个导入流程会被卡死。我最初的设计是同步处理结果导入一个包含200个视频的文件夹时系统跑了整整一天还没完而且中途内存溢出崩了两次。改成异步流水线后问题解决。具体做法是文件上传后立即返回后台把任务丢进消息队列我用的是Redis Stream由独立的worker进程消费。worker处理完一个视频后更新状态前端轮询或通过WebSocket推送进度。视频处理本身也做了优化不抽全部帧而是按场景变化抽关键帧通常一个三分钟的视频抽10-20帧就够了处理时间从几分钟降到几十秒。注意异步队列一定要做失败重试和死信处理。有些视频文件损坏或者编码格式特殊处理会失败如果不做重试机制这些文件就永远卡在处理中状态。我的配置是失败重试3次每次间隔递增3次都失败就进死信队列并通知管理员。4.3 检索不准从搜不到到搜得准的调优过程系统刚上线时同事反馈最多的问题是搜不到东西。明明素材库里有输入关键词就是出不来。排查下来发现三个原因第一中文分词问题。广告行业有很多专有名词和缩写比如KVTVCKOL种草通用分词器会把它们切碎。我加了一个自定义词典把这些行业术语加进去检索准确率明显提升。第二向量模型不匹配。最初用的通用中文向量模型对广告文案的理解不够好。换成在广告语料上微调过的模型后高端大气和奢华尊贵这类近义词的检索效果好很多。第三检索策略太单一。只做向量检索会漏掉精确匹配的结果只做关键词检索又找不到语义相近的。最后改成混合检索关键词检索和向量检索各返回一批结果用RRF倒数排名融合算法合并效果比单一策略好很多。调优前后我做了对比测试用50个真实检索需求做基准准确率从最初的42%提升到了86%。这个提升不是靠某一个改动而是三个问题逐个解决累积起来的。4.4 方案生成的幻觉问题与约束手段方案辅助智能体最危险的问题是幻觉——模型编造不存在的数据、案例或引用。广告方案里如果出现假数据轻则被客户质疑专业度重则导致策略方向错误。我用了四层约束来压制幻觉第一层是检索约束要求模型只能基于检索到的资料生成内容Prompt里明确写如果检索资料中没有相关信息请输出资料不足需人工补充不要编造。第二层是引用标注模型生成的每个事实性陈述后面必须标注来源格式是[来源:方案ID-章节]方便人工核查。第三层是数字校验所有数字类信息市场规模、增长率、预算数字等单独提取出来和检索资料做比对不一致的标红。第四层是人工审核节点方案生成后不直接输出终稿而是进入审核界面高亮显示所有自动生成的内容由策略人员确认或修改后才能导出。这四层下来幻觉问题基本可控。实测中大约有5%的内容会被标记为需要人工确认这个比例是可以接受的。5. 智能体与现有工作流的对接方式5.1 不做替代做嵌入很多AI项目失败的原因是试图让用户改变工作习惯去适应新工具。广告行业的人本来就忙你让他多打开一个系统、多学一套操作阻力极大。所以我的原则是嵌入现有工作流而不是另起炉灶。具体做法是素材整理智能体对接团队现有的网盘和IM工具。同事在群里发一张图机器人自动抓取、打标、入库并回复一个素材ID和缩略图。需要用素材时在群里机器人输入需求它直接返回匹配的素材链接。方案辅助智能体则对接文档工具在写方案时侧边栏直接调用生成的初稿一键插入当前文档。这套对接方式让团队几乎不需要学习成本用他们的话说就是多了个很聪明的同事在群里。5.2 权限与审计广告素材的版权红线广告行业对素材版权极其敏感用错一张图可能面临巨额赔偿。所以权限管理和使用审计是必须做的。权限上我做了三级查看权限只能检索和预览、使用权限可以下载和用于方案、管理权限可以修改标签、删除素材。素材入库时标注版权状态自有/已授权/待确认/禁止商用只有自有和已授权的素材才能被方案辅助智能体自动引用。审计上所有素材的下载和使用记录都留痕包括谁在什么时间把哪个素材用在了哪个方案里。这样万一出现版权纠纷能快速追溯。提示智能体行为审计这个词最近很热在广告场景里它的核心就是记录Agent的每一次检索、生成、引用行为确保可追溯、可解释。不要觉得这是大厂才需要的东西小团队一样需要因为版权风险不分团队大小。5.3 成本控制Token消耗的优化实践AI Agent跑起来是要花钱的主要是模型调用的Token消耗。广告素材量大如果每个素材都调用大模型打标成本会很高。我做了几个优化第一分级处理。简单任务用便宜的小模型复杂任务才用大模型。比如文件类型识别、基础标签提取用小模型创意风格分析、方案生成用大模型。第二缓存复用。相同或相似的素材不重复调用模型直接复用之前的标签结果。感知哈希相似的素材标签也做相似度合并。第三批量处理。把多个素材的标签任务合并成一个请求减少API调用次数。实测批量处理比单条处理节省约40%的成本。第四本地模型兜底。对于格式转换、尺寸提取、基础OCR这些任务用本地开源模型处理不消耗API Token。这套组合下来一万个素材的初始处理成本控制在了可接受范围内日常增量处理的成本基本可以忽略。6. 从零搭建的完整步骤与关键配置6.1 环境准备与依赖选型如果你要复现这套系统下面是完整的搭建路径。先说技术栈选型我选的是Python为主原因很简单AI生态最成熟招人也好招。虽然Rust性能更好但广告传媒场景对性能的要求没那么极致开发效率更重要。核心依赖向量数据库Milvus 2.3单机Docker部署关系数据库PostgreSQL 15存元数据和审计日志缓存与队列Redis 7做缓存和异步任务队列对象存储MinIO存原始素材文件模型服务大模型API 本地CLIP模型 本地OCR模型Web框架FastAPI提供API接口前端简单的React管理界面 IM机器人部署方式用Docker Compose一台16核32G的机器就能跑起来素材量特别大的话加存储就行。6.2 素材入库流水线的代码骨架素材入库的核心逻辑我简化成一个可运行的骨架import hashlib from celery import shared_task from PIL import Image import imagehash shared_task(bindTrue, max_retries3) def process_asset(self, file_path, metadata): try: # 1. 计算感知哈希用于去重 if metadata[type] image: img Image.open(file_path) phash str(imagehash.phash(img)) if is_duplicate(phash): return {status: duplicate, phash: phash} # 2. 提取内容 content extract_content(file_path, metadata[type]) # 3. 生成标签 tags generate_tags(content, metadata) # 4. 生成向量 visual_vec encode_visual(file_path) if metadata[type] image else None text_vec encode_text(content[text]) # 5. 入库 asset_id save_to_db(file_path, metadata, tags, phash) save_to_vector_db(asset_id, visual_vec, text_vec) return {status: success, asset_id: asset_id} except Exception as exc: raise self.retry(excexc, countdown60 * (self.request.retries 1))这段代码的关键点在于去重放在最前面避免重复处理浪费资源内容提取和标签生成是耗时操作放在异步任务里向量生成和入库分开方便后续单独重建索引。6.3 方案辅助的Prompt模板与输出约束方案辅助的Prompt我调了很多版最终稳定下来的模板结构如下[系统指令] 你是广告策略助手服务于{客户名称}的{项目类型}项目。 你的任务是基于提供的参考资料生成方案初稿。 规则 1. 只使用参考资料中的信息不要编造数据或案例 2. 每个事实性陈述后标注来源格式[来源:方案ID-章节] 3. 创意概念部分只给方向建议不写具体文案 4. 输出使用JSON格式符合以下Schema{schema} [参考资料] {retrieved_sections} [当前Brief] {brief_content} [输出要求] 按模板结构生成每个章节控制在{max_words}字以内。这个模板的核心是约束约束信息来源、约束输出格式、约束内容边界。没有这些约束模型会自由发挥结果不可控。6.4 上线后的效果评估与迭代方向系统上线三个月后我做了效果评估。素材检索的平均耗时从原来的15分钟在群里问翻文件夹降到了30秒以内方案初稿的撰写时间从平均2天降到了半天素材复用率从不到20%提升到了55%。但也有一些没达到预期的地方。比如自动打标的准确率在85%左右还有提升空间方案生成的创意部分质量不稳定有时候给的方向很平庸跨模态检索用文字搜视频的效果还不够好。后续迭代我打算做三件事一是用团队自己的素材和方案数据微调模型提升领域适配度二是引入多模态大模型做更精细的素材理解三是把方案辅助和素材整理打通让方案生成时能直接调用素材库做可视化排版。这套系统不是什么高深的技术创新核心是把成熟的AI能力用对地方、用对方式。广告传媒行业的AI Agent拼的不是模型多强而是对业务场景的理解有多深、对工作流的嵌入有多自然。我见过太多技术很牛但没人用的AI工具问题都出在脱离实际场景。希望这套搭建思路能给同行一些参考少走一些我踩过的弯路。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进