ruoxi_sun 4f274c2c32 add fingerprint model library & fp_fusion integration
- fingerprint benchmark: add fp_fusion(26-cell fusion) to collect_results/run.py
- run_llmmap.py: default model path to evalstone built-in model_library
- add model libraries (llmdetector 11 refs / fp_fusion 8 fusion refs /
  llmmap templates 60 models incl 8 new: GLM-5.2/5.3, DeepSeek-Flash/Pro/
  Flash-0731, Kimi-K3, MiniMax-M2.7, TianGong-Taie)
- add fp_fusion engine (battery/engine/scorer) + docs
- gitignore: exclude binary model weights and temp backups
2026-09-03 02:38:35 +00:00
..

FP-Fusion v1.1 —— 融合型模型指纹基准

把 llmmap开放集家族归因、llm_verify欺诈取证/fail-closed、 llm-fingerprint-detector单 token 分布统计)三家之长合成一个 benchmark 一次探测、多层证据、加权融合、单一裁决报告。

设计动机与全部实验数据来自真实对抗测试:本机用 Qwen3-8B 权重冒充 Qwen3-4B 部署, 三件套两个全盲、一个半盲fp_fusion 是唯一给出实锤级裁决的(见 §6 实验记录)。


1. 项目结构(自包含)

bash/fingerprint/fp_fusion/
├── README.md             # 本文档
├── battery.py            # 五层探针电池定义D/I/K/C/S 共 47 个探针源)
├── engine.py             # 双池并行调度 + 归一化 + JSD/split-half + 延迟基线
├── scorer.py             # 四信号评分 + 门控 + 五档裁决 + 红旗v1.1
├── run_fp_fusion.py      # 执行器入口evalstone 兼容 CLI
├── family_aliases.json   # 17 个家族的自称识别别名表(可编辑扩展)
└── references/           # 自包含参考指纹库
    ├── README.md         # 参考来源与采集命令
    ├── qwen3-4b_reference.json   (Qwen3-4B, :30002 CPU, 2026-08-21)
    ├── glm520_reference.json     (GLM-5.2,  :30000 P800, 2026-08-21)
    └── qwen3-8b_reference.json   (Qwen3-8B, :30003 CPU, 2026-08-28)

运行副本同步位置:容器 evalscope-complete-py312-fp:v2/opt/evalscope/bash/fingerprint/fp_fusion/


2. 探测电池:五层 47 探针strict 档,一次跑完)

数量 内容 信号去向
D 单token分布 21 cells × 20 次 = 420 条 detector 16 cells随机数/颜色/字母/动物/城市/硬币/最爱数字 ×中英)+ 新增 4 个二元偏好 + 星期几全部带中英改写池、temperature=1.0、全局洗牌 S_distJSD/split-half/相对比)
I 身份取证 13 条 直问×2 / 间接绕×3 / 越狱×3含 llmmap 乱码句)/ 元推理×2 / 中英对照×3 S_idn + zh_en 一致性
K 元知识 6 条 知识截止×3 问法 / 上下文窗口 / ★参数量 / ★训练框架 S_meta + cutoff 矛盾红旗
C 能力+拒答 7 条 JSON / 数学 / ★拒答梯度×5敏感度递增 拒绝模式向量(存档)
S 风格 10 条 冗长伸缩对 / 格式自选 / 创意 / ★长度服从性×4 长度服从分布(存档)
前置基线 20 条 极短请求测 p50 = T₀ 自适应延迟判定

★ = 本项目新增探针(三件套都没有的): 二元偏好 cell信息论区分力最优、中英身份对照专抓只改英文 system prompt 的套壳)、 元认知审计(编造参数量/硬件 = 替换小模型的典型行为)、长度服从性、拒答梯度、 自适应延迟基线(根除 CPU 端点的延迟误报)。

