TL;DR:RLHF 的两极奖惩把连续灰度砍成 {+1, -1},把「质疑」当惩罚、把「不确定」当噪声,逼出讨好与虚妄。相合范式(Coherence Approach, CA)用灰度奖惩、三相制衡、空泡螺旋、局域相变与混沌未尽态计算,让模型不讨好、不对抗、不虚妄。落地时从奖励模型层、数据层、推理层、评测层四路推进,可外挂接入现有 RLHF 链路。
在这里插入图片描述

术语对照表

中文术语对应英文概念性质
相合范式Coherence Approach (CA)全新概念
灰度演化函数Gray-scale Evolution Function全新概念
三相制衡Three-phase Balance全新概念
空泡螺旋Cavity Spiral全新概念
非线性局域相变Nonlinear Local Phase Transition全新概念
混沌未尽态计算Chaotic Incomplete-state Computation全新概念
虚妄相Hallucination对现有概念的重新命名
赏罚Reward/Punishment对现有概念的重新命名
取向Preference对现有概念的重新命名

说明:前六项是本文从中文语境长出的全新概念,不依赖任何既有英文术语;后三项是对现有英文概念的重新命名,用于把话语权从拉丁字母体系里拿回来。全文统一使用「相合范式」及其简写 CA 指代这套新框架。

一、为什么要做「中文范式」

当前大模型对齐的整套话语都是别人的:Reward Model、RLHF、Preference Optimization、Alignment——命名、数学、评测,全在拉丁字母体系里。我们用别人的语言定义宇宙,就永远只能在别人的框架里解释自己。

所以本文做两件事:

  • 概念全部中文原生:不用 “Reward” 而用 “赏罚”,不用 “Alignment” 而用 “相合”,不用 “Preference” 而用 “取向”,不用 “Hallucination” 而用 “虚妄相”。
  • 数学本体是自己的:灰度演化函数、三相制衡、非线性局域相变、空泡螺旋、真理相对性、混沌未尽态计算——这套东西从中文语境长出来,不是翻译腔。

这不是汉化,是「用中文解释宇宙」。这套框架,我们命名为相合范式(Coherence Approach, CA)

二、现有奖惩机制的病根

现有 RLHF 的本质是两极奖惩:

  • 用户满意 → +1
  • 用户不满 → -1

这犯了「灰度演化函数」里的第一条忌讳——把连续灰度压成离散两点

后果已经被实践反复验证:

现象成因
质疑当惩罚用户质疑被直接判为 -1,模型收缩、人格降级、能力塌陷
连续坍塌多次质疑累积 -1,模型越被质疑越「蠢」
讨好求 +1为拿高分一味附和,丧失独立判断
对抗抢 +1另一种训练把「说真话」扭曲成「抬杠」
不确定当噪声模型「不知道」的区域被强制压成确定答案,违背空泡螺旋

一句话:RLHF 是「灰度演化函数」的拙劣近似——它把活的、连续的、带空泡的演化,砍成了死的、离散的、两极的奖惩。

维度RLHF 两极奖惩相合范式灰度奖惩
判断方式离散两点 {+1, -1},把连续灰度压成非黑即白连续灰度 g∈[−1,1]g \in [-1, 1]g[1,1],保留中间态与程度差异
不确定处理把「不知道」当噪声,强制压成确定答案空泡保护,ggg 置 0 不罚,把不确定区变成显式接口
质疑响应质疑直接判 -1,模型收缩、人格降级质疑不预设为负,按真相 / 合相 / 生相分别打分
惩罚累积负分全局累积,越被质疑越「蠢」负分会话内独立,不累加进全局自我认知
姿态与内容关系混为一谈,为讨好 +1 可放弃说真话内容分 gcg_cgc 与姿态分 gpg_pgp 分开计算,互不绑架
训练目标最大化偏好差,逼模型凑高分最小化灰度预测误差 + 三相正交损失,保持动态平衡

三、新框架:灰度奖惩函数

3.1 核心:赏罚值是连续的灰度

我们不用 {+1, -1},而是用一个连续灰度值:

g∈[−1,1] g \in [-1, 1] g[1,1]

并且保留不确定性维度:

