Fingerpoint Detector
SDK

SDK

在 TypeScript、Rust、Go 和 Python 程序里给回答评分、生成挑战,或检测一个 API 渠道。

SDK 把检测器放进你自己的程序:给已经收集的回答评分,生成随机挑战,或者向一个 API 渠道发一轮挑战再评分。四种语言提供同样的功能:

  • 离线评分:给一到三条回答评分,结果和 fpd --input FILE --json 相同。
  • 生成挑战:和网页、命令行用同一个生成器,每道挑战随机选语言和措辞,要求 292–332 个整数。
  • 在线检测:发一轮挑战并评分,取样规则和命令行的检测相同,支持 Responses、Chat Completions 和 Messages。

SDK 不做分词器探测,也不提供多轮检测;需要多轮时,在自己的程序里循环调用。

安装

TypeScript 版发布在 npm,Rust 版在 crates.io,Python 版在 PyPI,Go 版是仓库里的模块:

npm install lmfpd-sdk

TypeScript 版在 Node.js 22+ 和 Bun 1.4.4+ 上运行,打包后没有依赖。Rust 版的调用都是阻塞的。Go 版要求 Go 1.23+。Python 版要求 Python 3.10+,依赖 httpx、zstandard 和 numpy。

安装包里不带参考数据。第一次加载时,SDK 下载约 3.6 MB 的压缩数据并缓存,之后参考库更新也不需要升级 SDK,见参考数据。

给回答评分

analyze 接受一到三条回答,每条带上回答文本和挑战要求的整数个数 expected_count:

import { loadDetector } from 'lmfpd-sdk'

const detector = await loadDetector()
const analysis = detector.analyze([
  { text: reply1, expected_count: 300 },
  { text: reply2, expected_count: 311 },
  { text: reply3, expected_count: 296 },
])
console.log(analysis.decision, analysis.prediction, analysis.probability)

加载一次就可以反复评分。加载要解析约 4.5 MB 的检测参数,比一次评分慢得多(见性能),所以不要每次评分都重新加载。

检测一个 API 渠道

detect 生成挑战、并发请求、检查回答再评分。请求失败不会抛出错误,而是记在每条样本和结果的 error 里:

const result = await detector.detect({
  baseUrl: 'https://api.example.com/v1', apiKey: process.env.API_KEY!, model: 'gpt-5.6-sol', api: 'chat_completions',
})
console.log(result.error ?? result.analysis!.prediction)

只有配置无效时 detect 才报错,这时还没有发出任何请求。error 为空时,analysis 一定有排名。全部参数见 API。

读结果

decision 说明这次给出了什么:

decision条件结果
scored三条回答都有效完整排名;校准和检测器匹配时,probability 是第一名的置信度
partial宽松模式下只有一两条有效只有排名,probability 为 null
unscorable没有有效回答,或严格模式下不足三条没有排名
not_model数字的变化方式不像语言模型写的没有排名,见语言模型回答检查

一条回答至少要有 max(80, ceil(expected_count × 0.55)) 个 1–355 之间的整数才算有效。宽松模式下超出 expected_count 的部分会被截掉;严格模式不截断,要求三条完整的回答。

排名不是身份证明

结果是参考库内的封闭集合排序。不在库里的模型也会得到一个“最像”的候选,probability 只在库内模型之间比较。判断渠道是否可信时,请固定请求参数、重复多轮,并结合其他证据。

性能

在一台 Apple Silicon Mac 上测的耗时,评分取预热后 20 次的中位数:

语言加载仓库的 data/三条回答评分一条回答评分
Rust24 ms1.7 ms0.5 ms
Go31 ms2.3 ms0.7 ms
TypeScript(Node 或 Bun)30 ms6.5 ms2.2 ms
Python 3.1337 ms1.9 ms0.65 ms

Python 版用 NumPy 计算,求和顺序和其他语言不同,分数相差在 10⁻¹⁵ 左右。在线检测的耗时主要是等模型生成,和语言无关。

结果一致性

四种语言的实现都对照同一组测试数据检查:数字解析、请求构造、13 种流式和 JSON 响应的处理,以及 12 组评分结果。评分结果的相对误差不超过 10⁻⁹,文字和状态必须完全相同。在仓库里运行 bun run sdk:check 会依次检查四种语言。

最后更新于

本页目录