diff --git a/apps/worker/worker_app/tasks/viral_video.py b/apps/worker/worker_app/tasks/viral_video.py index ffc75cff2..678c3b8d0 100644 --- a/apps/worker/worker_app/tasks/viral_video.py +++ b/apps/worker/worker_app/tasks/viral_video.py @@ -422,25 +422,34 @@ def _analyze_single_image( _pose = _pa.get("pose", "无法判断") or "无法判断" _expr = _pa.get("expression", "无法判断") or "无法判断" _count = xp.attr_int(_pa.get("count"), 1) + # #2185: VLM有时对外貌属性输出"无法判断",用通用兜底值确保portrait_prompt始终有完整外貌描述 + if _hair == "无法判断": + _hair = "自然发型" + if _skin == "无法判断": + _skin = "自然" + if _face == "无法判断": + _face = "标准" + if _outfit == "无法判断": + _outfit = "日常服装" _parts = [] if _gender != "无法判断": _g = _gender + ("性" if not _gender.endswith("性") else "") _parts.append(_g) + else: + _parts.append("成年人") if _age != "无法判断": _parts.append(_age) _parts.append("人物") - if _hair != "无法判断": - _parts.append(_hair) - if _skin != "无法判断": - _parts.append(f"{_skin}肤色") - if _face != "无法判断": - _parts.append(f"{_face}脸型") - if _outfit != "无法判断": - _parts.append(f"身着{_outfit}") + _parts.append(_hair) + _parts.append(f"{_skin}肤色") + _parts.append(f"{_face}脸型") + _parts.append(f"身着{_outfit}") if _pose != "无法判断": _parts.append(f"姿态{_pose}") if _expr != "无法判断": _parts.append(f"表情{_expr}") + else: + _parts.append("表情自然") portrait_prompt = ",".join(_parts) logger.info( "[爆款视频] 图片 #%d 解析: count=%d gender=%s age=%s hair=%s skin=%s face=%s outfit=%s pose=%s expr=%s → %s", diff --git a/packages/application/viral_video/prompts.py b/packages/application/viral_video/prompts.py index 9307abe17..4e41733a9 100644 --- a/packages/application/viral_video/prompts.py +++ b/packages/application/viral_video/prompts.py @@ -57,7 +57,15 @@ _IMAGE_ANALYSIS_SYSTEM = f"""你是电商商品视觉分析师,负责从商品 用一个标签,属性 resolution、lighting、composition、blur 描述画质。 下面每个卖点用一个 标签。 -看不到或无法判断的内容,属性值填“无法判断”,布尔值填 false,不要留空标签。""" +【人物属性硬性要求(has_person=true时必须遵守)】 +hair/skin_tone/face_shape/outfit四项绝对禁止填“无法判断”,必须基于图片可见特征给出具体中文描述: +- hair:必须描述发型+发色,如“黑色齐肩直发”“棕色微卷中长发”“深棕色短发” +- skin_tone:必须描述肤色,如“暖调自然肤色”“白皙肤色”“小麦色” +- face_shape:必须描述脸型,如“鹅蛋脸”“圆脸”“瓜子脸”“方脸” +- outfit:必须描述可见穿着,如“米色翻领衬衫”“白色T恤”“黑色连衣裙” +即使局部被遮挡也要根据可见部分合理推断;确实看不清时按最接近的直观印象描述。 + +其他非人物属性看不到或无法判断时填“无法判断”,布尔值填false,不要留空标签。""" _IMAGE_ANALYSIS_USER = """请分析以下商品图片,共 {image_count} 张。 所属行业:{industry}