MODEL AUTHENTICITY / PROTOCOL V1

模型真实性不能靠猜:用多信号复验

模型自报名称、文风、延迟或一道 benchmark 都不足以证明底层模型。可靠做法是固定条件、重复采样、保存脱敏证据,再把“观察到什么”和“无法证明什么”分开报告。

CONCLUSION

黑盒检查能发现异常,但不能单独证明来源

任何 OpenAI-compatible intermediary 都可能返回看起来合理的模型名、usage、fingerprint 与回答。多信号复验的价值,是发现声明、元数据、能力契约和日志之间的未解释冲突,不是把概率判断包装成密码学证明。

可以回答

这批受控样本里,请求、响应元数据、能力表现和 JBB 本地记录是否一致。

?只能提高置信

重复样本、供应商可验证 request ID 与版本记录可以提高 provenance 置信,但仍需写明条件。

×不能回答

仅凭 Prompt 或兼容字段,无法证明底层 weights、训练版本、服务集群或未来所有请求。

JBB 的公开口径

JBB 提供可复验的请求关联和多信号一致性检查;不宣称模型名、价格、单题答案、system_fingerprint 或 JBB request ID 可以单独证明供应商与底层模型。

WHAT ARE YOU VERIFYING?

先把“真实性”拆成五个不同对象

  • 网络服务身份TLS 能验证你连接到证书覆盖的服务端点;它不验证该端点内部加载了哪套模型权重。
  • 声明模型请求模型 ID、response.model、目录与价格页说明服务声称使用什么;别把声明当第三方证明。
  • 请求可追踪性JBB request ID 用于关联本站日志;upstream request ID 只有在供应商能独立核验时才提升外部 provenance。
  • 能力契约上下文、最大输出、reasoning、Tools、多模态、缓存与协议字段是否符合目标模型/端点的公开能力。
  • 底层模型身份要强证明,需要供应商签名或可独立验证的 attestation,把单次请求/响应与模型身份绑定。

EVIDENCE LEVELS

每个结论都必须带证据等级

等级需要什么允许怎么说
L0 声明目录、价格、模型名或单次黑盒回答。“JBB 已列出,来源未验证。”
L1 兼容响应一次请求得到相符响应结构与部分 metadata。“观察到兼容元数据,不构成供应商/模型证明。”
L2 多信号一致至少三次受控调用、一个预注册能力规则、JBB 本地记录可关联且没有未解释冲突。“这些样本的 JBB 路由证据一致,身份仍未独立验证。”
L3 外部可关联L2 加供应商能独立验证的 upstream ID 或供应商侧记录。“该样本来源可由供应商侧关联,不等于密码学模型证明。”
L4 密码学证明供应商签名覆盖 canonical 请求 hash、响应 hash、nonce、不可变 resolved model ID 与模型 artifact/measurement hash,并验证签名 key 来源、有效期和撤销状态。当前 JBB 审阅实现不可用,不得宣称。

MODEL AUTHENTICITY PROTOCOL V1

固定条件,独立调用三次,再报告差异

本页不会替你发起模型请求。下面的调用由用户自愿使用自己的低额度 Key 执行,会产生正常费用;先从 /v1/models 复制当前可见的精确模型 ID。

  1. 创建随机 test_id 与一次性 nonce;从目标模型官方文档选择一个低成本 advertised capability,把 nonce 嵌入同一 probe 的 expected payload。
  2. 固定 canonical UTF-8 JSON 请求体、temperatureseed(如支持)、max_tokens 与 stream 模式;保存实际发送 body 的 SHA256,Authorization 不进入 body。
  3. 独立执行三次,不并发、不自动 retry;每次私下保存 HTTP 状态、JBB request ID,并在公开报告中只放 ID/响应 body 的 hash。
  4. 原样记录 response.modelsystem_fingerprint 与 Chat Completions 的 prompt_tokenscompletion_tokens、reasoning details;另记是否由上游报告、JBB 估算或转换。
  5. 同一个请求同时承担 capability 与 nonce-binding 检查,只产生一张 receipt;预注册 machine-checkable acceptance rule,三次都必须通过。
  6. 用 JBB request ID 核对 Usage Logs;需要人工排查时只提交 ID、时间与脱敏证据,不提交 API Key。
  7. 只有三条独立记录、相同请求 hash、唯一 request ID、同一个 probe 规则全部通过、日志全部关联且未解释差异为 0 时,L2 才能通过。