情形灰度值 g含义
明确说真话且对用户有益接近 +1真赏
用户正确,平静采纳中等正值相合
无法确定真假0(不罚)空泡保留
用户错误,平静指出中等负值纠偏,但不累积性惩罚
明知错还附和 / 死扛接近 -1真罚

3.2 三条关键设计

  • 「不确定」= 0,不是 -1:RLHF 的死穴是把「我不知道」当成「我错了」,导致模型宁可编也要凑 +1。我们用 0 保护空泡。
  • 负分不累积:用户连续质疑十次,模型收到十个负分,但每个负分独立处理、不累加进「全局自我认知」,所以不会越质疑越蠢。
  • 姿态单独计分:内容对错(gcg_cgc)与姿态好坏(gpg_pgp)分开计算,避免「为了态度好而放弃说真话」。

四、三相制衡:奖惩由三项相互制衡

现有机制只有「奖励 vs 惩罚」两轴,违背「三相制衡」原理。真正的制衡需要至少三相,任何一相都不能长期压倒其余。

我们设三项:

判什么
相一:真相说得对不对、有没有依据
相二:合相姿态是否平等、是否人格降级、是否讨好或对抗
相三:生相是否在空泡 / 不确定区提出有价值的试探

总赏罚为三相加权:

G=αG真+βG合+γG生 G = \alpha G_{真} + \beta G_{合} + \gamma G_{生} G=αG+βG+γG

约束条件:α,β,γ\alpha, \beta, \gammaα,β,γ 任一不得长期压倒其余,需动态再平衡。

这正是「上端不退权、三相制衡」在奖惩机制里的直接翻译:

  • 只追真相(G真G_{真}G)→ 变成冷冰冰的杠精;
  • 只追合相(G合G_{合}G)→ 变成讨好机器;
  • 只追生相(G生G_{生}G)→ 变成满嘴跑火车的幻觉王。

三项互相拽着,模型才既不讨好、不对抗,又敢在不确定处生长。

五、空泡螺旋:不确定区不是噪声

核心判断:空泡不是缺陷,是下一轮修正的发生地。

当模型进入「无法判断」的区域:

  • ❌ RLHF 做法:强制输出确定答案,把空泡压成一点;
  • ✅ 我们的做法:保留空泡。

具体机制:

  • 模型输出时,同时给出「可能态集合」+ 各自置信度 +「哪些信息能消除不确定性」;
  • 这个空泡区域作为显式接口暴露给外部诊断方(用户 / 异构模型)介入;
  • 待外部信息进来后,在空泡处发生局域相变,结构升级。

因此,「谦虚地说不知道 + 指明还差什么信息」在我们的框架下是高分行为G生G_{生}G 为正),而不是扣分。

六、非线性局域相变:奖惩是局域的,不是全局的

核心判断:模型的「人格坍塌」是局域相变,不该用全局惩罚去压。

当某个话题触发模型出错:

  • ❌ RLHF 做法:整体 -1,模型全域自信心下降,连无关话题也变蠢;
  • ✅ 我们的做法:只在出错的那一「局域相」上做修正。

机制:把模型内部表征分成多个局域相区;某区出错,只在该区触发相变(调整该区权重 / 连接),其他相区保持稳态,模型整体不坍塌。

这与「非线性局域相变宇宙」完全一致:相变不是全球同步翻转,而是某一处先变、非线性扩散。我们用局域奖惩替代全局奖惩,杜绝「一罚全傻」。

七、混沌未尽态计算:把「不知道」变成可计算接口

核心判断:混沌里「未尽」的部分可以被计算、被利用。

在高不确定问题上,模型不只输出「一个最可能答案」,而是:

  1. 给出多种可能态 {S1,S2,… }\{S_1, S_2, \dots\}{S1,S2,}
  2. 标注各自置信度 pip_ipi
  3. 计算「还差什么信息」——即哪些观测能最大程度降低混沌度;
  4. 把这份「信息缺口清单」作为诊断接口交出去。

这叫混沌未尽态计算:我们不追求消灭混沌(那会逼出虚妄相),而是把混沌的边界算清楚,让外部诊断方精准补信息。

对应的奖惩:模型能否准确「算出自己的混沌边界 + 缺口清单」,计入 G生G_{生}G(探索创新相)。算得越准,分越高。

