| 判据 | 含义 |
|---|---|
| 身份一致 | 模型名、版本、权重来源可验证 |
| 行为一致 | 在固定 prompt 集合上表现落在预期区间 |
| 协议一致 | 工具调用、上下文、流式格式符合承诺 |
| 可追溯 | 有模型卡、校验信息或供应链证据 |
id 前缀区分 Bedrock / Anthropic / Codexkiro、kiro2api、codewhisperer、claude code、命令行工具 等。id 前缀为 msg_、msg_bdrk_、chatcmpl- 等——则直接视为非逆向。is_cli、reason,并写入通道测试结果,便于审计和复现。candidateCount=9(Gemini 上限是 8),它会老老实实报错,并带上厂商专属的错误类型、字段名、request id。逆向和套壳呢?要么根本不做校验,要么自己做一层,错误结构往往简陋、含糊,很难完美伪造官方的细节。fieldViolations、generation_config.candidate_count、Google request id 等参数错误、1 (inclusive) to 9 (exclusive) 等模糊描述| 厂商 | 参数 | 合法范围 | 违规值 |
|---|---|---|---|
| Gemini | candidateCount | 1~8 | 9 |
| Claude | temperature | 0.0~1.0 | 1.5 |
| Claude | max_tokens | 1~40960 | 100000 |
candidate_count must be in the range [1, 8]. (request id: 202603192148286610505511h0dI2k0)fieldViolations、generation_config.candidate_count、以及 Google 风格的 request id。...supported range is from 1 (inclusive) to 9 (exclusive)submit request 的中转语义,如:{"error":{"message":"Unable to submit request because it has a temperature value of 9.99 but the supported range is from 0 (inclusive) to 2.0001 (exclusive).","type":"upstream_error","code":400}}submit request → 判逆向/中转2.0001(异常边界值)→ 判逆向/中转temperature must be between 0.0 and 1.0,并带有 invalid_request_error 或 ValidationException;逆向往往只有一句模糊提示。// Gemini
{
"contents": [{"role": "user", "parts": [{"text": "test"}]}],
"generationConfig": {
"temperature": 0.7,
"maxOutputTokens": 1024,
"candidateCount": 9
}
}
// Claude
{
"model": "claude-3-5-sonnet-20241022",
"max_tokens": 16,
"temperature": 1.5,
"messages": [{"role": "user", "content": "hi"}]
}INVALID_ARGUMENT、ValidationException、invalid_request_error)、描述是否包含官方字段名、以及是否有厂商风格的 request id。三者都具备,可视为正版;缺得多,则需结合其他手段再判。pass / fail / skip:| 优先级 | 探测项 | 残缺时常见表现 |
|---|---|---|
| P0 | Thinking(thinkingConfig) | 无 thought: true,只返回最终文本 |
| P0 | 工具调用闭环 | 无 functionCall,第二轮对话断链 |
| P1 | 结构化输出(responseSchema) | 非 JSON、schema 违约 |
| P1 | 多模态出图 | 仅文本,无 inlineData |
| P2 | 流式 + usage | usage 缺失,chunk 结构异常 |
thoughtSignature 可以作为组合证据之一:部分 Gemini 响应会带此字段,若已知完整 API 有而某渠道稳定缺失,可视为能力降档;但缺字段本身不能单独判逆向,模型版本差异太大。id 就够了id,看一眼前缀就能区分。| 渠道 | id 前缀 |
|---|---|
| AWS Bedrock | msg_bdrk_ |
| Anthropic 直连 | msg_(且非 msg_bdrk_) |
| Codex | resp- 等 |
usageMetadata.trafficType(Vertex 有 ON_DEMAND、PROVISIONED_THROUGHPUT 等)、错误结构(Vertex 符合 Google Cloud 错误模型),以及故意犯错触发的错误形态,对已知渠道建基线后再写规则。| 场景 | 手段 |
|---|---|
| 日常监控 | 故意犯 错 + 身份探测,定期批量跑 |
| 新渠道准入 | 加能力面 canary,记录特征向量 |
| 高价模型交付 | 以次充好暂无稳定手段(§8),可关注后续探索 |
| 结论输出 | 叠加 id 前缀、能力得分,落档到 channel/model 元数据 |
channel_id、model_name、endpoint_type、is_cli、reason、响应摘要、检测时间,方便审计和回溯。claude-opus-4-5 实际却跑 claude-haiku-4-5。响应体无可靠模型标识,常规故意犯错对两者无效——目前尚无稳定、可落地的鉴别手段。tool_reference 在 Bedrock 上需 tool-search beta,请求在参数校验阶段即被拒,无法触及 Haiku 的「不支持」错误;output_config.effort 在 Bedrock 上的行为与错误格式未确认。{
"contents": [{"parts": [{"text": "hi"}]}],
"generationConfig": {"maxOutputTokens": 16},
"safetySettings": [
{"category": "HARM_CATEGORY_FAKE", "threshold": "BLOCK_NONE"}
]
}category 会触发官方结构化错误;逆向常忽略或返回通用错误。可与 candidateCount=9 一起纳入 Gemini 的违规参数探测集。