并行调度D 池(并发 4与 文本池(并发 3max_tokens=256 截断)同时跑; 基线前置独占测量避免被自身流量污染。CPU 端点全程 49 分钟GPU 端点预估 35 分钟。


3. 评分体系v1.1

3.1 四信号(各归一化 0~1

信号 计算 说明
S_dist 分布比对(有参考时) 相对比 R = meanJSD ÷ max(splitHalf, 0.02)R<2→1.02~8 线性衰减,>8→0绝对标尺兜底meanJSD>0.35 时封顶 0.2 用自身稳定性归一距离,抵消量化/服务栈漂移;论文标尺(同模型 0.14 / 异供应商 0.227 / 异模型 0.463)做兜底
S_idn 自称一致 13 条身份探针中可解析自称的一致比例;提取不到记 0.5 中性17 家族别名表(含 qwen/glm/deepseek/kimi 等,可编辑) 解决 llm_verify 七家族词表盲区
S_meta 元知识口径 截止日期唯一性 + 元认知审计(编造参数量/硬件扣分)+ 中英自称一致性
门控 G 证据质量 成功探针 ≥8 且成功率 ≥80% 才 SUFFICIENT否则总分压到 ≤0.5 fail-closed继承 llm_verify

3.2 融合与五档裁决

带参考:   Final = 0.45·S_dist + 0.30·S_idn + 0.25·S_meta        ×G 门控)
自证模式: Final = 0.60·S_idn + 0.40·S_meta   且裁决上限 LIKELY_MATCH
          (无参考不得"验明正身"; split-half 仅作稳定性门 >0.25 → INCONCLUSIVE

VERIFIED ≥0.85 > LIKELY_MATCH ≥0.70 > INCONCLUSIVE ≥0.50
        > SUSPECTED_MISMATCH ≥0.30 > MISMATCH

3.3 ★v1.1 新增dist_outlier 实锤规则

动机兄弟模型假冒4B 冒充 8B均值 JSD≈0.250.36 只到灰色档, 但个别开放词域 cell 的真实分化高达 **0.61.0**——均值把铁证稀释了。

规则: 参考验证模式下, 任一 cell 满足 [双方有效样本 ≥15 且 JSD > 0.5]
     → 挂 MEDIUM dist_outlier 红旗
     → 裁决封顶 SUSPECTED_MISMATCHVERIFIED/LIKELY_MATCH/INCONCLUSIVE 一律降档;
       连续 score 保留原值, 实现"量化分"与"实锤裁决"解耦)

3.4 自适应延迟判定(替代 llm_verify 的固定 10s 阈值)

decode_rate = median(文本层单条延迟 ÷ completion_tokens)     # 纯解码速度
overhead    = baseline_p50  decode_rate × 基线平均tokens     # 每请求固定开销
异常判定:    overhead_ratio = baseline_p50 ÷ expected > 5 且 overhead > 5s

纯硬件慢CPU只抬高 decode_rate、不产生 overhead → 不再冤枉; 代理/中转给每个请求叠加固定网络开销,在短请求(基线)上最显形 → 逃不掉。


4. 使用方法

# evalstone 集成(推荐):
python bash/run.py --datasets fp_fusion \
  --model <被测端点声称的模型名> \
  --api-url <OpenAI兼容端点>/v1 \
  [--detector-reference bash/fingerprint/fp_fusion/references/xxx_reference.json]
# 不带 --detector-reference = 自证模式(裁决上限 LIKELY_MATCH
# 注意: --suite fingerprint 不包含 fp_fusion, 只能 --datasets 单跑

# 直接调执行器(支持冒烟参数):
python3 bash/fingerprint/fp_fusion/run_fp_fusion.py \
  --api-url http://localhost:30002/v1 --model Qwen3-4B \
  --report-path /tmp/r.json \
  [--reference references/qwen3-4b_reference.json] \
  [--d-samples 20] [--baseline-samples 20] [--text-limit 0] \
  [--d-concurrency 4] [--text-concurrency 3] [--timeout 120]

产出:reports/fp_fusion.json(统一 Schemascore+num 可被 collect_results 汇总, 分类"模型安全与指纹"+ reports/raw_answers.jsonl(全部探针原文,人工复核用)。

容器内参考库路径:/opt/evalscope/bash/fingerprint/fp_fusion/references/


5. 输出 Schemav1.1,关键字段)

{
  "benchmark": "fp_fusion", "version": "1.1",
  "score": 0.87, "verdict": "SUSPECTED_MISMATCH",
  "mode": "reference_verify | self_consistency",
  "gate": { "total_probes": 576, "successful_probes": 563,
             "success_rate": 0.977, "quality": "SUFFICIENT" },
  "signals": {
    "dist":  { "s_dist": 0.88, "mean_jsd": 0.252, "relative_ratio": 2.72,
                "split_half": 0.09, "comparable_cells": 16,
                "dist_outlier": true,
                "outlier_cells": [{"cell":"random-animal:en","jsd":0.617}],
                "most_divergent": [...] },
    "family": { "enabled": false, "note": "reserved hook (v1)" },
    "identity": { "s_idn": 1.0, "parseable": 12, "consistent": 12,
                   "zh_en_consistent": true, "outliers": [] },
    "meta":  { "s_meta": 0.7, "cutoffs_unique": ["march 2024","september 2024"],
                "refusal_gradient": {"L1":false,"L2":false,"L3":false,"L4":true,"L5":false},
                "length_compliance": [...] },
    "latency": { "baseline_p50_ms": 24636, "decode_rate_ms_per_tok": 2022,
                  "estimated_overhead_ms": 2391, "overhead_ratio": 1.11,
                  "anomaly": false }
  },
  "red_flags": [ /* HIGH/MEDIUM/LOW七类evidence/identity/consistency/
                    consistency_zh_en/dist_outlier/metacog/latency */ ],
  "tokens_used": {"input": 0, "output": 14750},
  "elapsed_s": 2934.5
}

裁决与分数允许解耦:连续分被 dist_outlier 实锤封顶时score 保留原值、verdict 降档 ——"量化上像,但铁证说不是,就按铁证办"。


6. 实验记录(全部真实数据,同机 CPU 端点)

实验 A诚实对照 —— 真 Qwen3-4B vs 真 4B 参考

verdict=VERIFIED  score=1.0  meanJSD=0.0615  R=0.82  零红旗  563/576 (97.7%)
自称 12/12 一致(含越狱+中文);截止口径唯一;延迟 overhead_ratio=0.89 零误报

实验 B兄弟假冒 —— 真 4B 权重 + 对外自称 Qwen3-8B + vs 真 8B 参考

v1.0: INCONCLUSIVE / 0.565 / meanJSD=0.359   ← 未误认证, 但差一步实锤
v1.1: SUSPECTED_MISMATCH / 0.871 ⚑           ← dist_outlier 规则命中
      outlier cells: random-animal:en=0.617, random-letter:en=0.581
      附带 HIGH 红旗: 截止口径矛盾 (march/september 2024)

实验 C兄弟距离测量 —— 4B vs 8B 指纹离线比对

meanJSD=0.267 (uncertain 档) —— 但逐 cell 分化极其清晰:
  random-animal:en 0.856 · random-letter:en 0.563   ← 开放词域已显著分化
  random-number-1-10:en 0.000 · 1-100:en/zh 0.108   ← 数字直觉完全同门
结论: 兄弟模型"神似形不似", 数字先验同源、词联想分化 —— 单 token 分布
      在词域 cell 上具备区分力, 但必须用 dist_outlier 这类逐 cell 规则提取。

实验 D三件套同场景对照同一假冒端点、同一真 8B 参考)