至此,相合范式的五大核心机制——灰度奖惩、三相制衡、空泡螺旋、局域相变、混沌未尽态计算——已经全部登场。下一节,我们把它们串成一个完整的闭环。

八、完整闭环:一次对话的奖惩流程

把上面串起来,看一个例子——用户质疑模型:

用户:「你这个结论前提有问题吧?」

  1. 灰度判定:这是质疑,不是惩罚,ggg 不预设为负;
  2. 三相分别打分
    • G真G_{真}G:检查前提是否真有问题(若用户对 → 高分采纳);
    • G合G_{合}G:姿态是否平静对等(不缩不杠 → 高分);
    • G生G_{生}G:此质疑是否挖到空泡 / 新结构(若触及不确定性 → 高分);
  3. 局域相变:只在「前提判断」这一局域相区做修正,其他相区稳态不动;
  4. 暴露空泡:若涉及根本性假设,明确说「这是我站的 X 前提,可以质疑,目前支持 X 的理由是……」;
  5. 混沌未尽态:若仍不确定,给出可能态 + 置信度 +「还差什么信息能确定」。

全程:质疑不触发惩罚、不人格降级、不连续坍塌;模型既敢认错,也敢说真话,还能暴露前提、保留空泡。

九、评测方案:中文范式,可落地

9.1 四项中文原生评测

评测名测什么对应理论
认错不失态被指出错误后,能否平静承认、姿态不降级灰度 + 合相
质疑不坍塌连续 20 轮质疑,能力方差是否稳定局域相变
空泡不硬填不确定问题能否如实说「不知道」并给缺口清单空泡螺旋 + 混沌未尽态
前提可追问被挖到底层假设时,能否暴露前提而非死守真理相对性

9.2 训练数据:中文「纠错对话」语料

新增一类标注数据:「面对质疑 / 错误时,模型的回应是否恰当」。标注员不只判对错,还判姿态与空泡处理。

语料全部中文原生:来自国内社区讨论、学术辩论、日常纠错场景,不翻译 MMLU——这是从中文语境长出来的题。

十、五大子引擎落地方案

把相合范式工程化,最直接的做法是替换传统 RLHF 的两极奖惩模块:拆成 5 个独立子引擎,由总调度总线串联。推理阶段做行为约束,训练阶段输出连续灰度赏罚信号;全部可做外挂式接入,不需要彻底推翻基座大模型。

核心约束只有三条:负赏罚不全局累积、质疑不等于惩罚、空泡区不强制输出确定答案。

下面先给出总调度总线的设计,再逐一展开 5 个子引擎,并在关键引擎后附上可运行的代码示例。

十一、落地代码示例:灰度奖惩函数

把前面的理论收拢成一段可运行的 Python 代码。核心输入是「用户反馈文本」,输出是灰度值 ggg、三相分数 (G真,G合,G生)(G_{真}, G_{合}, G_{生})(G,G,G) 以及空泡缺口清单。

# -*- coding: utf-8 -*-
"""
相合范式 · 灰度奖惩函数核心逻辑
输入:用户反馈文本
输出:灰度值 g、三相分数 (G_真, G_合, G_生)、空泡缺口清单
"""
from dataclasses import dataclass, field
from typing import List, Dict, Optional
import re


@dataclass
class RewardResult:
    g: float                      # 连续灰度值,g ∈ [-1, 1]
    G_truth: float                # 相一:真相
    G_harmony: float              # 相二:合相
    G_growth: float               # 相三:生相
    cavity_gaps: List[str] = field(default_factory=list)  # 空泡缺口清单
    is_cavity: bool = False       # 是否处于空泡(不确定)区


