feat(接口4): 新增轮廓类型 contour_type + 提示词防漏键加固

- 豆包提示词追加「轮廓类型(轮廓偏曲/轮廓适中/轮廓偏直)」,_KEY_MAP 映射为 contour_type
- 提示词显式要求包含全部键:实测豆包随机漏键(面部年龄历史 ~26% 缺失),加固后 9/9 次全字段返回
- 同步接口文档/测试页至 7 字段;测试页顺带移除硬编码内部密码
This commit is contained in:
xsl
2026-09-07 00:35:24 +08:00
parent d242e0fc48
commit ebcaff1295
4 changed files with 21 additions and 15 deletions
+12 -7
View File
@@ -1,6 +1,6 @@
"""接口4:用户面部特征分析。
- 眉形 / 面部年龄 / 动静类型 / 性别 / 基因风格:火山方舟豆包视觉模型
- 眉形 / 面部年龄 / 动静类型 / 性别 / 基因风格 / 轮廓类型:火山方舟豆包视觉模型
- face_shape(脸型):本机 MediaPipe 分类(face/face_shape_classifier.py)覆盖,
不用豆包结果
@@ -26,15 +26,20 @@ _KEY_MAP = {
"动静类型": "dynamic_static_type",
"性别": "gender",
"基因风格": "gene_style",
"轮廓类型": "contour_type",
}
# 豆包只问 5 项 + 是否有人脸;脸型由本地分类器给出
# 豆包只问 6 项 + 是否有人脸;脸型由本地分类器给出。
# 「必须包含全部键」:实测豆包会随机漏键(尤其面部年龄,历史 ~26% 缺失),
# 显式要求可显著降低漏键率。
_PROMPT = (
"分析一下图片告诉我以下特征,只要答案,格式为json字符串,"
"必须包含以下全部键且每键都要有值、缺一不可:"
"图片是否有人脸(有人/没人) "
"眉形 "
"面部年龄(给出区间年龄) 动静类型(静态型/动态型) 性别(男/女) "
"基因风格(戏剧型/睿智型/自然型/古典型/优雅型/浪漫型/前卫型/少女型/少年型)"
"面部年龄(给出区间年龄,如18-25岁) 动静类型(静态型/动态型) 性别(男/女) "
"基因风格(戏剧型/睿智型/自然型/古典型/优雅型/浪漫型/前卫型/少女型/少年型) "
"轮廓类型(轮廓偏曲/轮廓适中/轮廓偏直)"
)
_client = None # 缓存的 Ark client(api_key 变更时自动重建)
@@ -137,10 +142,10 @@ def _local_face_shape(image_bytes: bytes = None, image_url: str = None) -> str:
def analyze_features(image_bytes: bytes = None, image_url: str = None):
"""豆包分析 5 项特征 + 本机 MediaPipe 覆盖 face_shape。
"""豆包分析 6 项特征 + 本机 MediaPipe 覆盖 face_shape。
Returns: dict —— 6 个英文字段(face_shape/eyebrow_shape/facial_age/
dynamic_static_type/gender/gene_style);**无人脸返回 None**(调用方据此判 1001)。
Returns: dict —— 7 个英文字段(face_shape/eyebrow_shape/facial_age/
dynamic_static_type/gender/gene_style/contour_type);**无人脸返回 None**(调用方据此判 1001)。
"""
url = _image_to_url(image_bytes, image_url)
resp = get_client().chat.completions.create(