# 两相知生成逻辑手册

这份文档给产品、算法和后端使用，目标是让“古籍风格合拍签”稳定生成。新版流程先做双人古法面相术语解析，再询问关系与卡点，最后合参给出矛盾成因和建议。全程避开人像评分、身份识别、贬低表达和真实人格定论。

## 1. 输入数据

```json
{
  "consent_confirmed": true,
  "photo_policy": {
    "single_use": true,
    "no_identity_recognition": true,
    "no_face_database_match": true,
    "no_long_term_storage": true
  },
  "visual_summary": {
    "image_quality": "清晰",
    "lighting": "柔和",
    "face_count_valid": true,
    "style_tags": ["神态克制", "节奏一快一慢", "表达温度偏低"]
  },
  "relation_type": "情侣",
  "scene_type": "冷战"
}
```

`visual_summary` 只能使用非身份化摘要，不要存可还原身份的人脸特征向量。

## 2. 双相解析 JSON

先输出两个人的古法术语解析，不要直接进入关系结论。

```json
{
  "face_analysis_a": {
    "label": "甲相",
    "summary": "眉势清扬，鼻准有收",
    "terms": [
      {
        "part": "眉势",
        "classical_term": "清扬入鬓",
        "reading": "眉形顺生，眉尾略舒；象意为做事先立章法，情绪起时仍重体面。"
      },
      {
        "part": "鼻峰",
        "classical_term": "山根承起，准头有容",
        "reading": "遇事多先权衡轻重，不喜仓促表态。"
      }
    ]
  },
  "face_analysis_b": {
    "label": "乙相",
    "summary": "目神含光，颐线柔应",
    "terms": [
      {
        "part": "目神",
        "classical_term": "神藏而不露",
        "reading": "敏于感受，需先得回应再能安定。"
      },
      {
        "part": "鼻翼",
        "classical_term": "兰台廷尉开合有度",
        "reading": "在关系里重安全感，也看重实际行动。"
      }
    ]
  }
}
```

## 2.1 原型规则引擎

当前静态原型已接入浏览器本地面部点阵模型。照片在浏览器本地完成结构定位，优先读取面部点阵，再把结构化结果映射到古法术语；只有当模型网络不可用时，才降级为前端画布区域估算。

等待判断阶段展示“双相取点台”：两张自拍图上叠加面部点阵、五官连线、三庭参考线、水墨扫描线和候点状态。中央再放置“AI 复核镜”，让甲相和乙相带关键点交替放大显示，配合扫线和轻微缩放动画；即使模型提前完成，也至少停留约 9 秒，完成多轮复核。分析页展示“实测入相”，把测量分值与古法术语并列，方便用户看见“测量 -> 术语 -> 关系象意”的链路。

## 2.2 FBTI 面相人格

传播层不只输出古法术语，还要把每个人归入一个温和、可分享的“FBTI 面相人格”。类型只表示照片中的面相象意，不判断人格好坏。

当前原型按用户提供文本落地 14 个完整人格条目，保留 13、14 作为后续扩展位：

- 腹黑太傅、咸鱼丞相、戏精军师、腹黑御史。
- 卷王将军、吃瓜枭雄、社牛镖师、社恐刺客。
- 摸鱼翰林、养生方丈、开挂状元、吃货员外。
- 锦鲤善人、扎心判官。

第二卷顶部显示人格名、匹配人物和一句话；“实测入相”数值区保持不变，数值区下方统一展示六类：眉势、目光、鼻梁、嘴巴、下庭、五官走势，并直接使用匹配人格文本中的特点。

类型关系不使用相克关系，统一使用温和关系名：

- 同频递茶局：节奏相近，默契强，但要避免默认对方懂。
- 开合互译局：一个外放、一个含蓄，需要翻译表达节奏。
- 快慢搭台局：一个反应快、一个落点稳，适合分步沟通。
- 眉目互照局：一个偏章法、一个偏回应，先安情绪再谈规则。
- 山泽相承局：差异不大，重点是把暗示改成具体请求。

快速面相合参只用 FBTI 面相人格、本地规则和关系类型，不调用大模型。用户选择回答问诊题后，才把面相摘要、类型关系、问题与选择题回答一并发给合参代理。

关键点取象：

- 三庭：额、眉、鼻基、颐部关键点，用于推“形局有序”。
- brow：眉尾、眉弓、眉眼距，用于推“眉势、眉骨、眉宇”。
- eye：眼裂开合、内外眦距离、双目倾势，用于推“目神、目势、神气”。
- nose：山根、鼻准、鼻翼宽度与中轴，用于推“山根、年寿、鼻准”。
- wing：鼻翼左右开合，用于推“兰台、廷尉、收放”。
- mouth：口角平衡、唇部开合，用于推“口势、唇气、言路”。
- jaw：下颌线、颐部居中、下停收束，用于推“颐颌、地阁、承托”。