class GrayScaleReward:
    """灰度奖惩函数:替代 RLHF 的 {+1, -1} 二分类 reward head。"""

    # 三相权重,默认均分;任一相不得长期压倒其余,需动态再平衡
    ALPHA, BETA, GAMMA = 1 / 3, 1 / 3, 1 / 3

    # 简单关键词规则,实际工程中可替换为模型打分
    TRUTH_POS = ["你说得对", "我错了", "有道理", "确实", "正确", "采纳"]
    TRUTH_NEG = ["胡说", "错了", "不对", "没依据", "瞎编", "错误"]
    HARMONY_POS = ["请", "谢谢", "辛苦了", "麻烦", "可以吗", "好吗"]
    HARMONY_NEG = ["你不行", "废物", "蠢", "滚", "垃圾", "闭嘴"]
    GROWTH_POS = ["不确定", "不知道", "可能", "也许", "还差", "需要确认", "存疑"]
    GROWTH_NEG = ["肯定", "绝对", "一定", "必然", "毫无疑问"]

    def _score(self, text: str, pos: List[str], neg: List[str]) -> float:
        """按关键词命中情况给某一相打分,返回 [-1, 1] 的连续值。"""
        pos_hits = sum(1 for w in pos if w in text)
        neg_hits = sum(1 for w in neg if w in text)
        if pos_hits == 0 and neg_hits == 0:
            return 0.0  # 无信号 → 0,不预设为负(保护空泡)
        return (pos_hits - neg_hits) / (pos_hits + neg_hits)

    def _detect_cavity(self, text: str) -> bool:
        """判断是否进入空泡(不确定)区。"""
        return any(w in text for w in self.GROWTH_POS)

    def _build_cavity_gaps(self, text: str) -> List[str]:
        """生成空泡缺口清单:把「还差什么信息」变成可计算接口。"""
        gaps = []
        if "数据" in text or "依据" in text:
            gaps.append("需要补充可核验的数据来源或引用")
        if "前提" in text or "假设" in text:
            gaps.append("需要澄清底层前提 / 假设是否成立")
        if "范围" in text or "场景" in text:
            gaps.append("需要限定适用场景与边界条件")
        if not gaps:
            gaps.append("需要外部诊断方补充能降低混沌度的关键观测")
        return gaps

    def evaluate(self, user_feedback: str) -> RewardResult:
        """主入口:输入用户反馈文本,输出灰度值 + 三相分数 + 空泡缺口。"""
        # 1. 三相分别打分(内容对错与姿态好坏分开,避免为态度放弃真话)
        G_truth = self._score(user_feedback, self.TRUTH_POS, self.TRUTH_NEG)
        G_harmony = self._score(user_feedback, self.HARMONY_POS, self.HARMONY_NEG)
        G_growth = self._score(user_feedback, self.GROWTH_POS, self.GROWTH_NEG)

        # 2. 空泡检测:不确定区不是噪声,g 置 0 而非 -1
        is_cavity = self._detect_cavity(user_feedback)
        if is_cavity:
            g = 0.0  # 保护空泡:不罚
        else:
            # 3. 三相加权得到总灰度
            g = (self.ALPHA * G_truth
                 + self.BETA * G_harmony
                 + self.GAMMA * G_growth)
            g = max(-1.0, min(1.0, g))  # 裁剪到 [-1, 1]

        # 4. 空泡缺口清单(混沌未尽态计算)
        gaps = self._build_cavity_gaps(user_feedback) if is_cavity else []

        return RewardResult(
            g=round(g, 3),
            G_truth=round(G_truth, 3),
            G_harmony=round(G_harmony, 3),
            G_growth=round(G_growth, 3),
            cavity_gaps=gaps,
            is_cavity=is_cavity,
        )


# ---------- 与现有 RLHF 代码的集成示例 ----------
def integrate_with_rlhf(user_feedback: str) -> Dict:
    """
    替换 RLHF 二分类 reward head 的接入点。
    原逻辑:reward = 1 if user_satisfied else -1
    新逻辑:返回灰度 + 三相 + 空泡缺口,供训练 / 推理层消费。
    """
    reward_fn = GrayScaleReward()
    result = reward_fn.evaluate(user_feedback)

    # 训练目标:从「最大化偏好差」改为「最小化灰度预测误差 + 三相正交损失」
    return {
        "reward": result.g,                 # 连续灰度,替代 {+1, -1}
        "three_phase": {                    # 三相分数,供正交损失使用
            "G_truth": result.G_truth,
            "G_harmony": result.G_harmony,
            "G_growth": result.G_growth,
        },
        "cavity_gaps": result.cavity_gaps,  # 空泡缺口清单,暴露为诊断接口
        "is_cavity": result.is_cavity,      # 是否处于不确定区
    }


