本系统用于服务端 Docker 环境每日自动扫描投放配置,完成腾讯广告自动搭建与创意补量。
人工只维护待投放配置,主流程自动完成:
当前生产配置来自飞书表 自动化账户。
每个账户只需要配置:
当 是否自动化执行=是 时,每日主流程会扫描并处理该账户。为否时,系统不再为该账户新建广告或补创意,但不会暂停或删除既有广告。
单广告预算语义:
不限制 / 不限 / -: 按腾讯不限预算传 daily_budget=0。当前单广告最终有效创意目标:
TARGET_CREATIVES_PER_AD = 12
含义:
DENIED 创意不计入有效创意每次为一条广告准备一条创意时,视频最多扫描:
primary source: 默认最多 3 页,每页 100 条
hot source: 默认最多 3 页,每页 100 条
执行顺序:
source=hot注意: source=hot 只改变内容服务的视频来源。默认情况下 crowdPackage 使用当前账户配置的人群包;如果配置了视频召回映射,则 primary/hot 都使用映射后的召回人群包。分页结果按 video_id 去重合并。
当前默认视频召回映射:
cell*year*商业 -> wx*商业
回流330以上人群 -> R_330+
该映射只影响 videoContentList 获取视频,不影响腾讯投放定向、人群包授权和 xcx/save 落地计划。
内容服务 source 也可独立映射。当前默认没有 source 覆盖,会使用 .env 的 PIAOQUANTV_VIDEO_SOURCE=prior。
回流330以上人群 -> crowdPackage=R_330+, source=prior
原因:内容服务中 330 人群包的实际参数是 R_330+。
内容服务 videoContentList 返回的 category 字段会用于内容品类过滤。
默认过滤:
LANDING_EXCLUDED_CATEGORIES=早中晚好,祝福音乐,历史名人
命中后,该视频会在以下步骤前被跳过:
可通过 Docker/K8s 环境变量覆盖:
LANDING_EXCLUDED_CATEGORIES=早中晚好,祝福音乐,历史名人
多个品类用英文逗号分隔。
承接视频在创建落地计划前调用风险接口:
POST https://longvideoapi.piaoquantv.com/longvideoapi/openapi/video/getVideoTagIds
当前阈值:
VIDEO_RISK_MAX_ALLOWED_LEVEL=5
规则:
videoContentList 只负责提供承接视频候选。素材召回特征统一通过 video_id
查询 ODPS 表:
loghubods.dwd_video_element_contribution_analysis
当前使用的召回特征:
解构选题 列 -> VIDEO_TOPIC元素维度=实质, 点类型=灵感点 -> INSPIRATION_SUBSTANCE元素维度=实质, 点类型=关键点 -> KEYPOINT_SUBSTANCE元素维度=实质, 点类型=目的点 -> PURPOSE_SUBSTANCE形式 和 意图 不参与素材召回。primary 和 hot 视频都走同一套 ODPS
查询、风险审核、素材召回和审批流程。
素材召回只使用相似度做硬筛:
RECALL_SIM_THRESHOLD=0.8
RECALL_DAYS=180
RECALL_DISPLAY_K=30
素材必须满足:
score >= 0.8通过筛选后按历史消耗 cost 倒序选择。ROI、CTR、曝光数和相似度会进入创意审批报表,但不再作为硬筛。
账户可通过飞书/DB 指定素材来源:
历史素材:继续使用历史已投素材召回。AI生成素材:按承接视频的 ODPS 特征生成新图片素材。AI 生成素材链路只改变“素材来源”,不改变视频筛选、人群包、出价、预算、落地计划、审批和腾讯创意创建主流程。
当前每个视频通过 landing_video_id 读取本地库 video_element_feature_cache 中该视频最新分区的 解构选题,
并使用贡献分最高的 standard_element 生成 1 张 topic 图片。
生成图片前会先用 OpenRouter 文本模型清洗原始 解构选题,
去掉转发、关注、公众号回复、加群、领取、底部提示、推广话术等互动/营销引导,同时保留核心问题、信息差、反差、情绪价值或生活提醒价值。
清洗后的主题种子不再强制写入“中老年/老人/退休/晚年”等目标用户词;目标用户不等于画面主体。
清洗失败或清洗后仍包含互动/营销词时,本轮跳过该视频,不使用原始 topic 兜底。
标题节点会先生成主标题和 highlight_terms;图片生成阶段只能高亮这些词,不能自行选择其他高亮词。
最终图片 prompt 由工程内模板、清洗后的动态承接视频描述、标题/高亮词、以及弱化后的 pattern visual_direction 拼接:
examples/auto_put_ad_mini/prompts/ai_sanitize_video_description.mdexamples/auto_put_ad_mini/prompts/ai_cover_copy.mdexamples/auto_put_ad_mini/prompts/ai_generated_material.md解构选题.standard_element 经文本模型清洗后的主题描述material_creative_pattern.visual_rule 只作为可选参考;如果和画面主体多样性、非默认人物、非默认老人正脸冲突,以全局视觉策略为准AI_IMAGE_ASPECT_RATIO,默认 16:9AI_IMAGE_TARGET_WIDTH x AI_IMAGE_TARGET_HEIGHT,默认 1280x720AI 图先上传到 OSS 并进入飞书人工审批。只有人工 approve 后,Phase 3 才会把图片上传到腾讯 images/add 并创建创意。
如果账户配置 生成失败是否回退历史素材=是,AI 生成失败或无候选时才回退历史素材;否则本轮跳过。
AI 图默认上传到:
art-pubbucketauto_put_tencent/imagehttps://rescdn.yishihui.com/手动调试生成效果可运行:
.venv/bin/python examples/auto_put_ad_mini/debug_generate_ai_material.py --video-id 71187017 --title "视频标题"
调试脚本按 video_id 读取本地特征缓存表,只生成并上传 OSS,打印图片 URL,不会创建腾讯广告或创意。
素材排重分两层:
material_id 排除。crowd_package + material_id 只进入当前审批表一次。该规则不写入历史排重库,进程结束即失效。落地页视频排重按素材来源拆池:
crowd_package + landing_video_id 默认最多使用 1 次。crowd_package + landing_video_id 默认最多使用 1 次。creative_material_usage 和 creative_creation_task,只按同人群包最近 7 天已提交腾讯、已执行或已有明确投放结果的 landing_video_id 统计使用次数。prepared 记录不参与跨轮排重;端到端中断重跑时会优先作为可恢复缓存复用,避免重复选视频和重复生成 AI 图。landing_video_id 仍保留限频保护,默认最多 1 次。可通过环境变量调整同广告落地页视频本轮限频:
MAX_SAME_LANDING_PER_AD_IN_RUN=1
CREATIVE_LANDING_DEDUPE_LOOKBACK_DAYS=7
PIAOQUANTV_VIDEO_MAX_PAGES=3
热门兜底由以下环境变量控制:
PIAOQUANTV_HOT_FALLBACK_ENABLED=true
PIAOQUANTV_HOT_FALLBACK_SOURCE=hot
生产默认开启。
主池不足和主池无法产出可用创意是两个不同口径:
生产投放以“最终有效创意数达到目标”为准。
除数据库、飞书、腾讯、ODPS 等基础密钥外,生产自动投放建议显式配置:
PIAOQUANTV_TOKEN=...
PIAOQUANTV_VIDEO_TYPE=5
PIAOQUANTV_VIDEO_SOURCE=prior
PIAOQUANTV_HOT_FALLBACK_ENABLED=true
PIAOQUANTV_HOT_FALLBACK_SOURCE=hot
LANDING_EXCLUDED_CATEGORIES=早中晚好,祝福音乐,历史名人
VIDEO_RISK_MAX_ALLOWED_LEVEL=5
VIDEO_RECALL_CROWD_PACKAGE_MAP={"cell*year*商业":"wx*商业","回流330以上人群":"R_330+"}
MAX_SAME_LANDING_PER_AD_IN_RUN=1
PIAOQUANTV_VIDEO_MAX_PAGES=3
CREATIVE_LANDING_DEDUPE_LOOKBACK_DAYS=7
TENCENT_AUDIENCE_SOURCE_ACCOUNT_ID=55615440
TENCENT_AUDIENCE_GRANT_BUSINESS_ID=12312
OPENROUTER_API_KEY=...
OPENROUTER_TEXT_MODEL=google/gemini-3-flash-preview
OPENROUTER_IMAGE_MODEL=google/gemini-3.1-flash-image
AI_IMAGE_PATTERN_TOP_K=1
ALIYUN_OSS_ENDPOINT=oss-xxx.aliyuncs.com
ALIYUN_OSS_BUCKET=art-pubbucket
ALIYUN_OSS_ACCESS_KEY_ID=...
ALIYUN_OSS_ACCESS_KEY_SECRET=...
AI_IMAGE_OSS_PREFIX=auto_put_tencent/image
AI_IMAGE_PUBLIC_BASE_URL=https://rescdn.yishihui.com
AI_IMAGE_TARGET_WIDTH=1280
AI_IMAGE_TARGET_HEIGHT=720
OSS key 已迁移到本工程环境变量。生产 Docker 也应显式注入这些变量,不依赖外层参考工程。
每日主流程默认会扫描全部启用账户。应急验证或定向补量时,可以用运行时环境变量临时收窄范围,不改飞书、不改数据库配置:
CREATION_SKIP_PHASE0=1
CREATION_ONLY_CROWD_PACKAGES=回流330以上人群
含义:
CREATION_SKIP_PHASE0=1: 本次跳过广告创建,只做创意准备、审批和提交。CREATION_ONLY_CROWD_PACKAGES: 本次只处理指定人群包的账户;多个值用英文逗号分隔。CREATION_ONLY_ACCOUNT_IDS: 可选,本次只处理指定账户 ID;多个值用英文逗号分隔。这些开关只影响当次进程。生产定时任务不配置这些变量时,仍按默认全量启用账户运行。
创意审批表包含独立的 素材预览 和 素材链接 两列:素材预览 用于图片/查看入口,素材链接 保留原始素材 URL 的 HYPERLINK 公式。当前 决策 列为 AB,审批轮询也读取 AB 列。
若需要把素材封面作为缩略图嵌入 xlsx 后再上传飞书在线表格,可临时开启:
CREATION_APPROVAL_EMBED_IMAGES=1
飞书导入若不保留 xlsx 内嵌图片,审批表仍保留链接兜底;后续可改用飞书 Sheets 写图片 API。
R330 账户如果源账户无法解析到 ONLINE/SUCCESS 人群包,Phase 0 会跳过该账户。泛人群 主池可能返回 0,需要依赖 source=hot 兜底。xcx/save 生成落地计划;端到端测试中断不会自动清理已生成的落地计划。上线前至少确认:
是否自动化执行 只对目标账户开启account_whitelist 启用execute_creation_once.py 能生成飞书审批表