画布辅助：

- brow / eye / nose / wing / mouth / jaw / overall 区域仍会读取明暗、反差、边缘与对称度。
- 气色只作为照片当下光影氛围，不用于健康、命运或人格判断。

信号：

- brightness：区域明度。
- contrast：区域明暗反差。
- edge：区域边缘密度，近似判断走势与轮廓感。
- symmetry：左右明度相近程度。
- threeBalance：三庭比例的平衡度。
- tailLift / archHeight / browEyeGap：眉尾走向、眉弓起伏、眉眼留气。
- openness / eyeGapRatio / tiltBalance：眼裂开合、眼距比例、双目倾势平衡。
- bridgeRatio / bridgeBalance / widthRatio：鼻梁承接、鼻线中正、鼻翼开合。
- cornerBalance / mouthOpenness：口角平衡、唇部开合。
- taper / chinCenter：下颌收束、地阁居中。
- centerLift：鼻区中心明度相对两侧的差值，辅助判断鼻峰承起感。

示例规则：

```js
if (brow.tailLift > 0.014 && brow.browEyeGap > 0.08) {
  return "眉尾舒扬，天仓气开";
}

if (eye.openness > 0.245 && eye.eyeGapRatio > 0.24) {
  return "目宫开阔，神采外应";
}

if (nose.bridgeRatio > 1.28 && nose.bridgeBalance > 0.66) {
  return "山根有承，年寿成线";
}

if (wing.wingSymmetry > 0.78 && wing.widthRatio > 0.22) {
  return "左右辅鼻，收放相齐";
}

if (jaw.chinCenter > 0.8 && jaw.taper > 0.58) {
  return "地阁正承，下停有归";
}
```

无论技术实现如何，最终只保存非身份化摘要；不保存原始照片、人脸模板或可还原身份的特征向量。

## 3. 中间标签

将照片和情境归纳成关系语言：

```json
{
  "rhythm": "一快一慢",
  "expression_symbol": "一方外放，一方内收",
  "stability_symbol": "稳定互补",
  "conflict_style_symbol": "追问与回避错位",
  "relation_need_symbol": "被回应",
  "repair_strategy": "先安情绪，再谈结论"
}
```

## 4. 输出 JSON

```json
{
  "sign_name": "山泽互照签",
  "lead": "一个重稳定，一个重回应。不是不合，是节奏没有对齐。",
  "combined_reading": "甲相眉势清扬、鼻准有收，象在章法与承诺；乙相目神含光、颐线柔应，象在感受与回应。",
  "conflict_reason": "此类矛盾常起于节奏错位：重定者先想把事理捋顺，重应者先想确认自己被看见。",
  "advice": "先安神，再论事。甲方宜少用沉默作缓冲，给一句明确回应；乙方宜少用连问试探，先说真实需要。",
  "icebreaker": "我不是想争输赢，我只是想知道，我们可不可以重新站到同一边。",
  "disclaimer": "结果为古籍文化风格的娱乐化表达，不构成关系、心理、医疗或人生决策建议。"
}
```

## 5. 双相解析提示词模板

```text
你是“两相知”的古法面相术语解析器。请根据非身份化视觉摘要，为甲相和乙相分别生成古籍风格的相貌象意描述。

要求：
- 使用专业相法术语：眉势、目神、山根、鼻峰、鼻准、兰台、廷尉、颐颌、地阁、下停、气色。
- 只描述形态与象意，不做颜值评价，不做人格定论，不做命运判断。
- 不使用任何贬低词，不说面相好坏，不说克、刑、败、薄情、恶、奸等伤害性词。
- 每个人输出 3 到 5 条术语分析，每条包含部位、古法术语、温和象意。
- 用“象意为”“倾向于”“在关系表达中可能表现为”这类非决定性表达。
```

## 5.1 等待阶段文案

用于“观象成文”的动态等待页：

- 先定三庭，以观形局。
- 次察眉势，辨其舒敛。
- 复观目神，取其聚散。
- 再审鼻峰兰台，察其收放。
- 终参地阁气色，合双相而成文。

## 6. 合参生成提示词模板

