CONCLUSION
黑盒检查能发现异常,但不能单独证明来源
任何 OpenAI-compatible intermediary 都可能返回看起来合理的模型名、usage、fingerprint 与回答。多信号复验的价值,是发现声明、元数据、能力契约和日志之间的未解释冲突,不是把概率判断包装成密码学证明。
这批受控样本里,请求、响应元数据、能力表现和 JBB 本地记录是否一致。
重复样本、供应商可验证 request ID 与版本记录可以提高 provenance 置信,但仍需写明条件。
仅凭 Prompt 或兼容字段,无法证明底层 weights、训练版本、服务集群或未来所有请求。
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。
- 创建随机
test_id与一次性 nonce;从目标模型官方文档选择一个低成本 advertised capability,把 nonce 嵌入同一 probe 的 expected payload。 - 固定 canonical UTF-8 JSON 请求体、
temperature、seed(如支持)、max_tokens与 stream 模式;保存实际发送 body 的 SHA256,Authorization 不进入 body。 - 独立执行三次,不并发、不自动 retry;每次私下保存 HTTP 状态、JBB request ID,并在公开报告中只放 ID/响应 body 的 hash。
- 原样记录
response.model、system_fingerprint与 Chat Completions 的prompt_tokens、completion_tokens、reasoning details;另记是否由上游报告、JBB 估算或转换。 - 同一个请求同时承担 capability 与 nonce-binding 检查,只产生一张 receipt;预注册 machine-checkable acceptance rule,三次都必须通过。
- 用 JBB request ID 核对 Usage Logs;需要人工排查时只提交 ID、时间与脱敏证据,不提交 API Key。
- 只有三条独立记录、相同请求 hash、唯一 request ID、同一个 probe 规则全部通过、日志全部关联且未解释差异为 0 时,L2 才能通过。
{
"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://downstream.jbbtoken.cn/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”
“满血”不是一个开关,要拆成八个维度
记录 exact model ID、dated snapshot 或 alias,以及验证日期。
可接受输入规模与长上下文价格层级;不要用一次极限请求粗暴测试。
服务端、模型和客户端可能分别限制 completion 上限。
effort/budget、隐藏 reasoning token 与输出结构必须分开核对。
Tool Use、JSON Schema 与并行工具调用是能力契约,不是身份指纹。
图片、音频、视频输入输出需要按具体 endpoint 和模型验证。
Cache Read/Write 是否报告、计费和命中,属于请求路径能力。
限速、并发、延迟和成功率影响体验,但不等于模型身份。
需要核对 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
怀疑模型异常时,提交一个可复核证据包
- 停止无限重试,保存首次异常和两次受控复测;把每次调用分开编号。
- 记录模型 ID、端点、参数、UTC 时间、HTTP 状态、JBB request ID 和客户端版本。
- 保存原始响应/SSE transcript 的 SHA256;公开副本先删除 Authorization、Prompt 与个人数据。
- 标出具体不一致:模型字段、response schema、能力、usage、任务状态,或只是主观质量。
- 在 Usage Logs 核对是否存在 retry、多条请求、usage 估算或格式转换迹象。
- 把脱敏报告交给支持排查;不要要求公开渠道、账号池、上游 Key 或其他用户日志。
SOURCES & BRAND BOUNDARY
官方字段可作参考,不代表品牌合作或背书
本页证据审阅日期为 。版本和复现边界以各供应商当前官方文档为准;第三方品牌仅用于描述兼容字段与测试方法。
- TLS 1.3TLS 端点认证与握手边界
- HTTP Message Signatures消息签名覆盖范围与验签材料
- OpenAI ModelsModel ID 与 alias 目录
- Anthropic Modelspinned snapshot 与 model ID versioning
- OpenAI Reproducibilityseed、system_fingerprint 与非确定性
- Google Parameterstemperature 0 的确定性边界
- IETF RATSEvidence、Verifier 与 Attestation Results
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 验真模型”。报告样本、条件、证据等级与限制,结论才可复核。