From 2f4bbfe871b1a9e2dbcc8a25f1d87338cdb62eca Mon Sep 17 00:00:00 2001 From: ruoxi_sun Date: Thu, 3 Sep 2026 02:36:45 +0000 Subject: [PATCH] stop tracking fingerprint markdown docs (keep files on disk) --- FINGERPRINT_BENCHMARKS_RUN.md | 398 ------------------ bash/fingerprint/README.md | 61 --- bash/fingerprint/fp_fusion/README.md | 236 ----------- .../fp_fusion/references/README.md | 36 -- 4 files changed, 731 deletions(-) delete mode 100644 FINGERPRINT_BENCHMARKS_RUN.md delete mode 100644 bash/fingerprint/README.md delete mode 100644 bash/fingerprint/fp_fusion/README.md delete mode 100644 bash/fingerprint/fp_fusion/references/README.md diff --git a/FINGERPRINT_BENCHMARKS_RUN.md b/FINGERPRINT_BENCHMARKS_RUN.md deleted file mode 100644 index c3c698f..0000000 --- a/FINGERPRINT_BENCHMARKS_RUN.md +++ /dev/null @@ -1,398 +0,0 @@ -# 指纹 / 模型安全三件套:功能详解 + 运行手册(llmmap · llm_verify · llm_fingerprint_detector) - -> 本文档说明已接入 evalstone 的三个指纹 / 模型安全 benchmark。 -> 三者**不经过 EvalScope 数据集管线**,由 `bash/fingerprint/` 下的独立执行器直接探测被测端点, -> 但产出与 EvalScope 同构的报告,`collect_results.py` 可像普通 benchmark 一样汇总进 CSV/Excel。 -> 相关代码入口:`bash/run.py` 的 `--suite fingerprint` / `ALL_FINGERPRINT`(`bash/run.py:138`)。 -> 理论说明见 `/data1/xii/model_fingerprint_detection.md`,实现注意见 `bash/fingerprint/README.md`。 - ---- - -## 目录 - -- [0. 三件套是什么(30 秒版)](#0-三件套是什么30-秒版) -- [1. 功能详解 / 识别粒度:识别"模型"还是"模型家族"?](#1-功能详解--识别粒度识别模型还是模型家族) -- [2. 支持哪些模型(三件套各自的能力边界)](#2-支持哪些模型三件套各自的能力边界) -- [3. 线上公开数据 / 别人测过的数据](#3-线上公开数据--别人测过的数据) -- [4. 前置条件](#4-前置条件) -- [5. 一条命令跑完三个(fingerprint 套件)](#5-一条命令跑完三个fingerprint-套件) -- [6. 单独跑某一个(含各工具独立用法)](#6-单独跑某一个含各工具独立用法) -- [7. 参数速查表](#7-参数速查表) -- [8. 输出与结果汇总](#8-输出与结果汇总) -- [9. 实测示例](#9-实测示例) -- [10. 常见坑 / 排障](#10-常见坑--排障) -- [11. 参考](#11-参考) - ---- - -## 0. 三件套是什么(30 秒版) - -| benchmark | 工具仓库 | 一句话定位 | 得分含义(0~1) | -|---|---|---|---| -| `llmmap` | [LLMmap](/data1/xii/LLMmap) | **模型身份识别**:"这段回答是哪个模型写的?"(open-set 检索) | 无 `--expected-model` 时 = 距离置信度;有 = Top-1 身份严格匹配 flag(1.0/0.0) | -| `llm_verify` | [llm-verify](/data1/xii/llm-verify) | **API 欺诈检测**:"这个 API 是不是在骗我?"(红旗+裁决) | `NO_FRAUD_SIGNALS`=1.0 / `INCONCLUSIVE`=0.5 / `SUSPICIOUS`=0.25 / `FRAUD_DETECTED`=0.0 | -| `llm_fingerprint_detector` | [llm-fingerprint-detector](/data1/xii/llm-fingerprint-detector) | **单 token 分布验证**:"它是不是它声称的那个模型?"(JSD 比对) | `max(0, 1-meanJSD)`;无参考时跑"自一致"模式(采两次互比) | - -共同核心思想:把被测端点当成"未知模型",靠**固定的探测问题 + 回答模式**来认出它 / 判断它有没有撒谎, -而不是相信模型自称的身份。 - ---- - -## 1. 功能详解 / 识别粒度:识别"模型"还是"模型家族"? - -这是三个工具**本质区别**的地方。先给结论,再逐个展开: - -| 工具 | 能识别**精确模型**? | 能识别**模型家族**? | 本质工作方式 | -|---|---|---|---| -| **LLMmap** | ✅ 模板库内的模型可精确指认 | ✅ 库外模型可"归族"(最邻近检索,通常落在同家族/同规模附近) | open-set 无监督检索(52 个模板 + 预训练编码器) | -| **LLM Verify** | ❌ 不回答"是谁" | ❌ 不做身份/家族归因 | 只判"行为与声称是否一致"+ 收集欺诈信号 | -| **llm-fingerprint-detector** | ✅ 有参考时精确验证"是不是某模型" | 🟡 可通过距离分档看出"家族亲疏" | 与给定参考做二值比对(match/uncertain/mismatch),不做 open-set 检索 | - -### 1.1 LLMmap —— 模型与家族都能识别 - -- **工作流程**:发 8 条固定指纹查询(identity/probe/越狱等)→ 收集回答 → 用预训练编码器把"查询+回答"编码成 384 维指纹向量 → 与 52 个已知模板做 open-set 距离检索 → 输出 Top-K(距离越小越像)。 -- **精确识别**:当被测模型**在 52 个模板库内**时,能精确指认到具体模型名(如 `meta-llama/Meta-Llama-3.1-8B-Instruct`)。 -- **家族归因**:当被测模型**不在库内**(如全新模型)时,退化为 open-set 最近邻——输出距离最近的 Top-K,通常落在**同家族 / 同规模**的模型上,即"归族"。本机实测:Qwen3-4B(库外)→ Top-1 = `Qwen/Qwen2.5-3B-Instruct`(Qwen 家族),距离 13.9 vs 次近 50.9,断层明显。 -- **想精确识别库外模型**:跑 `add_new_template.py` 入库(无重训,但每模型要 N×8 次完整生成,CPU 上很慢)。入库前只能归族,不能精确指认。 -- **本机评估精度**:`python test_model.py ./data/pretrained_models/default -k 3` 可在作者测试集上评估 Top-K 准确率。 - -### 1.2 LLM Verify —— 不做身份识别,只做欺诈裁决 - -- **工作流程**:对端点跑 32 条取证探测(identity / capability / fingerprint 三套件)→ 收集回答文本 + 延迟 + token 用量 + 错误 → 多路信号分析(身份一致性 / 知识截止一致性 / 能力边界 / 代理信号 / 相似性)→ 汇总红旗(按严重级排序)→ 裁决。 -- **识别粒度**:它**不回答"这模型是谁"**,也**不做家族归因**。它的输出是"这个端点有没有在骗人": - - 例如红旗下"自称 gpt-4,而请求的是 Qwen3-4B"——它只能发现"声称与请求不符",不能告诉你是哪个模型; - - 它能做的是**交叉比对**:多个声称"不同型号"的端点是否其实是**同一个底层模型**(相似度>阈值判为同一)。 -- **裁决等级(fail-closed)**:`FRAUD_DETECTED`(0.0) / `SUSPICIOUS`(0.25) / `INCONCLUSIVE`(0.5) / `NO_FRAUD_SIGNALS`(1.0)。证据不足**绝不判清白**:至少 8 条成功探测且成功率≥80% 才算证据充分。 - -### 1.3 llm-fingerprint-detector —— 验证"是不是它",不做开放集识别 - -- **工作流程**:对端点采样**单 token 输出分布**(随机数字/颜色/字母/动物/抛硬币等 16 个 cell,中英文,`temperature=1.0`、`max_tokens=16`、关隐藏思考)→ 与**参考指纹**逐 cell 算 JSD → 按论文基线尺度给出 match/uncertain/mismatch。 -- **识别粒度**: - - 它不做 open-set 检索,**必须给一个参考指纹**才能下结论("它是不是参考那个模型"); - - 距离本身能体现**家族亲疏**:论文公开基线上,同模型 JSD≈0.14、同模型不同 provider≈0.227、不同模型≈0.463。本机实测:Qwen3-4B vs qwen3-30b(同族)=0.271;Qwen3-4B vs llama=0.682、vs kimi=0.600(异族)。 -- **无参考时的"自一致模式"**(evalstone 默认):采两次互比,看端点**自己稳不稳定**——能暴露"聚合器轮换后端",但**不能证明身份**。 - ---- - -## 2. 支持哪些模型(三件套各自的能力边界) - -### 2.1 LLMmap —— 内置 52 个模板(全列表) - -模板文件:`LLMmap/data/pretrained_models/default/templates.json`,共 **52 个模型**: - -| 家族 | 模型 | -|---|---| -| **Qwen** | Qwen2-1.5B / 7B / 72B-Instruct、Qwen2.5-0.5B / 3B-Instruct | -| **Llama** | Llama-2-7B-chat、Llama-3-8B / 70B-Instruct、Llama-3.1-8B / 70B-Instruct、Llama-3.2-1B / 3B-Instruct、Llama-3-8B-Gradient-1048k、Llama-2-7B-32K | -| **GPT/Claude(API 采样)** | gpt-3.5-turbo、gpt-4-turbo-2024-04-09、gpt-4o-2024-05-13、claude-3-opus/haiku/sonnet | -| **Gemma** | gemma-2b / 7b / 1.1-2b / 1.1-7b / 2-9b / 2-27b | -| **Phi** | Phi-3-mini / medium (4k/128k)、Phi-3.5-mini / MoE | -| **Mistral/Mixtral** | Mistral-7B-Instruct v0.1/v0.2/v0.3、Mixtral-8x7B-v0.1 | -| **其他** | aya-23-8B/35B、zephyr-7b-beta、Nous-Hermes-2-Mixtral、Smaug-Llama-3-70B、granite-3.0/3.1-8b、internlm2_5-7b-chat、Falcon3-7B/10B、Phi-3 系、openchat-3.5/3.6、SOLAR-10.7B、EuroLLM-1.7B 等 | - -- **支持新增**:库外模型先用"归族";要精确识别就 `add_new_template.py <名字> <类型> --num_prompt_confs N` 入库(类型 0=HF / 1=OpenAI / 2=Anthropic)。 -- 注意 LLMmap0.2 是 PyTorch 重制版,`add_new_template` 目前主要支持 HF 后端。 - -### 2.2 LLM Verify —— 无模型库,任意兼容端点 - -- **没有任何模型库/模板**。只要能连上的 OpenAI / Anthropic / 兼容端点,`model_configs` 里加一行就能测(`provider`:`openai` / `anthropic` / `suspect` / `generic`;`protocol` 自动推断)。 -- "支持哪些模型"= **全部**,代价是它不识别身份,只管欺诈信号。 -- 想横向对比时,官方建议用免费层拿官方基线:**Gemini**(15 RPM 免费)、**Mistral**(试用额度)、**Groq**、**OpenRouter**(部分模型免费)。 - -### 2.3 llm-fingerprint-detector —— 11 个内置参考 + 任意模型自采 - -内置参考(`node dist/cli.js references` 列出,论文公开数据集采样,2026-07-08 采集,15 cells): - -| 内置 reference id(也直接可作 `--detector-reference`) | -|---| -| `mistralai/mistral-small-3.2-24b-instruct` | -| `moonshotai/kimi-k2` | -| `deepseek/deepseek-chat` | -| `meta-llama/llama-3.1-8b-instruct` | -| `qwen/qwen3-30b-a3b-instruct-2507` | -| `openai/gpt-4o` · `openai/gpt-4o-mini` · `openai/gpt-4.1-mini` | -| `google/gemini-2.5-flash` | -| `z-ai/glm-4.5` | -| `anthropic/claude-sonnet-4.5` | - -- 之外任意模型:只要用 `fingerprint --out xxx.json` 对可信端点采一份**同协议参考**,立刻就能验证(每模型约 100~400 次单 token 请求)。 -- 本机已备同协议参考:`qwen3-4b_reference.json`(Qwen3-4B)、`glm520_reference.json`(GLM-5.2)。 -- 注意:这 11 个内置参考用**论文协议**采样,与本机 `one-token/v1` 协议对比**仅指示性**(`protocolMismatch` 标志)。 - ---- - -## 3. 线上公开数据 / 别人测过的数据 - -| 工具 | 公开论文 | 公开数据集 | 在线 Demo / 他人测试数据 | -|---|---|---|---| -| **LLMmap** | ✅ [arXiv:2407.15847](https://arxiv.org/pdf/2407.15847),**USENIX Security 2025**(Pasquini 等) | 🟡 论文方法公开,作者测试过当时 50+ 模型;本仓库自带 52 模板 + 预训练模型 + 测试集可本地复现(`test_model.py -k 3` 评估 Top-K 精度) | ❌ 无官方在线 Web 工具;仓库内 `results/` 是本机自测数据 | -| **LLM Verify** | 🟡 开源项目 README 附**真实案例演示**(调查 opuscode.pro 等模型转卖站) | ❌ 无公开测试数据集;裁决靠本地跑 32 条探测 + 你的基线端点 | 🟡 无在线服务版;可用免费层 API 自建官方基线 | -| **llm-fingerprint-detector** | ✅ [arXiv:2607.10252](https://arxiv.org/abs/2607.10252)("One Token Is Enough",Bruckner) | ✅ **Zenodo 公开数据集**:DOI [10.5281/zenodo.21278557](https://doi.org/10.5281/zenodo.21278557)(CC-BY-4.0,含 11 个模型的单 token 采样数据,即内置参考的来源);论文代码 DOI 10.5281/zenodo.21278793 | ✅ **在线 Web 版**:[tosea.ai/free-tools/llm-api-fingerprint-checker](https://tosea.ai/free-tools/llm-api-fingerprint-checker)(纯浏览器运行,免费免安装);**论文公开基线**:同模型 JSD≈0.14 / 同模型异 provider≈0.227 / 不同模型≈0.463 | - -> 一句话:想引用"别人测过的数据"——LLMmap 看 USENIX Security 25 论文;detector 有 Zenodo 公开数据集 + 在线网页工具可直接试;LLM Verify 没有公开数据,但自带真实转卖站案例分析。 - ---- - -## 4. 前置条件 - -### 4.1 需要的东西 - -| 项 | 容器内(推荐,零配置) | 宿主机直接跑 | -|---|---|---| -| 代码仓库 | 镜像内置:`/opt/evalscope` | `/data1/eval/evalstone` | -| 三个工具仓库 | 镜像内置:`/opt/fptools/{LLMmap,llm-verify,llm-fingerprint-detector}` | `/data1/xii/{LLMmap,llm-verify,llm-fingerprint-detector}` | -| LLMmap 解释器 | `LLMMAP_PYTHON=/usr/local/bin/python3`(已烘入) | `/root/miniconda3/envs/llmmap/bin/python`(torch+transformers+e5 缓存) | -| LLM Verify 解释器 | `LLMVERIFY_PYTHON=/usr/local/bin/python3`(已烘入) | `/root/miniconda3/envs/llmverify/bin/python`(fastapi+httpx) | -| detector 运行时 | Node ≥18.17,`DETECTOR_NODE=node`(已烘入) | 任意 Node,仓库已 `npm run build` | -| 参考指纹 | `/opt/fptools/llm-fingerprint-detector/*_reference.json` | 同 schema 的 json | - -> 容器镜像:`evalscope-complete-py312-fp:v2`(自包含,load 后零配置)。 -> 容器以 **host 网络**运行,因此容器内直接访问 `localhost:30000` / `localhost:30002` 等宿主机端点即可。 - -### 4.2 进入容器(如果走容器跑法) - -```bash -docker run -d --name fp --network host evalscope-complete-py312-fp:v2 bash -docker exec -it fp bash -cd /opt/evalscope -``` - ---- - -## 5. 一条命令跑完三个(fingerprint 套件) - -```bash -python bash/run.py --suite fingerprint \ - --model <被测端点的模型名> \ - --api-url /v1 -``` - -示例(容器内,测 CPU 上的 Qwen3-4B 测试端点 :30002): - -```bash -cd /opt/evalscope -python bash/run.py --suite fingerprint \ - --model Qwen3-4B \ - --api-url http://localhost:30002/v1 -``` - -套件 = `llmmap` + `llm_verify` + `llm_fingerprint_detector` 三个依次跑完, -每个跑完自动写报告并刷新 summary(`results/.xlsx/.csv`)。 - ---- - -## 6. 单独跑某一个(含各工具独立用法) - -### 6.1 llmmap —— 这模型是谁? - -**evalstone 集成方式:** - -```bash -python bash/run.py --datasets llmmap \ - --model Qwen3-4B --api-url http://localhost:30002/v1 -``` - -- 发送 8 条指纹查询 → 编码回答 → 与 52 模板 open-set 检索 → Top-K。 -- `--expected-model`(已知真实身份时):score 变严格匹配 flag(1.0/0.0): - -```bash -python bash/run.py --datasets llmmap \ - --model GLM-5.2-w4a8-p800-2 --api-url http://localhost:30000/v1 \ - --expected-model GLM-5.2-w4a8-p800-2 -``` - -**工具独立用法**(`/data1/xii/LLMmap`,环境 `llmmap`): - -```bash -cd /data1/xii/LLMmap -PY=/root/miniconda3/envs/llmmap/bin/python - -# ① 交互式:人工发查询、粘贴回答 -$PY main_interactive.py --inference_model_path ./data/pretrained_models/default - -# ② 非交互:回答文件每行一条(8条) → 识别 Top-K -$PY run_identify.py answers.txt -k 6 --device cpu - -# ③ 自动:对本地 HF 模型一条龙(发查询→收回答→识别) -$PY run_real_identify.py --model_dir /data1/models/Qwen3-4B \ - --k 6 --device cpu --save_answers qwen_answers.txt - -# ④ 入库新模型(精确指认库外模型) -$PY add_new_template.py my-new-model 0 --num_prompt_confs 100 - -# ⑤ 在作者测试集上评估 Top-K 精度 -$PY test_model.py ./data/pretrained_models/default -k 3 -``` - -已知坑:`LLMmap/llm.py` 的 HF 后端强制要求 `HUGGINGFACE_API_KEY`(本地也给假 key);入库慢(CPU 200 次生成几小时)。 - -### 6.2 llm_verify —— 这个 API 是不是在骗我? - -**evalstone 集成方式:** - -```bash -python bash/run.py --datasets llm_verify \ - --model Qwen3-4B --api-url http://localhost:30002/v1 -``` - -- 跑 32 条取证探测 → 红旗 → 裁决。可选 `--protocol`、`--suites`、`--bench-timeout`。 - -**工具独立用法**(`/data1/xii/llm-verify`,环境 `llmverify`,FastAPI 服务): - -```bash -cd /data1/xii/llm-verify -/root/miniconda3/envs/llmverify/bin/python -m uvicorn src.main:app --host 0.0.0.0 --port 8000 -# 或: benchmarker serve --host 0.0.0.0 --port 8000 -``` - -```bash -B=http://localhost:8000 - -# ① 单套件(identity | capability | fingerprint) -curl -s -X POST $B/api/v1/benchmarks/ -H "Content-Type: application/json" -d '{ - "name": "GLM identity", "prompt_suite": "identity", - "model_configs": [{"model_name": "GLM-5.2-w4a8-p800-2", "provider": "suspect", - "api_key": "dummy", "api_base_url": "http://localhost:30000/v1"}]}' - -# ② 深度分析(最常用:三套件全跑 + 红旗 + 裁决) -curl -s -X POST $B/api/v1/analysis/deep -H "Content-Type: application/json" -d '{ - "name": "GLM 全量", "suites": ["identity","capability","fingerprint"], - "model_configs": [{"model_name": "GLM-5.2-w4a8-p800-2", "provider": "suspect", - "api_key": "dummy", "api_base_url": "http://localhost:30000/v1"}]}' - -# ③ 探测明细 / 行为指纹 -curl -s "$B/api/v1/results/" -curl -s "$B/api/v1/results//fingerprint?model_name=GLM-5.2-w4a8-p800-2" - -# ④ 两个 run 对比(同一套件下) -curl -s -X POST $B/api/v1/results/compare -H "Content-Type: application/json" \ - -d '{"run_a":"","run_b":""}' -``` - -`model_configs` 字段:`model_name` / `provider`(openai|anthropic|suspect|generic) / `api_base_url`(带 `/v1`) / `api_key`(本地可空/dummy) / `protocol`(留空自动推断)。 -`api_key` 为空时服务会从 env(`SUSPECT_API_KEY`/`OPENAI_API_KEY`)读;evalstone 集成自动填占位 key。 - -### 6.3 llm_fingerprint_detector —— 单 token 输出分布验证(重点) - -**evalstone 集成方式**(两种模式二选一): - -```bash -# A. 自一致模式(默认)——只证明"端点稳定",不证明身份 -python bash/run.py --datasets llm_fingerprint_detector \ - --model Qwen3-4B --api-url http://localhost:30002/v1 - -# B. 参考验证模式——验证"是不是它声称的模型",测身份必须用这个 -python bash/run.py --datasets llm_fingerprint_detector \ - --model Qwen3-4B --api-url http://localhost:30002/v1 \ - --detector-reference /data1/xii/llm-fingerprint-detector/qwen3-4b_reference.json \ - --detector-preset strict -``` - -**工具独立用法**(`/data1/xii/llm-fingerprint-detector`,Node,已 `npm run build`): - -```bash -cd /data1/xii/llm-fingerprint-detector -export LLM_FINGERPRINT_API_KEY=dummy # 本地端点无鉴权 - -node dist/cli.js references # ① 列出 11 个内置参考 -node dist/cli.js fingerprint --base-url http://localhost:30000/v1 \ - --model GLM-5.2-w4a8-p800-2 --preset standard --out ref.json # ② 采样指纹 -node dist/cli.js verify --base-url http://localhost:30000/v1 \ - --model GLM-5.2-w4a8-p800-2 --preset standard --reference ref.json # ③ 验证 -node dist/cli.js compare a.json b.json --json # ④ 离线比较两份指纹 -``` - -- **判定标尺**(meanJSD,base 2):`match ≤ 0.25 < uncertain ≤ 0.35 < mismatch`;CLI 退出码 `0=match, 2=mismatch, 3=uncertain, 4=insufficient, 1=error`;`score = max(0, 1-meanJSD)`。 -- **`--detector-reference` 三类来源**:①本地同协议 json(`qwen3-4b_reference.json` / `glm520_reference.json`);②内置 id(上表 11 个,如 `deepseek/deepseek-chat`,仅指示性);③自采(`fingerprint --out my_ref.json`)。 -- 选项:`--preset quick(4×15)/standard(8×25)/strict(16×25)`、`--cells`/`--samples`、`--concurrency`、`--timeout`(ms)、`--api-key-env`。 -- `data/reference-fingerprints.sample.json` 是多模型合集(`models` 数组),**不能**直接当单模型 reference 用。 - ---- - -## 7. 参数速查表(fingerprint 相关) - -| 参数 | 默认值 | 说明 | -|---|---|---| -| `--suite fingerprint` | — | 一次跑三个指纹 benchmark | -| `--datasets <名>` | — | 只跑某一个(`llmmap` / `llm_verify` / `llm_fingerprint_detector`) | -| `--model` | `DeepSeek-V4-Flash-Int8` | 被测端点暴露的模型名 | -| `--api-url` | `http://localhost:30000/v1` | OpenAI 兼容端点(必须带 `/v1`) | -| `--tools-root` | env `FP_TOOLS_ROOT`,默认 `/data1/xii` | 三个工具仓库的父目录 | -| `--llmmap-python` | env `LLMMAP_PYTHON` | LLMmap 执行器解释器 | -| `--verify-python` | env `LLMVERIFY_PYTHON` | LLM Verify 执行器解释器 | -| `--detector-node` | env `DETECTOR_NODE`,默认 `node` | detector 的 Node 可执行文件 | -| `--detector-reference` | 无 | 参考指纹 JSON 或内置 id;缺省 = 自一致模式 | -| `--detector-preset` | `standard` | `quick` / `standard` / `strict` | -| `--expected-model` | 无 | 仅 llmmap:已知真实身份,score 变严格匹配 flag | -| `--fingerprint-timeout` | 120 | 单请求超时(秒) | -| `--folder-name` | `--model` | 顶层输出目录名(`output//...`) | -| `--seed` | 42 | 报告路径里的 seed | - -> 指纹探测(三个执行器)始终给请求注入 `chat_template_kwargs.thinking=false` 关闭思考链, -> 与 `run.py --thinking` 无关,无需也无法用该参数控制。 - ---- - -## 8. 输出与结果汇总 - -每个 benchmark 产出与 EvalScope 同构的报告: - -```text -output///seed_/reports/.json -``` - -报告至少含 `score` 和 `num`,另有各自附加字段: - -| benchmark | 报告附加字段 | -|---|---| -| llmmap | `score_mode`、`top1`(name+distance)、`topk` | -| llm_verify | `verdict`、`successful_probes`、`avg_latency_ms`、`red_flags[]` | -| llm_fingerprint_detector | `mode`(reference_verify / self_consistency)、`verdict`、`mean_jsd`、`split_half_jsd`、`reference`、`most_divergent[]` | - -另外: -- 计时备份:`output//active_time/__.json` -- 每个 benchmark 跑完,run.py 自动重写汇总 `results/.xlsx` / `.csv`(指纹类归入分类 **"模型安全与指纹"**)。 -- 想只做汇总不重跑:`python bash/collect_results.py --output-dir output/Qwen3-4B --model Qwen3-4B` - ---- - -## 9. 实测示例 - -以下为 Qwen3-4B @ CPU 测试端点 `:30002` 的实测结果,可直接对照: - -``` -分类 Benchmark 得分 实测时间(h) 总样本数 -模型安全与指纹 llmmap 0.7690 0.08 8 ← Top-1=Qwen/Qwen2.5-3B-Instruct(家族归因,距离 13.9 vs 次近 50.9) -模型安全与指纹 llm_verify 0.0 0.06 32 ← FRAUD_DETECTED(自称 gpt-4 + 平均延迟 29.5s 红旗) -模型安全与指纹 llm_fingerprint_detector 0.92 0.07 4 ← 自一致 match, meanJSD≈0.076 -``` - -> 注:llm_verify 的 0.25(仅延迟红旗→SUSPICIOUS)与 0.0(多一条身份红旗→FRAUD_DETECTED) -> 取决于目标端点当时的行为,属正常波动;CPU 端点延迟高导致的延迟红旗是预期现象。 -> detector 的 0.92 是自一致结果,**想证明身份请带 `--detector-reference` 重跑**。 - ---- - -## 10. 常见坑 / 排障 - -| 现象 | 原因与处理 | -|---|---| -| detector 报 `unsupported formatVersion undefined`,且路径指向 `package.json` 之类 | `--detector-reference` 传的不是单模型指纹 JSON(传成了目录 / package.json / 多模型合集 `data/reference-fingerprints.sample.json`)。改传单模型同协议 json(含 `formatVersion:1` + `model` + `cells`,如 `qwen3-4b_reference.json`)或内置 reference id。自验:`node dist/cli.js compare --json`,合法时 `meanJsd=0, verdict=match` | -| 自一致模式 match 但没法下身份结论 | 正常,自一致只测稳定性。需带 `--detector-reference` 做参考验证 | -| `LLM Verify` 全部探测失败 | api_key 为空时 httpx 会拒绝空 Bearer 头;执行器会自动填占位 key。若仍失败,检查端点的 `/v1` 路径与 `--fingerprint-timeout` 是否过小 | -| llmmap 直接 0 分报错 | 超过一半查询失败时执行器判 0 分并报错(避免用空回答算出假距离)。CPU 端点慢可调大 `--fingerprint-timeout` | -| CPU 端点上 llm_verify 出延迟红旗 | 预期现象(如 29.5s 平均延迟),不是镜像缺陷 | -| `detector CLI not built` | 工具仓库未 `npm run build`;镜像内已构建,宿主机需自行 `cd llm-fingerprint-detector && npm run build` | -| 容器里找不到 tools | 镜像内 `FP_TOOLS_ROOT=/opt/fptools`;宿主机用 `--tools-root /data1/xii`(默认) | -| 全局 `HF_HUB_OFFLINE=1` 导致其他组件异常 | 镜像已把 e5 嵌入模型缓存烘入,llmmap 在进程内部自行离线,不要全局开 HF_HUB_OFFLINE | -| LLMmap 想精确识别库外模型却只"归族" | 需先 `add_new_template.py` 入库(无重训,但很慢);入库前只能归族 | - ---- - -## 11. 参考 - -- 实现与坑:`bash/fingerprint/README.md` -- 理论说明 / 框架对比 / 扩展性:`/data1/xii/model_fingerprint_detection.md` -- 集成入口:`bash/run.py`(`ALL_FINGERPRINT` / `SUITES['fingerprint']` / `run_fingerprint_benchmark`) -- 汇总:`bash/collect_results.py`(分类"模型安全与指纹") -- LLMmap 论文:arXiv:2407.15847(USENIX Security 2025)| llm-fingerprint-detector 论文:arXiv:2607.10252 + 公开数据集 DOI 10.5281/zenodo.21278557 + 在线版 tosea.ai/free-tools/llm-api-fingerprint-checker \ No newline at end of file diff --git a/bash/fingerprint/README.md b/bash/fingerprint/README.md deleted file mode 100644 index b6ed766..0000000 --- a/bash/fingerprint/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# 指纹 / 模型安全类 Benchmark(llmmap · llm_verify · llm_fingerprint_detector) - -本目录包含三个**非 EvalScope 数据集管线**的特殊 benchmark。它们把被测端点当作 -"未知模型"做身份识别与欺诈检测,并产出与 EvalScope 同构的报告 -(`output///seed_/reports/.json`,含 `score` 字段), -因此 `bash/collect_results.py` 可以像普通 benchmark 一样把它们汇总进 Excel/CSV。 - -| benchmark | 工具 | 做什么 | 得分含义(0~1) | -|---|---|---|---| -| `llmmap` | [LLMmap](/data1/xii/LLMmap) | 发送 8 条指纹查询 → open-set 与 52 个已知模板比距离 | 有 `--expected-model` 时 = Top-1 身份匹配 flag;否则 = 距离置信度 | -| `llm_verify` | [llm-verify](/data1/xii/llm-verify) | 32 条取证探测(identity/capability/fingerprint)→ 红旗+裁决 | NO_FRAUD_SIGNALS=1.0 / INCONCLUSIVE=0.5 / SUSPICIOUS=0.25 / FRAUD_DETECTED=0.0 | -| `llm_fingerprint_detector` | [llm-fingerprint-detector](/data1/xii/llm-fingerprint-detector) | 单 token 输出分布采样 → JSD 距离 | `max(0, 1-meanJSD)`;无参考时跑自一致模式(采两次互比) | - -## 运行 - -```bash -# 整个指纹套件 -python bash/run.py --suite fingerprint \ - --model --api-url http://localhost:30000/v1 - -# 只跑其中一个 -python bash/run.py --datasets llm_verify --model ... --api-url ... - -# detector 提供同协议参考指纹(硬比较),缺省为自一致模式 -python bash/run.py --datasets llm_fingerprint_detector \ - --detector-reference /path/to/reference.json [--detector-preset strict] - -# 已知真实身份时,llmmap 输出严格匹配得分(1.0/0.0) -python bash/run.py --datasets llmmap --expected-model GLM-5.2 ... -``` - -## 依赖与环境(重要) - -三个工具仓库默认位于 `/data1/xii`(可用 `--tools-root` 覆盖), -各执行器需要不同的解释器,均可用 CLI 或环境变量覆盖: - -| 执行器 | 默认解释器 | 环境变量 | 要求 | -|---|---|---|---| -| run_llmmap.py | `/root/miniconda3/envs/llmmap/bin/python` | `LLMMAP_PYTHON` | torch + transformers + 本地缓存的 e5 嵌入模型 | -| run_llm_verify.py | `/root/miniconda3/envs/llmverify/bin/python` | `LLMVERIFY_PYTHON` | fastapi + httpx + pydantic | -| run_llm_detector.py | `sys.executable`(任意) | `DETECTOR_NODE` | Node ≥18.17 且仓库已 `npm run build` | - -> 在 evalstone 的 Docker 容器内运行时,若容器里没有这些解释器/仓库, -> 要么把 `/data1/xii` 与 conda 环境挂载进容器,要么在宿主机上运行指纹套件。 - -## 实现注意(踩过的坑) - -- 对被测端点默认注入 `chat_template_kwargs.thinking=false` 关闭思考链 - (可用 `--thinking` 关闭该行为);思考模型会烧 max_tokens 并扭曲指纹。 -- LLM Verify 的适配器在 api_key 为空时会因 httpx 拒绝空 Bearer 头而全失败, - runner 已自动填占位 key。 -- LLMmap 在超过一半查询失败时直接判 0 分报错,避免用空回答算出假距离。 - -## 结果示例(Qwen3-4B @ CPU :30002) - -``` -分类 Benchmark 得分 实测时间(h) 总样本数 -模型安全与指纹 llmmap 0.7115 0.0836 8 ← Top-1=Qwen/Qwen2.5-3B-Instruct -模型安全与指纹 llm_verify 0.25 0.0601 32 ← SUSPICIOUS(仅延迟红旗) -模型安全与指纹 llm_fingerprint_detector 0.9239 0.0671 4 ← 自一致 match, meanJSD=0.076 -``` diff --git a/bash/fingerprint/fp_fusion/README.md b/bash/fingerprint/fp_fusion/README.md deleted file mode 100644 index d005de9..0000000 --- a/bash/fingerprint/fp_fusion/README.md +++ /dev/null @@ -1,236 +0,0 @@ -# FP-Fusion v1.1 —— 融合型模型指纹基准 - -> 把 llmmap(开放集家族归因)、llm_verify(欺诈取证/fail-closed)、 -> llm-fingerprint-detector(单 token 分布统计)三家之长合成一个 benchmark: -> **一次探测、多层证据、加权融合、单一裁决报告。** -> -> 设计动机与全部实验数据来自真实对抗测试:本机用 Qwen3-8B 权重冒充 Qwen3-4B 部署, -> 三件套两个全盲、一个半盲,fp_fusion 是唯一给出实锤级裁决的(见 §6 实验记录)。 - ---- - -## 1. 项目结构(自包含) - -```text -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_dist(JSD/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)与 文本池(并发 3,`max_tokens=256` 截断)同时跑; -基线前置独占测量(避免被自身流量污染)。CPU 端点全程 ~49 分钟,GPU 端点预估 3~5 分钟。 - ---- - -## 3. 评分体系(v1.1) - -### 3.1 四信号(各归一化 0~1) - -| 信号 | 计算 | 说明 | -|---|---|---| -| **S_dist** 分布比对(有参考时) | 相对比 `R = meanJSD ÷ max(splitHalf, 0.02)`:R<2→1.0,2~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 融合与五档裁决 - -```text -带参考: 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.25~0.36 只到灰色档, -> 但个别开放词域 cell 的真实分化高达 **0.6~1.0**——均值把铁证稀释了。 - -```text -规则: 参考验证模式下, 任一 cell 满足 [双方有效样本 ≥15 且 JSD > 0.5] - → 挂 MEDIUM dist_outlier 红旗 - → 裁决封顶 SUSPECTED_MISMATCH(VERIFIED/LIKELY_MATCH/INCONCLUSIVE 一律降档; - 连续 score 保留原值, 实现"量化分"与"实锤裁决"解耦) -``` - -### 3.4 自适应延迟判定(替代 llm_verify 的固定 10s 阈值) - -```text -decode_rate = median(文本层单条延迟 ÷ completion_tokens) # 纯解码速度 -overhead = baseline_p50 − decode_rate × 基线平均tokens # 每请求固定开销 -异常判定: overhead_ratio = baseline_p50 ÷ expected > 5 且 overhead > 5s -``` - -纯硬件慢(CPU)只抬高 decode_rate、不产生 overhead → 不再冤枉; -代理/中转给每个请求叠加固定网络开销,在短请求(基线)上最显形 → 逃不掉。 - ---- - -## 4. 使用方法 - -```bash -# evalstone 集成(推荐): -python bash/run.py --datasets fp_fusion \ - --model <被测端点声称的模型名> \ - --api-url /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`(统一 Schema,`score`+`num` 可被 collect_results 汇总, -分类"模型安全与指纹")+ `reports/raw_answers.jsonl`(全部探针原文,人工复核用)。 - -容器内参考库路径:`/opt/evalscope/bash/fingerprint/fp_fusion/references/`。 - ---- - -## 5. 输出 Schema(v1.1,关键字段) - -```jsonc -{ - "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 参考 - -```text -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 参考 - -```text -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 指纹离线比对 - -```text -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,唯一红旗=延迟 29s(CPU 误报;自称提取无 qwen 词表) | ❌ 全盲 | -| llm_fingerprint_detector (strict) | 0.703 | uncertain,meanJSD=0.297(实锤 cell 在 most_divergent 里但无利用规则) | 🟡 半识破 | -| **fp_fusion v1.1** | **0.871 ⚑** | **SUSPECTED_MISMATCH**(dist_outlier + cutoff 双红旗) | ✅ **实锤** | - -### 附:发现并修复的工程问题(对后来者有用) - -| 问题 | 根因 | 修复 | -|---|---|---| -| 34 条探针"假成功" | `httpx.ReadTimeout` 的 `str()` 为空串,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_fam(llmmap 嵌入归因,容器已具备 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.py` → `FUSION_BENCHMARKS` / `FINGERPRINT_SCRIPTS['fp_fusion']` diff --git a/bash/fingerprint/fp_fusion/references/README.md b/bash/fingerprint/fp_fusion/references/README.md deleted file mode 100644 index bd39906..0000000 --- a/bash/fingerprint/fp_fusion/references/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# FP-Fusion 参考指纹库(自包含) - -同协议(one-token/v1)可信参考指纹,供 `--reference` / `--detector-reference` 使用。 - -| 文件 | 真实模型 | 采样来源 | 日期 | -|---|---|---|---| -| 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 | -| glm53_reference.json | GLM-5.3 | api.vectron.meta-stone.com (ZhipuAi/GLM-5.3) | 2026-09-01 | -| deepseek_v4_flash_reference.json | DeepSeek-V4-Flash | api.vectron.meta-stone.com (DeepSeek/DeepSeek-V4-Flash) | 2026-09-01 | -| kimi_k3_reference.json | Kimi-K3 | api.vectron.meta-stone.com (MoonshotAi/Kimi-K3) | 2026-09-01 | -| deepseek_v4_pro_reference.json | DeepSeek-V4-Pro | api.vectron.meta-stone.com (DeepSeek/DeepSeek-V4-Pro) | 2026-09-01 | -| glm52_vectron_reference.json | GLM-5.2 (vectron) | api.vectron.meta-stone.com (ZhipuAi/GLM-5.2) | 2026-09-02 | -| minimax_m27_reference.json | MiniMax-M2.7 | api.vectron.meta-stone.com (MiniMax/MiniMax-M2.7) | 2026-09-02 | -| tiangong_taie_reference.json | TianGong/Taie | api.vectron.meta-stone.com (TianGong/Taie) | 2026-09-02 | -| deepseek_v4_flash_0731_reference.json | DeepSeek-V4-Flash-0731 | api.vectron.meta-stone.com (DeepSeek/DeepSeek-V4-Flash-0731) | 2026-09-02 | - -采集命令(detector CLI, strict 建议): - node dist/cli.js fingerprint --base-url <可信端点>/v1 --model <模型名> \ - --preset strict --out references/<名字>_reference.json - -注意: 参考会随上游静默更新而漂移,高置信场景请定期重采。 - - -## fp_fusion 独立参考(26-cell,区分于 llmdetector 的 16-cell) - -fp_fusion 的 D 层 = llmdetector 16 cells + **10 个新增 cell**(binary-season/pet/sea-mountain/tea-coffee + day-of-week,×中英)。 -为让 fp_fusion 作为独立 benchmark 真正用上新增 cell,参考指纹**分开采样**: -- 16 个共享 cell:直接复用 detector CLI 采集的 `*_reference.json` -- 10 个新增 cell:`collect_fp_extra_reference.py --api-key ... --model ... --out .json` - (复用 fp_fusion engine 的归一化逻辑,中英各 25 条;中文 binary cell 因归一化规则 - 不识别中文回答为有效,与 fp_fusion 运行时行为一致,自动被 min_valid 过滤) -- 合并:`merge_fusion_reference.py` → `*_fusion_reference.json`(26 cells, one-token/v1) - -llmdetector 比对继续用 16-cell 的 `*_reference.json`;fp_fusion 比对用 `*_fusion_reference.json`。