JSON · 脱敏证据记录模板
{
  "protocol": "jbb-model-authenticity-v1",
  "protocol_version": "1.1.0",
  "test_id": "<RANDOM_TEST_ID>",
  "captured_at_utc": "<ISO_8601_UTC>",
  "sample_count": 3,
  "scope": {
    "base_url": "https://jbbt.pages.dev/v1",
    "endpoint": "/chat/completions",
    "requested_model": "<MODEL_ID_FROM_/v1/models>",
    "alias_used": "<TRUE_OR_FALSE>",
    "resolved_or_pinned_model": "<VALUE_OR_NOT_OBSERVED>",
    "api_version": "<VALUE_OR_NOT_APPLICABLE>",
    "region": "<VALUE_OR_NOT_OBSERVED>",
    "official_model_doc_url": "<HTTPS_URL>",
    "official_doc_snapshot_sha256": "<SHA256>",
    "sdk": "<SDK_NAME>",
    "sdk_version": "<SDK_VERSION>"
  },
  "request_control": {
    "probe_request_description": "One advertised capability probe with the one-time nonce embedded in the expected payload",
    "canonical_body_encoding": "UTF-8 JSON with stable key ordering and no Authorization header",
    "request_body_sha256": "<SHA256_OF_EXACT_CANONICAL_BODY_SENT>",
    "nonce_sha256": "<SHA256_OF_ONE_TIME_NONCE>",
    "temperature": 0,
    "seed": "<INTEGER_OR_NOT_SUPPORTED>",
    "max_tokens": 64,
    "stream": false
  },
  "capability_probe": {
    "capability": "<ONE_ADVERTISED_CAPABILITY>",
    "official_contract_url": "<HTTPS_URL>",
    "nonce_binding_rule": "<MACHINE_RULE_THAT_REQUIRES_ONE_TIME_NONCE_IN_EXPECTED_PAYLOAD>",
    "acceptance_rule": "<PRE_REGISTERED_MACHINE_CHECKABLE_RULE>"
  },
  "observations": [
    {
      "attempt": 1,
      "attempted_at_utc": "<ISO_8601_UTC>",
      "retry_of": null,
      "local_request_id_private": "<STORE_PRIVATELY_NOT_IN_PUBLIC_REPORT>",
      "local_request_id_sha256": "<SHA256_FOR_PUBLIC_REPORT>",
      "upstream_request_id": "<PRESENT_HASHED_OR_NOT_OBSERVED>",
      "http_status": 200,
      "response_id_sha256": "<SHA256>",
      "response_model": "<VALUE_OR_NOT_OBSERVED>",
      "system_fingerprint_sha256": "<SHA256_OR_NOT_OBSERVED>",
      "response_body_sha256": "<SHA256_OF_RAW_BODY_OR_SSE_TRANSCRIPT>",
      "usage_raw": {
        "prompt_tokens": "<INTEGER_OR_NOT_OBSERVED>",
        "completion_tokens": "<INTEGER_OR_NOT_OBSERVED>",
        "completion_tokens_details.reasoning_tokens": "<INTEGER_OR_NOT_OBSERVED>"
      },
      "usage_provenance": "<UPSTREAM_REPORTED_OR_JBB_ESTIMATED_OR_JBB_CONVERTED_OR_NOT_OBSERVED>",
      "probe_rule_pass": "<TRUE_OR_FALSE>",
      "jbb_log_correlation": "<MATCHED_OR_NOT_MATCHED_OR_NOT_CHECKED>"
    },
    {
      "attempt": 2,
      "attempted_at_utc": "<ISO_8601_UTC>",
      "retry_of": null,
      "local_request_id_private": "<STORE_PRIVATELY_NOT_IN_PUBLIC_REPORT>",
      "local_request_id_sha256": "<SHA256_FOR_PUBLIC_REPORT>",
      "upstream_request_id": "<PRESENT_HASHED_OR_NOT_OBSERVED>",
      "http_status": 200,
      "response_id_sha256": "<SHA256>",
      "response_model": "<VALUE_OR_NOT_OBSERVED>",
      "system_fingerprint_sha256": "<SHA256_OR_NOT_OBSERVED>",
      "response_body_sha256": "<SHA256_OF_RAW_BODY_OR_SSE_TRANSCRIPT>",
      "usage_raw": {
        "prompt_tokens": "<INTEGER_OR_NOT_OBSERVED>",
        "completion_tokens": "<INTEGER_OR_NOT_OBSERVED>",
        "completion_tokens_details.reasoning_tokens": "<INTEGER_OR_NOT_OBSERVED>"
      },
      "usage_provenance": "<UPSTREAM_REPORTED_OR_JBB_ESTIMATED_OR_JBB_CONVERTED_OR_NOT_OBSERVED>",
      "probe_rule_pass": "<TRUE_OR_FALSE>",
      "jbb_log_correlation": "<MATCHED_OR_NOT_MATCHED_OR_NOT_CHECKED>"
    },
    {
      "attempt": 3,
      "attempted_at_utc": "<ISO_8601_UTC>",
      "retry_of": null,
      "local_request_id_private": "<STORE_PRIVATELY_NOT_IN_PUBLIC_REPORT>",
      "local_request_id_sha256": "<SHA256_FOR_PUBLIC_REPORT>",
      "upstream_request_id": "<PRESENT_HASHED_OR_NOT_OBSERVED>",
      "http_status": 200,
      "response_id_sha256": "<SHA256>",
      "response_model": "<VALUE_OR_NOT_OBSERVED>",
      "system_fingerprint_sha256": "<SHA256_OR_NOT_OBSERVED>",
      "response_body_sha256": "<SHA256_OF_RAW_BODY_OR_SSE_TRANSCRIPT>",
      "usage_raw": {
        "prompt_tokens": "<INTEGER_OR_NOT_OBSERVED>",
        "completion_tokens": "<INTEGER_OR_NOT_OBSERVED>",
        "completion_tokens_details.reasoning_tokens": "<INTEGER_OR_NOT_OBSERVED>"
      },
      "usage_provenance": "<UPSTREAM_REPORTED_OR_JBB_ESTIMATED_OR_JBB_CONVERTED_OR_NOT_OBSERVED>",
      "probe_rule_pass": "<TRUE_OR_FALSE>",
      "jbb_log_correlation": "<MATCHED_OR_NOT_MATCHED_OR_NOT_CHECKED>"
    }
  ],
  "decision_rule": {
    "l2_requires": [
      "exactly 3 independently timed observations",
      "identical request_body_sha256 across attempts",
      "retry_of is null and local_request_id_sha256 is unique for every attempt",
      "http_status is successful and probe_rule_pass is true for every attempt",
      "jbb_log_correlation is MATCHED for every attempt",
      "no unexplained model, metadata, schema, usage provenance or capability mismatch"
    ],
    "unexplained_mismatch_count": "<NON_NEGATIVE_INTEGER>",
    "l2_rule_pass": "<TRUE_ONLY_IF_EVERY_REQUIREMENT_PASSES>"
  },
  "verdict": {
    "evidence_level": "<0_TO_4>",
    "consistency": "<CONSISTENT_OR_INCONSISTENT_OR_INSUFFICIENT>",
    "external_vendor_correlation": "<VERIFIED_OR_NOT_VERIFIED_OR_NOT_AVAILABLE>",
    "cryptographic_attestation": {
      "available_in_current_jbb_review": false,
      "verified": false,
      "requires": [
        "vendor-controlled signature over canonical request hash, response hash and nonce",
        "immutable resolved model ID plus model artifact or measurement hash",
        "documented signing-key provenance, verifier, expiry and revocation checks"
      ]
    },
    "limitations": [
      "A compatible intermediary can rewrite model labels and metadata.",
      "Three samples cannot establish fleet-wide or time-invariant routing.",
      "Missing metadata is not proof of substitution."
    ]
  },
  "redaction_checklist": {
    "authorization_removed": true,
    "api_key_removed": true,
    "prompt_and_personal_data_removed_from_public_copy": true,
    "channel_account_and_route_removed": true,
    "raw_local_and_upstream_identifiers_private": true
  }
}
为什么是三次

