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)。

工作原理

  1. 挑战生成 – 三个确定性提示要求模型输出长整数。由于随机数生成器中的细微偏差,不同模型家族之间的具体数字略有不同。
  2. 指纹提取 – 响应被转换为两个特征:
    • 基于 Hellinger 距离的与全局模型中心的相似度(在去除环境特定漂移后)。
    • 有序块数字序列特征。 最终得分为 0.75 * Hellinger + 0.25 * sequence。
  3. 概率计算 – 所有候选模型的得分通过 soft-max(温度 β)得到概率分布。模型家族概率由其成员求和得到。
  4. 结果 – 工具报告最可能的模型(及其家族)以及计算出的概率。如果目标模型不在库中,则返回最接近的已知模型。

运行工具

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 进行指纹识别,对于需要验证实际查询的模型版本的开发者非常有用,尤其是在提供商的模型名称可能模糊或隐藏的环境中。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目