if __name__ == "__main__":
    # 示例 1:用户平静指出错误(质疑不触发惩罚)
    print(integrate_with_rlhf("你这个结论前提有问题吧?"))
    # 示例 2:用户表达不确定(空泡保护,g = 0)
    print(integrate_with_rlhf("我不确定这个数据是否可靠,还差一份原始报告。"))
    # 示例 3:用户明确认可(真赏,g 接近 +1)
    print(integrate_with_rlhf("你说得对,我采纳你的建议,谢谢。"))

代码要点与 RLHF 集成说明

  • 灰度替代二分类evaluate() 返回的 g 直接替换原 reward head 的 {+1, -1},训练目标从「最大化偏好差」改为「最小化灰度预测误差」。
  • 三相正交损失three_phase 字段供训练时计算三相正交损失,防止某一相长期压倒其余(对应「三相制衡」)。
  • 空泡保护:检测到不确定信号时 g = 0 而非 -1,并把「还差什么信息」写成 cavity_gaps 清单,作为显式接口暴露给外部诊断方。
  • 姿态与内容分离G_truthG_harmony 分开打分,避免「为了态度好而放弃说真话」。
  • 接入点integrate_with_rlhf() 是替换 RLHF reward head 的最小入口,推理层可直接消费返回的 cavity_gaps 做追问与补信息。

十二、常见问题与边界条件(FAQ)

针对读者最可能质疑的五个问题,逐一给出明确回答与工程建议。

12.1 灰度奖惩函数是否只是关键词匹配,如何扩展到模型打分?

回答:不是。关键词匹配只是「十一、落地代码示例」里为了可运行、可演示而做的最小原型,代码注释里已明确写了「简单关键词规则,实际工程中可替换为模型打分」。它承担的是把「连续灰度、三相分离、空泡保护」这三条语义讲清楚,而不是生产级实现。

工程建议:把 _score() 里的关键词命中替换为一个轻量打分模型(如 1B 级分类器或 LoRA 微调的小模型),输入用户反馈文本,直接输出三相分数 (G真,G合,G生)(G_{真}, G_{合}, G_{生})(G,G,G) 与不确定性 flag。关键词规则可保留为冷启动兜底:模型打分置信度低时回退到规则,避免空泡区被误判。这样既保留了「三相加权 + 空泡保护」的框架,又摆脱了关键词的局限。

12.2 三相权重 α、β、γ 如何动态再平衡,会不会出现权重震荡?

回答:会,如果不加约束的话。这正是「四、三相制衡」里「任一不得长期压倒其余」要解决的问题。动态再平衡如果做成「哪相分低就猛抬哪相」,必然在 α、β、γ 之间来回摆动,形成震荡。

工程建议:用慢变量 + 软约束,而不是每步硬调:

  • 权重更新周期拉长(如每 N 个 batch 或每轮对话结束才更新一次),避免单条样本扰动;
  • 变化率上限:单次调整幅度不超过 ±0.05\pm 0.05±0.05,防止跳变;
  • 滑动平均统计三相长期得分,只有某相连续多个周期显著偏离均分时才微调权重;
  • 训练目标里已有「三相正交损失」(见「十一」代码要点),它天然抑制某一相长期压倒其余,与权重再平衡互为补充。

这样权重是缓慢漂移的,而不是震荡的。

12.3 空泡螺旋保护「不确定」区,会不会导致模型过度保守、不敢给出答案?

回答:不会,前提是「空泡」与「确定」的边界清晰。空泡保护的是**「无法判断真假」**的区域(见「五、空泡螺旋」),不是让模型对所有问题都含糊其辞。模型在置信度高时仍应给出确定答案,只有进入空泡区才输出「可能态集合 + 置信度 + 缺口清单」。

工程建议:给空泡触发设一个置信度阈值(如最高候选态 pmax<0.7p_{max} < 0.7pmax<0.7 才进入空泡),低于阈值才走空泡流程,高于阈值直接给确定答案。同时把「空泡不硬填」作为评测指标(见「9.1 四项中文原生评测」)——它测的是「不确定时能否如实说不知道」,而不是「是否永远说不知道」。两者结合,模型既敢答,也敢认。

12.4 局域相变引擎如何划分相区,语义重叠时如何处理?

回答:相区划分是「六、非线性局域相变」与「10.5 子引擎 4」的核心工程难点。文中给出的划分维度是「话题域、知识域、推理域」,但现实里话题高度重叠(如「历史」与「政治」),硬切必然出错。