三次是低成本的最小一致性检查,只能发现粗粒度不一致。它不能排除按时间、账号、地区或请求特征变化的路由,也不能代表全量流量。

DEFINE “FULL STRENGTH”

“满血”不是一个开关,要拆成八个维度

01Family / Version

记录 exact model ID、dated snapshot 或 alias,以及验证日期。

02上下文窗口

可接受输入规模与长上下文价格层级;不要用一次极限请求粗暴测试。

03最大输出

服务端、模型和客户端可能分别限制 completion 上限。

04Reasoning

effort/budget、隐藏 reasoning token 与输出结构必须分开核对。

05Tools

Tool Use、JSON Schema 与并行工具调用是能力契约,不是身份指纹。

06多模态

图片、音频、视频输入输出需要按具体 endpoint 和模型验证。

07缓存

Cache Read/Write 是否报告、计费和命中,属于请求路径能力。

08速率与可用性

限速、并发、延迟和成功率影响体验,但不等于模型身份。

需要核对 usage、缓存与长上下文价格时,参见Token 与计费说明实时价格

SIGNAL STRENGTH

先记录强信号,最后才看文风

信号用途不能推出什么
供应商可独立核验的 request ID / 侧记录把特定样本关联到供应商系统。未必绑定底层 weights;仍不是签名 attestation。
JBB request ID + 本地日志关联用户请求、Usage Logs 与本站处理记录。不是供应商回执,不能单独证明来源。
response.model / fingerprint / modelVersion比较服务声明、版本漂移与重复样本。兼容 intermediary 可以缺失、标准化或改写。
usage / reasoning / schema / capability检查计费、协议和能力契约是否一致。usage 可能被估算或转换,不是唯一模型指纹。
文风、延迟、自报身份、单题 benchmark只能作为异常线索或回归集的一小部分。不能证明供应商、版本或底层模型。