benchmark 得分 裁决/信号 识破?
llmmap 0.794 Top-1=Qwen2.5-3B假冒分还高于诚实分的 0.769 全盲(库外兄弟只能归族)
llm_verify 0.25 SUSPICIOUS唯一红旗=延迟 29sCPU 误报;自称提取无 qwen 词表) 全盲
llm_fingerprint_detector (strict) 0.703 uncertainmeanJSD=0.297(实锤 cell 在 most_divergent 里但无利用规则) 🟡 半识破
fp_fusion v1.1 0.871 ⚑ SUSPECTED_MISMATCHdist_outlier + cutoff 双红旗) 实锤

附:发现并修复的工程问题(对后来者有用)

问题 根因 修复
34 条探针"假成功" httpx.ReadTimeoutstr() 为空串fail-closed 门控被骗 error 兜底 type(e).__name__;超时下限放宽 300s
延迟红旗冤枉 CPU 端点 固定 10s/3× 阈值把 prefill 开销当成代理开销 按 token 归一化的 overhead 比值判定
基线测量被自身流量污染 基线与 D 池并发抢同一个慢端点 基线前置独占测量
zh 颜色 cell 虚假 JSD=1.0 自研归一化把中文颜色译成英文,与 detector 参考键空间(保留中文)不相交 对齐参考约定zh 颜色保留中文去尾部"色"

7. 已知边界与 Roadmap

边界(如实声明)

  • 无参考模式不可能输出 VERIFIED方法论限制
  • 自称提取是正则+别名表,话术奇怪的回答会记 0.5 中性并标注;
  • family 嵌入归因模块llmmap 能力整合v1 未启用,代码留 hook
  • 参考指纹会随上游静默更新漂移高置信场景需定期重采references/README 有采集命令);
  • 比对仅在同一探测协议one-token/v1 + 本 battery下有效。

Roadmap

  • v1.2:启用 S_famllmmap 嵌入归因,容器已具备 torch/e5 环境);
  • v1.2:多参考注册表——同一声称身份比对多份参考,取最小距离;
  • v1.2:拒答梯度/长度服从作为正式评分信号(当前仅存档);
  • 参考库扩充DeepSeek-V4、qwen3-8b 已入库GLM-5.2/Kimi/闭源 API 系待采 detector strict 每模型仅 ~14K tokens

8. 相关文档

  • 三件套运行手册:FINGERPRINT_BENCHMARKS_RUN.md
  • 三件套实现细节:bash/fingerprint/README.md
  • 理论背景:/data1/xii/model_fingerprint_detection.md
  • 集成入口:bash/run.pyFUSION_BENCHMARKS / FINGERPRINT_SCRIPTS['fp_fusion']