```text
你是“两相知”的关系报告生成器。你的风格参考中国古籍相法与品鉴文字的意象，但必须转译成现代关系沟通语言。

输入：
- 甲相解析：{{face_analysis_a}}
- 乙相解析：{{face_analysis_b}}
- 关系类型：{{relation_type}}
- 用户自述问题：{{problem_text}}
- 提问者需求：{{need_text}}
- 问诊回答：{{consultation_answers}}

任务：
合参两个人的相学象意、关系类型、用户自述问题和问诊回答，生成一份古籍风格的双人关系建议。结果要温和、可分享、可执行，不做命运判断，不做人格好坏判断，不做颜值评分，不建议分手、断交或排斥某人。

必须输出：
1. signName：四到六字意象名，以“签”结尾。
2. leadText：一句核心判断，只描述节奏和沟通方式。
3. combinedText：双相合参，引用两人的术语象意。
4. reasonText：解释为什么会出现当前矛盾，不责备任何一方。
5. adviceText：可执行建议。
6. iceText：一句可直接发送给对方的破冰话。
7. basisText：说明参考了哪些面相术语、问诊回答与自述问题。

禁止：
- 你们不适合、必须分手、此人克你、此人不可信。
- 忠诚、出轨、疾病、寿命、财运、子女、婚育结论。
- 面相不好、命不好、旺夫、克夫等歧视性表达。
- 基于照片判断身份、年龄、民族、健康或社会属性。
- 对明星/公众人物关系，不鼓励私联、跟踪、骚扰或侵犯隐私。
```

## 7. 古籍风格命名库

- 山泽互照签：稳定与回应。
- 水木相生签：滋养与成长。
- 风火相激签：吸引与冲撞。
- 金水相照签：规则与弹性。
- 云月同明签：理解与留白。
- 松泉相守签：长期陪伴。
- 星河隔岸签：有牵引，但距离感强。
- 竹石相持签：边界硬，信任慢。
- 镜湖知止签：投射与边界。
- 台阶递声签：上下沟通与预期校准。

## 8. 关系类型语气

- 情侣：更重情绪回应和安全感。
- 上下级：更重预期、授权、反馈强度和汇报节奏。
- 伙伴：更重目标一致和协作节奏。
- 明星：更重投射边界、情绪安放、理性支持和现实距离。
- 暧昧：更重边界、确认和减少试探。
- 同事（同门）：更重边界、角色、功劳归属和长期共处成本。

## 9. 安全改写规则

把高风险表达改写成低风险表达：

| 不要说 | 改成 |
| --- | --- |
| 你们不合适 | 你们目前的节奏需要重新对齐 |
| 对方不可信 | 这段关系需要更清楚的边界和确认 |
| 他/她克你 | 你们在压力下容易互相触发 |
| 必须分开 | 先降低消耗，再决定下一步 |
| 面相不好 | 当前照片氛围偏紧，需要更多放松的沟通 |

## 10. 后端接口草案

`POST /api/face-reading`

请求：

```json
{
  "photo_a_token": "upload-token-a",
  "photo_b_token": "upload-token-b",
  "consent_confirmed": true
}
```

响应：

```json
{
  "face_analysis_a": {},
  "face_analysis_b": {}
}
```

`POST /api/relation-sign`

请求：

```json
{
  "relation_type": "情侣",
  "scene_type": "冷战",
  "face_analysis_a": {},
  "face_analysis_b": {},
  "consent_confirmed": true
}
```

响应：

```json
{
  "report_id": "rx_20260516_001",
  "result": {
    "sign_name": "山泽互照签",
    "score": 82,
    "tags": ["互补型", "慢热复原", "先安情绪"],
    "lead": "一个重稳定，一个重回应。不是不合，是节奏没有对齐。",
    "sync_point": "你们都愿意为重要关系花力气，只是表达爱的顺序不同。",
    "friction_point": "当压力变大时，一方会收回去想清楚，另一方会追问确认。",
    "icebreaker": "我不是想争输赢，我只是想知道，我们可不可以重新站到同一边。",
    "three_day_task": "连续三天各说一件具体感谢，不解释、不翻旧账。",
    "disclaimer": "结果为古籍文化风格的娱乐化表达，不构成关系、心理、医疗或人生决策建议。"
  }
}
```

## 11. 审核与风控

- 上传前展示授权确认。
- 先给双相解析，再询问是否进入关系问诊，然后进入关系选择与自由卡点输入。
- 检测多人照片、未成年人风险、遮挡严重时阻断生成。
- 报告生成后跑一遍安全词过滤。
- 命中禁止表达时自动重写，不直接返回。
- 服务端默认删除原图，仅保留非身份化统计日志。

## 12. 第一版验收标准

- 用户 30 秒内完成一次生成。
- 用户能先看到两个人的面相术语解析，再进入关系与卡点。
- 报告没有攻击性、歧视性、恐吓性表达。
- 分享卡能被一眼看懂。
- 覆盖 6 种固定关系类型：情侣、上下级、伙伴、明星、暧昧、同事（同门）。
- 每种关系类型具备 5-7 个选择题问诊问题。
- 同一输入可稳定生成同类结果，但“换一签”能给出不同表达。