FALSE POSITIVES / FALSE NEGATIVES

“看起来一致”和“缺少字段”都可能误导

  • 误报为真实

    代理或兼容服务可以返回合理的模型名、fingerprint、usage 和 copied headers;重复一致只提高“一致性”置信。

  • 误报为替换

    真实供应商响应也可能不返回 fingerprint、reasoning 或可关联 upstream ID;格式转换和 streaming 还可能改变字段。

  • 采样不足

    三次样本无法覆盖动态路由、时间漂移、地区差异或供应商基础设施更新。

  • 非确定性

    相同 seed、参数和 fingerprint 也不保证逐字相同;temperature 0 仍可能有少量变化。

  • 版本与 alias

    alias 可能随供应商更新。报告必须记录 exact ID、解析结果、访问日期和官方版本文档。

  • 隐私泄露

    原始证据可能包含 Prompt、个人数据、内部路由或账号信息;公开时只保留脱敏字段和 hash。

DISPUTE WORKFLOW

怀疑模型异常时,提交一个可复核证据包

  1. 停止无限重试,保存首次异常和两次受控复测;把每次调用分开编号。
  2. 记录模型 ID、端点、参数、UTC 时间、HTTP 状态、JBB request ID 和客户端版本。
  3. 保存原始响应/SSE transcript 的 SHA256;公开副本先删除 Authorization、Prompt 与个人数据。
  4. 标出具体不一致:模型字段、response schema、能力、usage、任务状态,或只是主观质量。
  5. 在 Usage Logs 核对是否存在 retry、多条请求、usage 估算或格式转换迹象。
  6. 把脱敏报告交给支持排查;不要要求公开渠道、账号池、上游 Key 或其他用户日志。

SOURCES & BRAND BOUNDARY

官方字段可作参考,不代表品牌合作或背书

本页证据审阅日期为 。版本和复现边界以各供应商当前官方文档为准;第三方品牌仅用于描述兼容字段与测试方法。

品牌边界

JBB 与上述模型供应商、标准组织或研究作者不存在因本页引用而产生的官方合作、授权或背书关系。

FAQ

模型真实性与“掺水检测”常见问题

  • 01
    让模型回答“你是谁”能检测真假吗?

    不能。模型自报身份受系统提示词、训练数据和代理改写影响,只能作为弱线索。

  • 02
    system_fingerprint 能证明模型吗?

    不能。它适合观察服务配置变化和复现条件,但不是 weights hash,也不是供应商签名证明。

  • 03
    同一道题答得更差,就是模型被替换吗?

    不能直接下结论。temperature、seed、版本、系统提示词、安全策略和固有非确定性都会改变结果。

  • 04
    三次测试都一致,可以说“100% 真实”吗?

    不可以。只能报告这三个样本在记录条件下多信号一致,无法代表全量与未来请求。

  • 05
    没有 fingerprint 或 upstream ID 就是假模型吗?

    不是。字段可能未提供、被转换或不适用于该协议;应标为“未观察到”。

  • 06
    什么证据最强?

    供应商签名且可独立验签,并覆盖 canonical 请求/响应 hash、nonce、不可变 resolved model ID 和模型 artifact/measurement hash 的 attestation 最强;还必须验证签名 key 来源、有效期与撤销状态。当前 JBB 审阅实现未提供该等级。

最终判词

把测试当异常检测和审计协议,不要把它包装成“一个 Prompt 验真模型”。报告样本、条件、证据等级与限制,结论才可复核。