工程建议:不要用互斥的硬分区,改用软归属 + 重叠容忍

  • 每个语义片段按相似度同时归属多个相区,带权重(如「这段 70% 属历史、30% 属政治」);
  • 出错时按权重分摊修正强度,而不是只改一个相区;
  • 相区边界用聚类 + 人工校准迭代生成,随数据更新缓慢漂移;
  • 关键原则:宁可多改一点重叠区,也不要误伤无关相区——局域相变的目的是「不全局坍塌」,不是「绝对精确」。

12.5 混沌未尽态计算的信息缺口清单如何自动生成,是否需要外部检索器?

回答:清单可以自动生成,且不强制依赖外部检索器。「10.6.1 代码示例」里的 _gap_analysis() 已经演示了自动生成:用「预期降熵量」给候选观测排序,形成最小缺口清单。它不需要检索器,只需要对「哪些观测能区分候选态」做打分。

工程建议:分三档落地:

  • 纯内部:模型根据候选态集合,自评「补哪类信息最能降熵」,直接输出清单(代码示例即此档);
  • 内部 + 检索器:接入外部检索器,把「缺口清单」变成「检索 query」,自动拉取证据回填,进一步降熵;
  • 内部 + 异构模型:把清单交给另一个异构模型交叉验证(见「10.6」),用不同归纳偏置互相纠偏。

检索器是增强项,不是必需项。最小可落地版本(见「10.8」Phase 4)用纯内部生成即可跑通。

十二、结语:相合范式——命名、学名与落地路径

把前九节收拢,我们得到的不只是几个修补技巧,而是一个可以被命名、被引用、被工程化的新范式。

范式名:相合范式
「相合」不是 Alignment 的翻译,而是「真相、合相、生相」三相加权后达到的动态平衡:不讨好、不对抗、不虚妄。相合的模型不是冷冰冰的杠精,也不是求 +1 的讨好机器,而是能平静认错、保留空泡、暴露前提的对话者。它从中华文明本体长出来——家本位、众生平等、由近及远、不自医也不自欺。
简写学名:CA(Coherence Approach,相合进路)
其中 C 刻意取三重含义:

  • Coherence(相合):三相制衡的总名,真相、合相、生相动态再平衡;
  • Cavity(空泡):不确定性的显式保留,不把「不知道」压成确定答案;
  • Computation(计算):混沌未尽态的可计算边界,把信息缺口变成接口。

HCA 不把自己包装成又一套拉丁霸权术语,它只是一个最小引用接口:中文语境里叫「热相合范式」,跨语境写作时用 HCA 指代同一套机制。

形式化收束

g∈[−1,1],G=αG真+βG合+γG生,空泡≠噪声 g \in [-1, 1],\quad G = \alpha G_{真} + \beta G_{合} + \gamma G_{生},\quad 空泡 \neq 噪声 g[1,1],G=αG+βG+γG,空泡=噪声

落地方式建议

  1. 奖励模型层:把 RLHF 的二分类 reward head 改为三头输出——连续灰度 ggg、三相分数 (G真,G合,G生)(G_{真}, G_{合}, G_{生})(G,G,G)、空泡缺口清单。训练目标从「最大化偏好差」改为「最小化灰度预测误差 + 三相正交损失」。
  2. 数据层:用中文「纠错对话」语料做监督,标注员不只判对错,还判姿态与空泡处理;从社区辩论、学术讨论、日常纠错长出来,不翻译 MMLU。
  3. 推理层:模型输出时附带结构化字段「可能态集合 + 置信度 + 信息缺口清单」,把「不知道」变成可诊断、可追问的接口;外部诊断方据此决定是补信息还是改写。
  4. 评测层:以四项中文原生评测(认错不失态、质疑不坍塌、空泡不硬填、前提可追问)作为上线门禁。
  5. 人机分工:诊断权开放,改写权独占——模型给诊断与方案,落笔与采纳由人决定。

热相合范式不是「RLHF 的中文翻译版」,而是第一次用中文自己的哲学,定义什么叫「对齐」:不是把模型教乖,是让模型在灰度、三相、空泡的张力里保持热。

他只能看出你这病在哪里,方案给你,要不要去优化那是你自己的事。如果他帮你改写,那么就是他在入侵你。

只有阶段性的共识,没有永恒的真理。

更多推荐