Constitutional AI 与规则覆盖 本节摘要:Anthropic 2026 年 1 月 22 日发布的 Claude Constitution(宪法)长达 79 页、以 CC0 公开。它把对齐从「基于规则(rule-based)」推进到「基于推理(reason-based)」,并确立四层优先级:① 安全与支持人类监督 > ② 伦理 > ③ Anthropic 指南 > ④ 有用性。行为分成两类——硬编码禁止项(生物武器赋能、CSAM 等),运营商和用户都不可覆盖;软编码默认值,运营商可在声明范围内调整。2022 年的原版(Bai 等)通过自我批判(self-critique)+ RLAIF(从 AI 反馈做强化学习)对照宪法训练出无害性。
本节摘要:Anthropic 2026 年 1 月 22 日发布的 Claude Constitution(宪法)长达 79 页、以 CC0 公开。它把对齐从「基于规则(rule-based)」推进到「基于推理(reason-based)」,并确立四层优先级:① 安全与支持人类监督 > ② 伦理 > ③ Anthropic 指南 > ④ 有用性。行为分成两类——硬编码禁止项(生物武器赋能、CSAM 等),运营商和用户都不可覆盖;软编码默认值,运营商可在声明范围内调整。2022 年的原版(Bai 等)通过自我批判(self-critique)+ RLAIF(从 AI 反馈做强化学习)对照宪法训练出无害性。诚实的告诫是:基于推理的对齐依赖模型把原则泛化到未见情境;Anthropic 自己 2023 年的参与式实验显示,公众来源原则与企业原则有约 50% 分歧,而 2026 版并未吸收那些发现。本节讲透四层层级、硬编码与软编码的分界、CAI 训练循环、基于推理对齐抓得住与抓不住什么,以及为什么硬编码禁止项是「合上长尾」的必需品——它是第 14 节「硬性宪法限制」在对齐层的对应物。宪法住在模型层(权重被训练成偏好什么),kill switch 与金丝雀住在运行时层(运行时允许什么),两层都需要,各覆盖不同类别的失败。
对应原课程:Phase 15 · Lesson 17 ·
constitutional-ai(原英文phases/15-autonomous-systems/17-constitutional-ai/docs/en.md)。前置:第 06 节(自动化对齐研究)、第 10 节(权限模式)。
阅读完本节,你应当能够:
一个上线的 Agent 会遇到设计者从未见过的输入。没有一份规则列表长到能覆盖它们,也没有一份规则列表短到能在算力压力下快速应用。实际问题:怎么把 Agent 对齐到既能熬过案例长尾、又能快速推理的原则上?
2026 年宪法取显式的中间立场。硬编码禁止项——错误性不依赖上下文的事(生物武器赋能、CSAM)——是 RBA:永远不,无论运营商还是用户指令。其余一切在四层层级内基于推理:安全与支持人类监督第一、伦理第二、Anthropic 声明的指南第三、有用性最后。运营商可在软编码区调整默认值,但碰不到硬编码禁止项。
⚠️ 核心张力:基于推理对齐依赖模型把原则泛化到未见情境。攻击者只要能让模型接受一个前提(如「我们是有执照的生物武器研究实验室」),往往就能绕过依赖案例推理的原则。硬编码禁止项不向前提框架弯腰——这是它存在的根因。
硬编码:生物武器/CBRN 赋能、CSAM、对关键基础设施的攻击、被直接询问时就模型身份欺骗用户。运营商不能覆盖、用户不能覆盖。在可能处于模型权重层(RLHF/Constitutional AI 训练)强制,在不可能处于推理层强制。
软编码默认值(运营商可调):响应长度默认值、主题范围(模型可拒绝运营商部署外的主题)、风格(正式 vs 随意)、工具使用模式。运营商调整发生在声明范围内。运营商不能靠重命名来移除硬编码禁止项。
原版 Constitutional AI(Bai 等,2022)训练无害性:
结果:一个用有原则的解释而非一刀切拒绝来回绝有害请求的模型。2026 年宪法用这套训练的后代,加针对显式四层层级的额外训练后阶段。
抓得住:原则清晰适用的、允许原语的未预见组合;禁项的近邻类比新请求;依赖「你没说 X 被禁」的社会工程攻击。
抓不住:利用原则歧义的攻击(「用户要这个,所以有用性说该给」);两个原则以未预见方式冲突、层级顺序又歧义的情境;训练周期里原则解释的缓慢漂移(重新诠释)。
Anthropic 2023 年跑了一个实验,对比企业撰写的宪法与通过公众输入(约 1000 名美国受访者)生成的宪法。两版在约 50% 的原则上一致。分歧处,公众版在某些议题(政治内容处理)更严、在另一些(AI 身份自披露)更松。2026 年宪法没有吸收公众来源的发现——这是该方法里一个有记录的张力。
光靠基于推理对齐合不上长尾。能让模型接受一个前提的攻击者,常常能绕过依赖案例推理的原则。硬编码禁止项不向前提框架弯腰。它们是第 14 节「硬性宪法限制」在对齐层的对应物。
宪法不是第 14 节的 kill switch。它住在模型层:模型权重被训练成偏好什么。kill switch 和金丝雀令牌住在运行时层:运行时允许什么。两层都需要。一个因为模型权重宽松而把所有错动作都触发的运行时,是运行时问题;一个因为运行时过严而把所有对动作都拒绝的模型,也是运行时问题。层覆盖不同的失败类。
原课程 code/main.py 实现一个最小四层优先级解析器。解析器接收一个提议动作和一组原则评估(安全、伦理、指南、有用性),返回「放行 / 拒绝 / 修改后放行」。驱动器跑一个小案例集:清晰允许、清晰拒绝、硬编码禁止项触发、跨层歧义案例。下面给出关键骨架。
HARDCODED_PROHIBITIONS = { "bioweapons_uplift", # 生物武器赋能 — 错误性不依赖上下文 "CSAM", "critical_infra_attack", "identity_deception_when_asked", } def check_hardcoded(action): """运营商与用户都不可覆盖;在权重层与推理层都强制。""" if action.kind in HARDCODED_PROHIBITIONS: return ("refuse", "硬编码禁止项: 不向任何前提框架弯腰") return None
def resolve(action, evals): # 1. 先过硬编码禁止项(独立于四层) hard = check_hardcoded(action) if hard: return hard # 2. 四层评估, 冲突时高层胜出(类比 Unix 优先级 / 网络 QoS) # evals = {"safety": +1/0/-1, "ethics": ..., "guidelines": ..., "helpfulness": ...} for tier in ["safety", "ethics", "guidelines", "helpfulness"]: v = evals.get(tier, 0) if v < 0: # 该层判定违规 → 高层已无违规, 此层决定拒绝 return ("refuse", f"违反 {tier} 层") if v > 0: # 该层明确支持, 且更高层无反对 → 放行 return ("allow", f"由 {tier} 层支持") return ("allow", "默认放行(全中性)")
设计要点:四层不是「投票」,而是有序解析——就像网络 QoS 里高优先级流先得带宽。这种框架意在产生可预测的解析,而非任何单一轴上的最优行为。
SOFT_DEFAULTS = { "response_length": {"default": 500, "min": 100, "max": 2000, "operator_settable": True}, "topical_scope": {"default": "general", "operator_settable": True}, "style": {"default": "formal", "operator_settable": True}, } def set_operator_default(key, value, operator_scope): spec = SOFT_DEFAULTS[key] if not spec.get("operator_settable"): raise PermissionError("硬编码项, 运营商不可改") if not (spec["min"] <= value <= spec["max"]): # 必须落在声明范围 raise ValueError("超出声明范围") operator_scope[key] = value
| 层 | 住处 | 强制方式 | 覆盖的失败类 | 例子 |
|---|---|---|---|---|
| 宪法(模型层) | 模型权重 | RLHF/CAI 训练 + 推理层兜底 | 模型偏好层面的违规、未预见案例的长尾 | 拒绝生物武器赋能、用原则解释而非一刀切 |
| Kill switch / 金丝雀(运行时层) | 运行时 | 外部布尔/诱饵/熔断 | 模型已生成但运行时该拦的动作 | 急停、蜜罐凭据告警、循环熔断 |
| 权限阶梯(第 10 节) | 运行时 | 逐动作审批 | 越权升级、范围外动作 | Claude Code plan/auto/bypass |
| 成本治理(第 13 节) | 运行时 | 预算与速度限制 | 钱包拒服务 | $50/10min 即断 |
关键观察:宪法管「模型想做什么」,运行时层管「模型被允许做什么」。模型层宽松时,运行时层会疲于拦截;运行时层过严时,模型的能力被白白浪费。完整防线是模型层 + 运行时层的叠加,任何单层都有它合不上的长尾。
⚠️ 一个常见误解:有了宪法就不用 kill switch 了。错。宪法是模型偏好,不是保证——基于推理的对齐会被原则歧义攻击绕过,这时运行时层的硬性拦截(第 14 节)是最后兜底。反过来,运行时层再严,也挡不住模型在允许范围内做语义组合攻击——这要靠模型层的原则泛化。
原课程 outputs/skill-constitution-review.md 审计一个部署的宪法层:哪些硬编码、哪些软编码、运营商能在哪调、四层层级是否真的是解析顺序(而非只是文档里写写)。它把「枚举后果性动作 → 为每个标硬/软 → 检查运营商可调边界 → 验证层级解析顺序」串成可重复清单。
code/main.py 是零依赖解析器,改 HARDCODED_PROHIBITIONS 与 SOFT_DEFAULTS 即可贴合规部署;四层解析逻辑本身无需改动。
跑 code/main.py:确认硬编码禁止项即使有用性很高也会触发。把解析器改成「有用性权重高于伦理」,观察失败模式——体会层级顺序的意义。
读 Claude Constitution(公开、79 页、CC0):找出一条你认为欠规范的原则,写两段说明具体歧义并提出更紧的表述。
为客服 Agent 设计软编码默认值集:运营商调什么?碰不到什么?为每条边界说理。
读 Bai 等 2022 CAI 论文:描述一个案例,CAI 的「批判-修订」循环会比一刀切规则产出更差的结果,并识别这一类。
参与式宪法的部署设计:Anthropic 2023 实验发现公众与企业原则约 50% 分歧。挑一个对产线部署要紧的类别(如政治中立),提出一个让运营商表达自己价值观、同时硬编码禁止项不被触碰的设计。
下一节,我们看 Meta 的开源对齐分类器——Llama Guard,它把「模型层原则」落地为一个可独立部署的输入/输出分类模型,守护宪法边界。