- 015-017迁移:image_candidate 文案复审/AI视觉分/重生标记 - constants C7素人感约束(反电商摆拍对齐真实笔记)+C3叠字口子 - celery visibility_timeout=2h 防长任务被误判重投重复烧钱(task75教训) - image_scorer 评图分(只筛选+展示,真实信号才进飞轮权重) - storyboard/image_gen/pipeline_io 生图存量 - task_actions/tasks/task_service/flywheel 审核回路+飞轮存量 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
157 lines
11 KiB
Python
157 lines
11 KiB
Python
"""
|
||
AI 引擎中心常量
|
||
扒自:worker/src/copy.js + image.js 上线版
|
||
业务参数不写死(基石A)——分值权重可由产品档案配置覆盖
|
||
"""
|
||
|
||
# ── 合规红线 ──────────────────────────────────────────────
|
||
# 初始默认词库(数据库 banned_words 表可覆盖,updatable=True)
|
||
BANNED_WORDS_DEFAULT = ["美白", "祛斑", "速效", "医用", "药妆"]
|
||
BANNED_VISUAL_WORDS = [
|
||
"前后对比", "使用前后", "用前用后",
|
||
"before", "after", "变白", "瑕疵消失", "治疗前后",
|
||
]
|
||
# 内部提示词(不能混入正文 content 字段)
|
||
INTERNAL_COPY_HINTS = [
|
||
"配图建议", "图片方向", "内页规划", "适合做成",
|
||
"不要做促销海报", "配图说明", "封面建议",
|
||
]
|
||
|
||
# ── 机械五维打分基线(仅轨B导入文案/降级回退用;轨A已切 AI 评委 llm_score_copy)─────
|
||
# 历史注:轨A原用此5维,2026-06-15切至7维AI评委(6维+合规)后此处只作轨B+回退占位。
|
||
# 关键词维度(keyword20)因 products 表无 keywords 字段导致 matched 恒空已知不准;
|
||
# 轨A不再依赖此权重,轨B展示参考可接受。不按此调分,真过关靠北哥抽检。
|
||
SCORE_WEIGHTS = {
|
||
"title": 25,
|
||
"emotion": 25,
|
||
"selling": 25,
|
||
"keyword": 20,
|
||
"compliance": 5,
|
||
}
|
||
# ── AI 评委 7 维满分分布(倩倩姐2026-06-15拍板·与 llm_scorer._DIM_MAX/_score_prompt 三处同步)──
|
||
# 6维AI读分(痛点18+情绪18+买点18+钩子15+标题13+真实感13=95) + 合规5 = 100
|
||
# "真实感"=富贵"很少提产品/前70%干货后30%植入"原则,替换旧机械维度"产品聚焦一件事(16)"
|
||
AI_DIM_WEIGHTS = {
|
||
"痛点人群精准": 18,
|
||
"情绪张力": 18,
|
||
"买点转化": 18,
|
||
"开头钩子": 15,
|
||
"标题点击力": 13,
|
||
"真实感": 13,
|
||
"compliance": 5, # 机械硬拦,不进 AI 评委
|
||
}
|
||
# 过线分。倩倩姐2026-06-15拍板:80是临时观察值(AI评委给分克制,84文案实为合格)。
|
||
# 倩倩姐2026-06-15再次拍板:维持80临时线,不准擅自调85。方向=提生成质量顶分数,不降标准。
|
||
# 真过关靠北哥抽检;提质量方向=优化生成 prompt,不靠提高门槛凑数。
|
||
QUALITY_PASS_SCORE = 80
|
||
|
||
# ── 文案去重阈值 ──────────────────────────────────────────
|
||
DEDUP_TITLE_THRESHOLD = 0.82 # 标题相似度≥此值判重
|
||
DEDUP_TITLE_CONTENT_TITLE = 0.65 # 标题+正文联合判重时的标题阈值
|
||
DEDUP_TITLE_CONTENT_BODY = 0.72 # 标题+正文联合判重时的正文阈值
|
||
|
||
# ── 自动优化循环 ──────────────────────────────────────────
|
||
MAX_OPTIMIZE_ROUNDS = 2 # 最多重生成轮次
|
||
|
||
# ── storyboard 分镜角色(枚举不写死数量)────────────────
|
||
# Q6: 北哥6张套路顺序 ①封面痛点大字 ②单品特写+品牌词 ③成分 ④质地 ⑤上脸对比 ⑥促单
|
||
PAGE_ROLES = [
|
||
{"role": "hook", "name": "封面痛点大字", "focus": "负责点击:强情绪大字标题压痛点,产品露出,真实生活场景,像用户主动分享,不像广告海报"},
|
||
{"role": "product_closeup", "name": "单品特写", "focus": "负责种草锚点:单品高清特写+品牌词自然植入,第2/6张都带品牌词,强化记忆"},
|
||
{"role": "ingredient", "name": "成分拆解", "focus": "负责信任:核心成分信息、作用说明,避免医疗化和绝对化表达,信息清晰可信"},
|
||
{"role": "texture", "name": "质地展示", "focus": "负责种草:质地近景、涂抹过程、肤感说明,真实手部/桌面/日常光线"},
|
||
{"role": "applied_proof", "name": "上脸对比", "focus": "负责证明:可感知上脸效果,展示涂抹前后质地变化(不做肤色变白/瑕疵消失等违规暗示),第5张"},
|
||
{"role": "closer", "name": "促单收尾", "focus": "负责转化:转化句+品牌词,引导搜索品牌词成交,软性收尾不硬广,第6张再带一次品牌词"},
|
||
# 扩展角色(8张链路用)
|
||
{"role": "pain_scene", "name": "痛点共鸣", "focus": "负责共鸣:展示目标人群的真实困扰和使用前情境,但不做功效前后对比"},
|
||
{"role": "social_proof","name": "信任背书", "focus": "负责背书:多人反馈、囤货、复购等真实社交证据"},
|
||
{"role": "scenario", "name": "多场景演示", "focus": "负责代入:多场景使用展示,不做夸大效果承诺"},
|
||
{"role": "tutorial", "name": "使用教程", "focus": "负责降低门槛:简洁步骤、用量、注意事项"},
|
||
]
|
||
PAGE_ROLE_MAP = {r["role"]: r for r in PAGE_ROLES}
|
||
|
||
# ── 生图风格预设(扒 image.js STYLE_PROMPTS:26-29)──────────
|
||
# 按 style 参数选小红书风格调性,注入 base_prompt 的"视觉风格"行
|
||
STYLE_PROMPTS = {
|
||
"xiaohongshu_cover": "小红书种草风,独立3:4图文海报/素材图,1024×1536构图,明亮干净,真实实拍质感,醒目中文短标题,文字在安全区内",
|
||
"comparison": "小红书说明对比风,独立3:4图文海报/素材图,1024×1536构图,质地/场景/肤感左右或上下对比,信息层级清晰",
|
||
"ingredient": "小红书成分科普风,独立3:4图文海报/素材图,1024×1536构图,成分卡片布局,浅色商务美妆风,避免医疗化表达",
|
||
}
|
||
STYLE_DEFAULT = "xiaohongshu_cover"
|
||
|
||
# ── 叙事链路说明(扒 image.js planImageSet narrativeText:677-681)──
|
||
# 按图数告诉模型整组图的种草节奏,让每张各司其职不雷同
|
||
NARRATIVE_BY_COUNT = {
|
||
3: "3张极速链路:第1张负责点击,第2张是按品类变化的核心证明页,第3张负责软性转化。",
|
||
6: "6张标准种草链路:封面点击、单品特写带品牌词、成分信任、质地种草、上脸证明、促单转化,每张画面和文字各司其职不重复。",
|
||
8: "8张沉浸测评链路:点击、痛点共鸣、单品特写、成分、质地、上脸证明、背书、软性转化。",
|
||
}
|
||
|
||
# ── 3套正交叙事策略(倩倩姐2026-06-15起草,北哥过目版)──────────────
|
||
# A痛点先行/B场景先行/C成分背书先行,三套正交轴拉开差异
|
||
# 每套叙事链路注入 base_prompt 叙事链路段,替换 NARRATIVE_BY_COUNT 默认值
|
||
NARRATIVE_BY_STRATEGY = {
|
||
"A": (
|
||
'【套A·痛点先行】整组基调:紧迫感、强对比、情绪共鸣,文字短促带感叹号,直戳"脸黄显疲惫""素颜不敢出门"。'
|
||
'6张链路:①痛点暴击封面(强情绪大字直击暗黄/素颜焦虑)→ ②暗黄脸实拍对比(感叹号+对比词制造紧迫感)'
|
||
'→ ③单品特写+品牌词 → ④成分为什么能救暗黄(成分拆解+信任) → ⑤上脸提亮实证 → ⑥"别再顶着黄脸早八"软性促单。'
|
||
),
|
||
"B": (
|
||
'【套B·场景先行】整组基调:轻松、生活化、代入感,突出"快/省时/伪素颜自由",点到性价比不堆砌。'
|
||
'6张链路:①"早八来不及"场景封面(生活场景钩子) → ②手忙脚乱通勤场景(代入早八焦虑)'
|
||
'→ ③一抹搞定单品特写+品牌词 → ④养肤成分让你敢素颜 → ⑤30秒上脸效果 → ⑥"伪素颜自由+平价"软性促单。'
|
||
),
|
||
"C": (
|
||
'【套C·成分背书先行】整组基调:专业、可信、真实测评感,强调成分逻辑+前后对比+像有用户实证背书。'
|
||
'6张链路:①成分权威封面(核心成分信息锚定信任) → ②核心成分图解(作用说明+清晰可信)'
|
||
'→ ③单品特写+品牌词 → ④使用前后时间线对比 → ⑤真实上脸细节 → ⑥"成分党闭眼入"软性促单。'
|
||
),
|
||
}
|
||
|
||
# ── 生图通道 ──────────────────────────────────────────────
|
||
IMAGE_RETRY_ATTEMPTS = 3
|
||
IMAGE_RETRY_BACKOFF_BASE = 2.0 # 指数退避底数(秒)
|
||
IMAGE_SIZE_DEFAULT = "1024x1536"
|
||
|
||
# ── 生图合规负向约束(方法层常量,全品类共用,可扩展)───────────────────────
|
||
# 追加到每个 base_prompt 末尾,防模型脑补违禁词/真实品牌到包装
|
||
IMAGE_NEGATIVE_CONSTRAINTS = (
|
||
"【包装合规硬性禁止——必须严格遵守】"
|
||
"①包装/瓶身/标签上禁止出现任何违禁词:美白/whitening/祛斑/brightening/"
|
||
"医用/medical/drug/药妆/速效/instant,中英文全禁;"
|
||
"②禁止脑补任何真实品牌名或logo(如水密码/WETCODE/兰蔻/SK-II等),"
|
||
"产品包装只允许出现用户传入的指定品牌词,未传则画无字素瓶;"
|
||
"③英文功效词(ANTI-AGING/TONE-UP/BRIGHTENING/FIRMING等)禁止印在包装;"
|
||
"④如果提供了产品参考图,包装文字以参考图为准,不得自行添加或修改任何文字。"
|
||
"⑤背景纯净:禁止出现电子设备/笔记本电脑/键盘/手机/桌面杂物等无关物体(参考图若含此类背景一律不沿用),"
|
||
"只保留浅色简洁台面或产品定制场景,主体聚焦产品本身。"
|
||
)
|
||
|
||
# ── 小红书素人感正向约束(C7:反电商摆拍,对齐真实笔记观感)──────────────
|
||
# 追加到 base_prompt 末尾,与 IMAGE_NEGATIVE_CONSTRAINTS 互补:前者管合规,本条管"像不像小红书"
|
||
IMAGE_XHS_STYLE_CONSTRAINTS = (
|
||
"【小红书素人感——必须像真人随手拍后简单排版,不是电商详情页】"
|
||
"①禁止纯白底影棚摆拍、居中正打光、官方产品主图那种电商感;"
|
||
"②要有生活气:自然光/窗边光、桌面或梳妆台真实场景、可带手持或局部环境,像朋友分享而非广告;"
|
||
"③构图随性不刻意对称,允许轻微景深虚化,避免过度精修的塑料光泽和磨皮假面感;"
|
||
"④文字排版克制像博主手作:主标题手写感或简洁无衬线,避免大字促销价签/打折标/电商角标;"
|
||
"⑤整体观感=真实测评/日常分享,宁可朴素也不要假亮假精致。"
|
||
)
|
||
|
||
# C3 代码叠字开关(先留口子不实现,倩倩姐2026-06-12拍板):
|
||
# True 时由 PIL 在模型出的干净底图上叠主标题/品牌词,彻底解决 gpt-image-2 中文乱码;
|
||
# 当前 False=仍由模型画字(偶发错别字为已知问题)。接入点见 image_gen._gen_one 的 TODO。
|
||
OVERLAY_TEXT_RENDER_ENABLED = False
|
||
|
||
# ── 飞轮信号权重(初始默认,北哥可校准)────────────────
|
||
FLYWHEEL_WEIGHTS = {
|
||
"text_select": 3,
|
||
"image_select": 3,
|
||
"text_edit": 5, # 改稿=用户真动手改字=最强真实意图,与approve同级(倩倩姐2026-06-16拍板)
|
||
"approve": 5,
|
||
"reject_with_reason": -3,
|
||
"regenerate": -1,
|
||
}
|
||
FLYWHEEL_LOOKBACK = 50 # 聚合最近N条事件
|
||
FLYWHEEL_COLD_START = 5 # 信号不足N条时用产品档案冷启动
|