Clarity Gate v2.1
用途: 预检验证系统,在文档进入 RAG 知识库前强制执行认知质量检查。生成符合 Clarity Gate Format Specification v2.1 的 Clarity-Gated Documents (CGD)。
核心问题: "如果另一个 LLM 阅读这份文档,它会把假设误认为事实吗?"
核心原则: "检测是为了发现现状;强制执行是为了确保应然。在实践中:在缺失的不确定性标记变成自信的幻觉之前找到它们。"
v2.1 新特性
| 特性 | 描述 |
|---|---|
| Claim Completion Status | PENDING/VERIFIED 由字段存在决定(无显式状态字段) |
| Source Field Semantics | 可执行的源 (PENDING) vs. 已发现的源 (VERIFIED) |
| Claim ID Format Guidance | 推荐使用基于哈希的 ID,并对规模进行冲突分析 |
| Body Structure Requirements | 存在 claims 时,必须包含 HITL Verification Record 部分 |
| New Validation Codes | E-ST10, W-ST11, W-HC01, W-HC02, E-SC06 (FORMAT_SPEC); E-TB01-07 (SOT validation) |
| Bundled Scripts | 用于确定性计算的 claim_id.py 和 document_hash.py |
规范
本技能实现并引用以下规范:
| 规范 | 版本 | 位置 |
|---|---|---|
| Clarity Gate Format (Unified) | v2.1 | docs/CLARITY_GATE_FORMAT_SPEC.md |
注意: v2.0 将 CGD 和 SOT 统一为单一的 .cgd.md 格式。SOT 现在是带有可选 tier: 块的 CGD。
验证代码
Clarity Gate 定义了基于 FORMAT_SPEC v2.1 的结构和语义检查代码:
HITL Claim Validation (§1.3.2-1.3.3)
| 代码 | 检查项 | 严重程度 |
|---|---|---|
| W-HC01 | 部分包含 confirmed-by/confirmed-date 字段 |
WARNING |
| W-HC02 | 模糊的来源(例如 "industry reports", "TBD") | WARNING |
| E-SC06 | hitl-claims 结构中的 Schema 错误 |
ERROR |
Body Structure (§1.2.1)
| 代码 | 检查项 | 严重程度 |
|---|---|---|
| E-ST10 | 存在 claims 时缺少 ## HITL Verification Record |
ERROR |
| W-ST11 | 表格行数与 hitl-claims 数量不匹配 |
WARNING |
SOT Table Validation (§3.1)
| 代码 | 检查项 | 严重程度 |
|---|---|---|
| E-TB01 | 缺少 ## Verified Claims 部分 |
ERROR |
| E-TB02 | 表格无数据行 | ERROR |
| E-TB03 | 缺少必需的列 | ERROR |
| E-TB04 | 列顺序错误 | ERROR |
| E-TB05 | 必需列中存在空单元格 | ERROR |
| E-TB06 | Verified 列中的日期格式无效 | ERROR |
| E-TB07 | Verified 日期在未来(超过 24 小时宽限期) | ERROR |
注意: RFC-001(澄清文档)中可能定义了其他验证代码,但它们不属于规范性的 FORMAT_SPEC。
内置脚本
本技能包含用于 FORMAT_SPEC 确定性计算的 Python 脚本。
scripts/claim_id.py
计算用于 HITL 跟踪的稳定、基于哈希的 claim ID(依据 §1.3.4)。
# Generate claim ID
python scripts/claim_id.py "Base price is $99/mo" "api-pricing/1"
# Output: claim-75fb137a
# Run test vectors
python scripts/claim_id.py --test
算法:
- 文本规范化(去除首尾空白并合并连续空白)
- 使用管道分隔符与位置连接
- SHA-256 哈希,取前 8 个十六进制字符
- 前缀为 "claim-"
测试向量:
claim_id("Base price is $99/mo", "api-pricing/1")→claim-75fb137aclaim_id("The API supports GraphQL", "features/1")→claim-eb357742
scripts/document_hash.py
根据 FORMAT_SPEC §2.2-2.4 计算文档 SHA-256 哈希,支持完整规范化。
# Compute hash
python scripts/document_hash.py my-doc.cgd.md
# Output: 7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730
# Verify existing hash
python scripts/document_hash.py --verify my-doc.cgd.md
# Output: PASS: Hash verified: 7d865e...
# Run normalization tests
python scripts/document_hash.py --test
算法(依据 §2.2-2.4):
- 提取开头的
---\n和<!-- CLARITY_GATE_END -->之间的内容 - 仅从 YAML frontmatter 中移除
document-sha256行(支持多行延续) - 规范化:
- 去除每行尾部空白
- 将 3 个以上连续换行符合并为 2 个
- 规范化末尾换行符(恰好 1 个 LF)
- UTF-8 NFC 规范化
- 计算 SHA-256
跨平台规范化:
- 如存在 BOM 则移除
- CRLF 转 LF (Windows)
- CR 转 LF (旧版 Mac)
- 边界检测(防止在 CGD 结构外部计算哈希)
- 空白差异产生相同的哈希值(跨平台确定性)
核心区别
现有的 UnScientify 和 HedgeHunter (CoNLL-2010) 等工具检测文本中已存在的不确定性标记("是否表达了不确定性?")。
Clarity Gate 强制在认知上要求的地方必须存在这些标记("是否应该表达不确定性但没有?")。
| 工具类型 | 问题 | 示例 |
|---|---|---|
| 检测 | "这段文本包含模糊限制语吗?" | UnScientify/HedgeHunter 发现 "may", "possibly" |
| 强制 | "这个声明应该被模糊限制但没有吗?" | Clarity Gate 标记 "Revenue will be $50M" |
关键局限性
Clarity Gate 验证的是形式,而非事实。
本技能检查声明是否被正确标记为不确定——它无法验证声明是否真实。
风险: LLM 可能将事实幻觉进文档,然后通过为虚假声明添加来源标记来“通过” Clarity Gate。
解决方案: 在宣布 PASS 之前,HITL (Human-In-The-Loop) 验证是强制性的。
使用场景
- 将文档摄入 RAG 系统前
- 与其他 AI 系统共享文档前
- 编写规范、状态文档或方法论描述后
- 当文档包含预测、估计或假设时
- 发布未验证的声明前
- 在 LLM 会话之间交接文档时
9 个验证点
与规范套件的关系
9 个验证点指导语义审查——需要判断力(人工或 AI)的内容质量检查。它们回答诸如“这个声明应该被模糊限制吗?”和“这些数字一致吗?”等问题。
审查完成后,输出符合 CLARITY_GATE_FORMAT_SPEC.md 的 CGD 文件。CLARITY_GATE_FORMAT_SPEC.md 中的 C/S 规则验证文件结构,而非语义内容。
联系:
- 语义发现(9 个点)确定存在哪些问题
- 问题记录在 CGD 状态字段中(
clarity-status,hitl-status,hitl-pending-count) - 状态一致性由结构规则 (C7-C10) 强制执行
示例:如果点 5(数据一致性)发现数字冲突,您需要将 clarity-status 标记为 UNCLEAR 直到解决。然后规则 C7 确保您不能在仍为 UNCLEAR 时声称 REVIEWED。
认知检查(核心重点:点 1-4)
1. 假设 vs 事实标记 每个声明都必须清楚地标记为已验证或假设性的。
| 失败 | 通过 |
|---|---|
| "我们的架构优于竞争对手" | "我们的架构优于竞争对手 [基准数据见表 3]" |
| "模型实现了 40% 的提升" | "模型实现了 40% 的提升 [在数据集 X 上测量]" |
修复: 添加标记:"PROJECTED:", "HYPOTHESIS:", "UNTESTED:", "(estimated)", "~", "?"
2. 不确定性标记强制执行 前瞻性陈述需要限定词。
| 失败 | 通过 |
|---|---|
| "收入将在 Q4 达到 5000 万美元" | "收入预计在 Q4 达到 5000 万美元" |
| "该功能将减少流失" | "该功能预计将减少流失" |
修复: 添加 "projected", "estimated", "expected", "designed to", "intended to"
3. 假设可见性 影响解释的隐含假设必须显式化。
| 失败 | 通过 |
|---|---|
| "系统线性扩展" | "系统线性扩展 [假设 <1000 并发用户]" |
| "响应时间为 50ms" | "响应时间为 50ms [在标准负载条件下]" |
修复: 添加括号内的条件:"[assuming X]", "[under conditions Y]", "[when Z]"
4. 看似权威的未验证数据 带有具体百分比和复选框的表格看起来像测量数据。
危险信号: 带有具体数字(89%, 95%, 100%)但无来源的表格
修复: 为数字添加 "(guess)", "(est.)", "?"。添加显式警告:"PROJECTED VALUES - NOT MEASURED"
数据质量检查(补充重点:点 5-7)
5. 数据一致性 扫描文档中冲突的数字、日期或事实。
危险信号: 一部分说 "500 users",另一部分说 "750 users"
修复: 调和冲突或显式注明差异并解释原因。
6. 隐含因果关系 暗示因果关系但缺乏证据的声明。
危险信号: "更短的提示词能提高响应质量"(看似合理但未证实)
修复: 重构为假设:"更短的提示词可能提高响应质量(假设,未验证)"
7. 将未来状态作为现在时 将计划中/希望的结果描述为已经实现。
危险信号: "系统每秒处理 10,000 个请求"(当它还没构建时)
修复: 使用将来时或条件句:"系统设计用于处理..." 或 "TARGET: 10,000 rps"
验证路由(点 8-9)
8. 时间连贯性 文档日期和时间戳必须内部一致且合理。
| 失败 | 通过 |
|---|---|
| "最后更新:2024年12月"(当前为 2026 年) | "最后更新:2026年1月" |
| v1.0.0 日期 2024-12-23, v1.1.0 日期 2024-12-20 | 版本按时间顺序排列 |
子检查:
- 文档日期 vs 当前日期
- 内部时间顺序(版本、事件顺序)
- 引用新鲜度("current", "now", "today" 声明)
修复: 更新日期,添加 "as of [date]" 限定词,标记过时声明
9. 可外部验证的声明 可以进行事实核查的具体数字应标记为需要验证。
| 类型 | 示例 | 风险 |
|---|---|---|
| 定价 | "每次调用约 $0.005" | API 定价变更 |
| 统计 | "论文平均包含 15-30 个方程" | 可能偏差很大 |
| 比率 | "40% 的研究人员使用 X" | 需要引用 |
| 竞争对手声明 | "没有竞争对手提供 Y" | 可能已过时 |
修复选项:
- 添加带日期的来源
- 添加不确定性标记
- 路由至 HITL 或外部搜索
- 泛化("低成本" 而非 "$0.005")
验证层级
Claim Extracted --> Does Source of Truth Exist?
|
+---------------+---------------+
YES NO
| |
Tier 1: Automated Tier 2: HITL
Consistency & Verification Two-Round Verification
| |
PASS / BLOCK Round A → Round B → APPROVE / REJECT
Tier 1: 自动化验证
A. 内部一致性
- 图表 vs 文本 矛盾
- 摘要 vs 正文 不匹配
- 表格 vs 散文 冲突
- 数值一致性
B. 外部验证(扩展接口)
- 用户提供的连接到结构化源的连接器
- 财务系统、Git 提交、CRM 等
Tier 2: 两轮 HITL 验证 — 强制性
Round A: 衍生数据确认
- 来自会话中发现的来源的声明
- 人工确认解释,而非真相
Round B: 真正的 HITL 验证
- 需要实际验证的声明
- 未找到来源、人工自己的数据、外推数据
CGD 输出格式
生成 Clarity-Gated Document 时,请按照 CLARITY_GATE_FORMAT_SPEC.md v2.1 使用此格式:
---
clarity-gate-version: 2.1
processed-date: 2026-01-12
processed-by: Claude + Human Review
clarity-status: CLEAR
hitl-status: REVIEWED
hitl-pending-count: 0
points-passed: 1-9
rag-ingestable: true # computed by validator - do not set manually
document-sha256: 7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730
hitl-claims:
- id: claim-75fb137a
text: "Revenue projection is $50M"
value: "$50M"
source: "Q3 planning doc"
location: "revenue-projections/1"
round: B
confirmed-by: Francesco
confirmed-date: 2026-01-12
---
# Document Title
[Document body with epistemic markers applied]
Claims like "Revenue will be $50M" become "Revenue is **projected** to be $50M *(unverified projection)*"
---
## HITL Verification Record
### Round A: Derived Data Confirmation
- Claim 1 (source) ✓
- Claim 2 (source) ✓
### Round B: True HITL Verification
| # | Claim | Status | Verified By | Date |
|---|-------|--------|-------------|------|
| 1 | [claim] | ✓ Confirmed | [name] | [date] |
<!-- CLARITY_GATE_END -->
Clarity Gate: CLEAR | REVIEWED
必需的 CGD 元素(依据规范):
- 包含所有必需字段的 YAML frontmatter:
clarity-gate-version— 工具版本(无 "v" 前缀)processed-date— YYYY-MM-DD 格式processed-by— 处理者名称clarity-status— CLEAR 或 UNCLEARhitl-status— PENDING, REVIEWED, 或 REVIEWED_WITH_EXCEPTIONShitl-pending-count— 整数 ≥ 0points-passed— 例如1-9或1-4,7,9hitl-claims— 已验证声明列表(可为空[])
- 结束标记(HTML 注释 + 状态行):
<!-- CLARITY_GATE_END --> Clarity Gate: <clarity-status> | <hitl-status> - HITL 验证记录(如果状态为 REVIEWED)
可选/计算字段:
rag-ingestable— 由验证器计算,不要手动设置。仅当为CLEAR | REVIEWED且无排除块时显示true。document-sha256— 必需。64 字符小写十六进制哈希,用于完整性验证。计算规则见规范 §2。exclusions-coverage— 可选。正文在排除块内的比例 (0.0–1.0)。
转义机制: 要编写像 *(estimated)* 这样的标记而不触发解析,请用反引号包裹:`*(estimated)*`
Claim Completion Status (v2.1)
Claim 验证状态由字段存在决定,而非显式状态字段:
| 状态 | confirmed-by |
confirmed-date |
含义 |
|---|---|---|---|
| PENDING | 缺失 | 缺失 | 等待人工验证 |
| VERIFIED | 存在 | 存在 | 人工已确认 |
| (无效) | 存在 | 缺失 | W-HC01: 字段不完整 |
| (无效) | 缺失 | 存在 | W-HC01: 字段不完整 |
为什么没有显式状态字段? 字段存在是自我强制的——您无法在不提供谁/何时的情况下意外设置状态。
Source Field Semantics (v2.1)
source 字段的含义根据 claim 状态而变化:
| 状态 | source 包含 |
示例 |
|---|---|---|
| PENDING | 验证地点(可执行) | "Check Q3 planning doc" |
| VERIFIED | 发现内容(证据) | "Q3 planning doc, page 12" |
模糊来源检测 (W-HC02): 像 "industry reports", "research", "TBD" 这样的来源会触发警告。
Claim ID Format (v2.1)
通用模式: claim-[a-z0-9._-]{1,64}(字母数字、点、下划线、连字符)
| 方法 | 模式 | 示例 | 使用场景 |
|---|---|---|---|
| Hash-based (首选) | claim-[a-f0-9]{8,} |
claim-75fb137a |
确定性、抗冲突 |
| Sequential | claim-[0-9]+ |
claim-1, claim-2 |
简单文档 |
| Semantic | claim-[a-z0-9-]+ |
claim-revenue-q3 |
人工友好 |
冲突概率: 在 1,000 个 claims 使用 8 字符十六进制 ID 时:约 0.012%。对于 >1,000 个 claims,使用 12 个以上十六进制字符。
建议: 使用 scripts/claim_id.py 生成基于哈希的 ID 以保持一致性和抗冲突性。
排除块
当内容无法解决时(无 SME 可用、遗留散文等),将其标记为排除而不是留下歧义:
<!-- CG-EXCLUSION:BEGIN id=auth-legacy-1 -->
Legacy authentication details that require SME review...
<!-- CG-EXCLUSION:END id=auth-legacy-1 -->
规则:
- ID 必须匹配:
[A-Za-z0-9][A-Za-z0-9._-]{0,63} - 不得嵌套或重叠块
- 每个 ID 仅使用一次
- 需要
hitl-status: REVIEWED_WITH_EXCEPTIONS - 必须在 frontmatter 中记录
exceptions-reason和exceptions-ids
重要: 带有排除块的文档不可摄入 RAG。它们会被完全拒绝(无部分摄入)。
完整规则见 CLARITY_GATE_FORMAT_SPEC.md §4。
SOT 验证
验证 Source of Truth 文件时,技能会检查格式合规性(依据 CLARITY_GATE_FORMAT_SPEC.md)和内容质量(9 个点)。
格式合规性(结构规则)
SOT 文档是带有 tier: 块的 CGD。它们需要包含一个有效表格的 ## Verified Claims 部分。
| 代码 | 检查项 | 严重程度 |
|---|---|---|
| E-TB01 | 缺少 ## Verified Claims 部分 |
ERROR |
| E-TB02 | 表格无数据行 | ERROR |
| E-TB03 | 缺少必需列 (Claim, Value, Source, Verified) | ERROR |
| E-TB04 | 列顺序错误 (Claim 非首列或 Verified 非末列) | ERROR |
| E-TB05 | 必需列中存在空单元格 | ERROR |
| E-TB06 | Verified 列中的日期格式无效 | ERROR |
| E-TB07 | Verified 日期在未来(超过 24 小时宽限期) | ERROR |
内容质量(9 个点)
9 个验证点适用于 SOT 内容:
| 点 | SOT 应用 |
|---|---|
| 1-4 | 检查 ## Verified Claims 中的声明是否实际已验证 |
| 5 | 检查表格中数值是否冲突 |
| 6 | 检查声明是否暗示了未支持的因果关系 |
| 7 | 检查表格是否将未来时态表述为现在时 |
| 8 | 检查日期是否按时间顺序一致 |
| 9 | 标记具体数字以供外部检查 |
SOT 特定要求
- 需要 Tier 块: SOT 是带有
tier:块的 CGD,包含level,owner,version,promoted-date,promoted-by - 结构化 claims 表格:
## Verified Claims部分包含列:Claim, Value, Source, Verified - 表格在排除块之外: 已验证声明表格不得位于排除块内
- 陈旧性标记: 在内容中使用
[STABLE],[CHECK],[VOLATILE],[SNAPSHOT][STABLE]— 无需重新检查即可安全引用[CHECK]— 引用前需验证[VOLATILE]— 频繁变更;始终验证[SNAPSHOT]— 时间点数据;引用时包含日期
输出格式
运行 Clarity Gate 后,报告如下:
## Clarity Gate Results
**Document:** [filename]
**Issues Found:** [number]
### Critical (will cause hallucination)
- [issue + location + fix]
### Warning (could cause equivocation)
- [issue + location + fix]
### Temporal (date/time issues)
- [issue + location + fix]
### Externally Verifiable Claims
| # | Claim | Type | Suggested Verification |
|---|-------|------|------------------------|
| 1 | [claim] | Pricing | [where to verify] |
---
## Round A: Derived Data Confirmation
- [claim] ([source])
Reply "confirmed" or flag any I misread.
---
## Round B: HITL Verification Required
| # | Claim | Why HITL Needed | Human Confirms |
|---|-------|-----------------|----------------|
| 1 | [claim] | [reason] | [ ] True / [ ] False |
---
**Would you like me to produce an annotated CGD version?**
---
**Verdict:** PENDING CONFIRMATION
严重程度等级
| 等级 | 定义 | 措施 |
|---|---|---|
| CRITICAL | LLM 可能将假设视为事实 | 使用前必须修复 |
| WARNING | LLM 可能误解 | 应当修复 |
| TEMPORAL | 检测到日期/时间不一致 | 验证并更新 |
| VERIFIABLE | 可进行事实核查的具体声明 | 路由至 HITL 或外部搜索 |
| ROUND A | 源自有证可查的来源 | 快速确认 |
| ROUND B | 需要真正的验证 | 未确认不得通过 |
| PASS | 标记清晰、无歧义、已验证 | 无需操作 |
快速扫描清单
| 模式 | 措施 |
|---|---|
| 具体百分比 (89%, 73%) | 添加来源或标记为估计 |
| 比较表格 | 添加 "PROJECTED" 标题 |
| "Achieves", "delivers", "provides" | 如未验证,使用 "designed to", "intended to" |
| 复选框 | 验证是否已确认 |
| "100%" 任何内容 | 几乎总是需要限定 |
| "Last Updated: [date]" | 对照当前日期检查 |
| 带日期的版本号 | 验证时间顺序 |
| "$X.XX" 或 "~$X" (定价) | 标记以供外部验证 |
| "averages", "typically" | 标记以供来源/引用验证 |
| 竞争对手能力声明 | 标记以供外部验证 |
本技能不做什么
- 不对文档类型进行分类(使用 Stream Coding 代替)
- 不重组文档
- 不添加深度链接或引用
- 不评估写作质量
- 不自主检查事实准确性(需要 HITL)
相关项目
| 项目 | 用途 | URL |
|---|---|---|
| Source of Truth Creator | 创建认知校准的文档 | github.com/frmoretto/source-of-truth-creator |
| Stream Coding | 文档优先的方法论 | github.com/frmoretto/stream-coding |
| ArXiParse | 科学论文验证 | arxiparse.org |
更新日志
v2.1.3 (2026-03-02)
- FIXED:
document_hash.py现已完全符合 FORMAT_SPEC §2.1-2.4 - FIXED: 围栏感知的结束标记检测(依据 §2.3/§8.5 的 Quine Protection)
- FIXED: 所有 4 个部署副本收敛为单一规范实现
- ADDED:
canonicalize()函数:尾部空白去除、换行符合并、NFC 规范化 - ADDED: YAML 感知的
document-sha256移除,支持多行延续 (§2.2) - ADDED: 围栏跟踪测试向量(7 个新测试,共 15 个)
v2.1.0 (2026-01-27)
- ADDED: Claim Completion Status 语义(PENDING/VERIFIED 由字段存在决定)
- ADDED: Source Field Semantics(可执行的 vs. 已发现的)
- ADDED: Claim ID Format 指导及冲突分析
- ADDED: Body Structure Requirements(存在 claims 时必须包含 HITL Verification Record)
- ADDED: 新验证代码:E-ST10, W-ST11, W-HC01, W-HC02, E-SC06 (FORMAT_SPEC §1.2-1.3)
- ADDED: 内置脚本:
claim_id.py,document_hash.py - UPDATED: 引用至 FORMAT_SPEC v2.1
- UPDATED: CGD 输出示例至版本 2.1
v2.0.0 (2026-01-13)
- ADDED: agentskills.io 合规的 YAML frontmatter
- ADDED: Clarity Gate Format Specification v2.0 合规性(统一 CGD/SOT)
- ADDED: 带有 E-TB* 错误代码的 SOT 验证支持
- ADDED: 验证规则映射(9 个点 → 规则代码)
- ADDED: 带有
<!-- CLARITY_GATE_END -->标记的 CGD 输出格式模板 - ADDED: Quine Protection 说明 (§2.3 围栏感知标记检测)
- ADDED: Redacted Export 功能 (§8.11)
- UPDATED:
hitl-claims格式至 v2.0 schema (id, text, value, source, location, round) - UPDATED: 结束标记格式至 HTML 注释样式
- UPDATED: 统一格式规范 v2.0 (单一
.cgd.md扩展名) - RESTRUCTURED: 适应多平台技能发现
v1.6 (2025-12-31)
- 添加两轮 HITL 验证系统
- Round A: 衍生数据确认
- Round B: 真正的 HITL 验证
v1.5 (2025-12-28)
- 添加点 8: 时间连贯性
- 添加点 9: 可外部验证的声明
v1.4 (2025-12-23)
- 添加 CGD 标注输出模式
v1.3 (2025-12-21)
- 重构点为认知 (1-4) 和数据质量 (5-7)
v1.2 (2025-12-21)
- 添加 Source of Truth 请求步骤
v1.1 (2025-12-21)
- 添加 HITL Fact Verification(强制性)
v1.0 (2025-11)
- 初始发布,包含 6 点验证
Version: 2.1.3 Spec Version: 2.1 Author: Francesco Marinoni Moretto License: CC-BY-4.0