xqy2006/ModelTrace
主动探测模型归因
ModelTrace – 本地模型归属工具
它是什么
- 一个基于 Python 的实用工具,试图识别哪个 LLM(例如 OpenAI GPT 系列或 Anthropic Claude)生成了给定的响应。
- 它通过向目标模型发送三个精心设计的“挑战”提示,从输出中提取数字指纹,并将其与本地已知模型指纹库进行比较。
主要组件
| 文件/文件夹 | 作用 |
|---|---|
app.py |
FastAPI/Gradio 网络服务器,在 http://127.0.0.1:7860/ 提供 UI。 |
fingerprint.py |
实现指纹提取和归属算法。 |
bank_builder.py |
构建和校准指纹库(参考库)。 |
challenge_suite.py |
生成用于测试的三个独立整数生成挑战。 |
enrollment.py |
处理对 OpenAI 或 Anthropic 的 API 调用,收集模型答案,并存储以供后续分析。 |
rebuild_unified_bank.py |
将各个库合并为推理时使用的单一全局库。 |
static/ 和 templates/ |
用于完全在客户端运行的仅浏览器演示的前端资源。 |
data/ |
存储预计算的指纹库(*_bank.json、unified_bank.json)和原始参考日志(*_reference.jsonl)。 |
工作原理
- 挑战生成 – 三个确定性提示要求模型输出长整数。由于随机数生成器中的细微偏差,不同模型家族之间的具体数字略有不同。
- 指纹提取 – 响应被转换为两个特征:
- 基于 Hellinger 距离的与全局模型中心的相似度(在去除环境特定漂移后)。
- 有序块数字序列特征。
最终得分为
0.75 * Hellinger + 0.25 * sequence。
- 概率计算 – 所有候选模型的得分通过 soft-max(温度
β)得到概率分布。模型家族概率由其成员求和得到。 - 结果 – 工具报告最可能的模型(及其家族)以及计算出的概率。如果目标模型不在库中,则返回最接近的已知模型。
运行工具
python -m pip install -r requirements.txt
python start.py # 在 http://127.0.0.1:7860/ 启动 Web UI
- 手动模式 – 粘贴三个挑战提示,在要测试的模型上运行,然后将三个完整输出粘贴到 UI 中。
- API 模式 – 提供基础 URL、API 密钥和模型名称;工具将自动调用模型(支持 OpenAI Chat Completions 和 Anthropic Messages)并为您执行三个挑战。
指纹库
- 目前附带两个家族(GPT 类 和 Claude 类),涵盖 18 个具体模型版本(例如
gpt-5.6-luna、claude-opus-5)。 - 该库基于官方 Codex 订阅(GPT)和 OAIPro 服务(Claude)构建。
- 可以通过提供的 API 或在新挑战数据上运行
bank_builder.py来创建或扩展新库。
与 Codex 集成
- 一个单独的插件 ModelTrace Guard 可以安装在 Codex CLI 中。它会自动在每个 Codex 任务的后台运行三个挑战,记录结果,并在模型指纹意外变化时提醒用户。
- 该插件无需消耗额外模型配额即可进行 UI 刷新;只有三个挑战调用使用推理积分。
限制与注意事项
- 归属是概率性的,仅与指纹库一样好;结果是提示性的,而非确定性的。
- 不在库中的模型仍会被分配给最接近的已知模型,这可能具有误导性。
- Claude 的“Code”端点由于系统提示效应显示出更大的偏差,因此工具建议不要在那里使用。
- API 密钥从不写入磁盘;它们仅在请求期间存在。
致谢
- 灵感来自
hanlinwenyuan/hlwy-ai-checker,它首次证明了细微的数字生成偏差可用于跨 API 一致性检查。
ModelTrace 提供了一种轻量级、本地运行的方式来对 LLM 进行指纹识别,对于需要验证实际查询的模型版本的开发者非常有用,尤其是在提供商的模型名称可能模糊或隐藏的环境中。
相关
- 项目
- 项目
- 项目
- 项目
- 项目