
LLM API가 실제로 주장한 모델을 제공하는지 확인하기
언어 모델은 완전히 무작위 숫자를 선택할 수 없습니다. 이 약점은 안정적인 지문이 되어 API 엔드포인트가 주장한 모델을 실제로 제공하는지 검증할 수 있습니다.
언어 모델에게 1부터 100 사이의 난수를 선택하라고 충분히 많이 요청하면 이상한 일이 일어납니다. 답은 무작위가 아닙니다. 어떤 모델은 42와 73에 계속 착지합니다. 다른 모델은 47과 57을 선호합니다. 패턴은 안정적이고 재현 가능하며 모든 모델마다 다릅니다.
2026년 7월 논문이 이 특성을 검증 방법으로 바꿨습니다. One Token Is Enough: Fingerprinting and Verifying Large Language Models from Single-Token Output Distributions는 이러한 답의 분포가 API 엔드포인트가 주장한 모델을 실제로 제공하는지 외부에서 확인하기에 충분한 신뢰할 수 있는 행동 지문을 형성함을 보여줍니다[1]. 가중치, 로짓, 내부 접근은 필요 없습니다. 수백 개의 한 단어 답변만 있으면 됩니다.
이 가이드는 API 응답의 model 필드가 보장이 아닌 주장인 이유, 단일 토큰 지문 인식이 어떻게 작동하는지, 수치가 무엇을 의미하는지, 그리고 이 방법의 한계가 어디에 있는지 설명합니다.
TL;DR
- API 응답의
model필드는 프로토콜로는 검증할 수 없습니다. 요청이 주장된 모델로 제공되었음을 증명하는 것은 없습니다[1]。 - 언어 모델은 균등한 난수를 생성할 수 없습니다. 논문의 프로브 세트 전체에서 중간값 답변 분포는 균등 1~100 선택에서 얻을 6.64비트에 대해 약 1.0비트의 엔트로피를 가집니다[1]。
- 그 실패는 일관성이 있어서 서명으로 작동합니다. 같은 모델, 같은 왜곡, 매번.
- 스케일에는 사용 가능한 여유가 있습니다: 같은 모델을 자신과 비교하면 JSD 0.14 근처, 같은 모델을 두 공급자 간에 비교하면 0.23 근처, 두 개의 진정으로 다른 모델은 0.46 근처입니다[1]។
- 정확도는 강하지만 완벽하지 않습니다. 8개 프로브 단위에서 동등 오류율은 10.6%, 전체 40에서 7.3%, AUC는 0.971입니다[1]።
- 불일치는 증거지만 증명이 아닙니다. 양자화, 자동 버전 업데이트, 또는 숨겨진 시스템 프롬프트는 모두 아무도 거짓말을 하지 않아도 분포를 이동시킬 수 있습니다.
API 뒤에 무엇이 있는지 볼 수 없습니다
채팅 완성 엔드포인트를 호출할 때 텍스트를 보내고 텍스트를 다시 받습니다. 응답의 model 필드는 서버가 거기에 놓기로 선택한 모든 것을 말합니다. 프로토콜에는 요청이 그것으로 명명된 모델이 아닌 그 가격의 10분의 1인 것으로 제공되었는지 증명하는 것이 없습니다[1]።
그 차이는 시장의 더 큰 부분이 중개자 뒤에 앉을수록 더 중요해집니다. 한 끝점을 통해 수백 개의 모델을 재판매하는 집계자, 공식 가격 이하로 플래그십 액세스를 제공하는 지역 재판매인, 그리고 양자화와 제공 스택 선택사항을 결코 보지 않고 오픈 가중치 모델을 제공하는 타사 호스트입니다[1]።
이러한 비즈니스의 대부분은 합법적입니다. 부정 행위의 인센티브는 여전히 명백하며, 17개의 섀도우 API 운영자에 대한 별도의 감사는 검증을 통과하지 못한 여러 엔드포인트를 발견했습니다[2]।
사기만의 문제는 아닙니다. 공급자는 제공 비용을 줄이기 위해 모델을 양자화하고, 자동 버전 업데이트를 롤아웃하고, 또는 혼합된 백엔드 전체에서 트래픽을 라우팅할 수 있습니다. 제품의 품질이 특정 모델에 달려 있으면 "실제로 무엇을 얻고 있나요?"는 신뢰가 아닌 증거로 대답할 수 있어야 합니다.
왜 난수가 게임을 들통내는가
이 방법은 잘 문서화된 약점에 기반합니다. 언어 모델은 계산이 아니라 예측을 하기 때문에 난수를 요청받으면 훈련 데이터와 선호도 조정의 편향을 재현합니다[1]።

3개의 클러스터가 지배합니다:
- 42는 대규모로 과다 표현됩니다. 은하수 가이드의 답변이 수십 년의 인터넷 텍스트를 통해 울려 퍼집니다.
- 7은 인간이 도달하는 운의 숫자로 수세기의 문화적 무게를 가집니다.
- 37, 47, 73 그리고 다른 2자리 소수들은 인간에게 무작위로 보이므로 모델이 학습한 인간 생성 "무작위" 예제 중에 지배합니다.
논문은 붕괴를 수량화합니다. 중간값 답변 분포는 약 1.0비트의 엔트로피를 가지며, 1부터 100까지의 공정한 선택은 6.64비트를 가질 것입니다[1]். 공정한 주사위가 백 개의 면을 가진다면 대부분의 모델은 약간 가중된 동전처럼 작동합니다.
핵심은 실패가 일관성이 있다는 것입니다. 같은 모델은 매번 같은 왜곡된 분포를 생성하고, 형제 버전을 포함한 다른 모델은 측정 가능하게 다른 모델을 생성합니다. 버그가 서명이 됩니다.
4단계 프로토콜
1. 프로브. 엔드포인트에 한 단어 질문 배터리를 요청합니다: 1부터 100 사이의 난수를 선택하고, 무작위 색상의 이름을 지정하고, 동전을 뒤집으세요. 논문은 4개 언어에 걸쳐 10개 작업을 사용하여 40개 프로브 단위를 사용하고, 온도 1.0에서 각각 30번을 샘플링하고, max_tokens=16 그리고 추론은 비활성화됩니다[1]។
2. 지문. 각 프로브 단위에 대해 답변을 경험 분포로 집계합니다. 이러한 분포의 수집이 엔드포인트의 행동 지문입니다.
3. 비교. 해당 지문과 주장된 모델에 대한 신뢰할 수 있는 참조 간의 거리를 Jensen-Shannon 발산을 사용하여 측정합니다. 기수 2로 스케일은 0(동일)부터 1(분리됨)까지 실행됩니다.
4. 결정. 작은 거리는 주장과 일치함을 의미합니다. 큰 거리는 엔드포인트가 행동상 다른 동물임을 의미합니다.
이 2개의 특성이 게임을 어렵게 만듭니다. 특별한 액세스가 필요하지 않습니다. 채팅 완성에 응답할 수 있는 모든 것이 지문이 될 수 있기 때문에, 그리고 필터링할 마법의 문자열이 없습니다. 모든 프로브는 모순문 풀에서 끌어낸 일반적인 무해한 질문이므로 부정직한 중간 상자는 일반 트래픽을 깨지 않고 테스트를 특수하게 케이싱할 수 없습니다[1]។
거리 숫자 읽기
발산 값은 참조 포인트 없이는 의미가 없으며, 이것이 바로 방법이 실용적이 되는 곳입니다.

| 비교 | 전형적인 JSD |
|---|---|
| 같은 모델, 자신과 비교 | ~0.14 |
| 같은 모델, 두 개의 다른 공급자 | ~0.23 |
| 두 개의 진정으로 다른 모델 | ~0.46 |
"같음"과 "다름" 사이에 실제 공간이 있습니다[1]. 중간 행이 암시하는 것을 주목하세요. 다른 호스트에 의한 같은 모델의 정직한 배포도 측정 가능하게 드리프트합니다. 양자화, 제공 스택 및 숨겨진 시스템 프롬프트가 모두 흔적을 남기기 때문입니다.
정확도는 프로브 수에 따라 확장됩니다. 8개 프로브 단위에서 동등 오류율은 10.6%입니다. 전체 40에서 7.3%로 떨어지고 AUC는 0.971입니다[1]።
논문이 현장에서 발견한 것
palmyra-x5 사례. 논문의 가장 놀라운 결과는 독점 플래그십으로 제공되는 모델에 관한 것입니다. 그 지문은 오픈 가중치 235B 모델로부터 JSD 0.141에 앉아 있으며, 이는 모델을 자신과 비교할 때 얻는 ~0.140과 통계적으로 구별할 수 없습니다. 행동상으로 논문은 결론짓습니다, 엔드포인트는 오픈소스 모델과 기능상 동일한 무언가를 제공하고 있었습니다[1]።
같은 모델, 다른 공급자, 때로 의심스럽게 다름. 다른 공급자에 걸쳐 제공되는 34개의 같은 모델 쌍 중 10개는 사기꾼 분포의 5번째 백분위수를 초과했습니다[1]। 일부 공식 모델 제3자 배포는 다른 모델처럼 보일 정도로 충분히 멀리 드리프트합니다. 검증은 아무도 이름에 대해 거짓말을 하지 않을 때도 편집증이 아닙니다.
연구 아티팩트는 개방되어 있습니다. 지문 데이터 세트는 Zenodo의 CC-BY-4.0에서 게시되고 재현 코드는 MIT에서 게시됩니다[3][4]።
직접 확인 실행하기
프로토콜은 충분히 간단해서 직접 구현할 수 있습니다. 형태:
import collections, math
from openai import OpenAI
client = OpenAI(api_key="...", base_url="https://your-endpoint/v1")
def probe(model, prompt, n=25):
counts = collections.Counter()
for _ in range(n):
r = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=1.0,
max_tokens=16,
)
counts[r.choices[0].message.content.strip()] += 1
total = sum(counts.values())
return {k: v / total for k, v in counts.items()}
def jsd(p, q):
keys = set(p) | set(q)
m = {k: 0.5 * (p.get(k, 0) + q.get(k, 0)) for k in keys}
def kl(a):
return sum(a[k] * math.log2(a[k] / m[k]) for k in a if a[k] > 0)
return 0.5 * kl(p) + 0.5 * kl(q)이것을 제대로 하는 데 관한 4개의 실용적인 참고.
샘플링 조건을 고정으로 유지합니다. 온도 1.0, 작은 max_tokens, 추론 비활성화. 다른 설정에서 수집한 지문은 논문의 것과 비교할 수 없습니다.
1개 이상의 프로브를 사용합니다. 단일 질문은 잡음입니다. 오류율은 8개 프로브 단위에서 40으로 진행될 때 대략 반으로 줄어듭니다.
같은 방식으로 수집한 참조와 비교합니다. 가장 깔끔한 참조는 수개월 전에 수집한 게시된 테이블이 아닌 같은 세션에서 동일한 설정 하에 지문이 찍힌 같은 모델의 공식 엔드포인트입니다.
보조 신호도 보세요. 자신의 분할 절반과 의견 불일치가 있는 지문은 다중 백엔드 라우팅을 제안합니다. 수백의 완성 토큰을 청구하는 한 단어 답변은 패딩을 제안합니다. 부풀린 프롬프트 토큰 수는 큰 숨겨진 시스템 프롬프트를 제안합니다.
8개 프로브 단위의 25개 샘플의 표준 확인은 약 200개의 작은 요청이며 작은 모델에서는 센트 미만 비용이 듭니다.
결과가 의미하고 의미하지 않는 것
이 방법이 지원하는 주장에 대해 명확합니다.
불일치는 증거이지만 증명이 아닙니다. 방법에는 고유한 오류율이 있습니다. 8개 프로브 단위에서 약 10.6% EER. 적극적인 양자화, 자동 모델 업데이트, 오래된 참조 또는 제공 측 시스템 프롬프트는 모두 의도 없이 분포를 이동시킬 수 있습니다. 빨간색 결과를 더 많은 프로브로 다시 실행하고, 두 번째 참조를 테스트하고, 질문을 하는 이유로 다루십시오[1]።
일치는 강하지만 절대적이지 않습니다. 정교한 사기꾼은 원칙상 다른 모델의 분포를 모방할 수 있습니다. 그러나 정상 트래픽을 올바르게 제공하면서 수십 개의 바꿔 말한 다국어 프로브 전체에서 그렇게 하는 것은 들리는 것보다 어렵습니다.
추론 모델은 주의가 필요합니다. 지문은 추론 비활성화로 수집됩니다. 엔드포인트가 이를 비활성화할 수 없는 경우 신뢰도는 하락합니다.
거리는 비즈니스에 대한 평결이 아니라 시간의 엔드포인트의 특성입니다.
FAQ
LLM 지문 인식이란 무엇입니까?
한 단어 질문 배터리에 대한 모델의 답변 분포를 측정한 다음 엔드포인트가 제공한다고 주장하는 모델의 참조와 그 분포를 비교합니다[1]።
언어 모델이 난수를 생성할 수 없는 이유는 무엇입니까?
그들은 계산이 아닌 예측을 수행하기 때문에 무작위 요청은 훈련 데이터와 선호도 조정의 편향을 반환합니다. 42와 7과 같은 문화적으로 가중된 값은 균등한 이상적인 6.64비트에 대해 약 1.0비트의 엔트로피에 분포를 붕괴시킵니다[1]።
얼마나 큰 차이가 불일치로 계산됩니까?
고정 임계값보다 논문의 기준선을 사용하십시오. 모델을 자신과 비교할 때 약 0.14, 공급자 간에 같은 모델의 경우 0.23, 진정으로 다른 모델의 경우 0.46[1]።
확인에는 얼마나 많은 요청이 필요합니까?
논문의 완전한 프로토콜은 40개 프로브 단위를 각각 30번 샘플링합니다. 라이터 8 단위 확인 25개 샘플은 약 200개 요청이고 동등 오류율을 7.3%에서 10.6%로 올립니다[1]።
공급자가 테스트를 감지하고 패배시킬 수 있습니까?
쉽지 않습니다. 프로브는 모순문 풀에서 끌어낸 일반적인 무해한 질문이므로 정상 트래픽을 깨지 않고 테스트를 특수하게 케이싱하는 것은 어렵습니다[1]።
실패한 확인이 공급자가 부정 행위를 하고 있다는 의미입니까?
아니요. 양자화, 자동 모델 업데이트, 숨겨진 시스템 프롬프트 및 오래된 참조는 모두 사기 없이 드리프트를 생성합니다. 거리는 더 자세한 검사를 보장하는 통계적 관찰입니다.
데이터 세트를 사용할 수 있습니까?
네. 지문 데이터 세트는 Zenodo의 CC-BY-4.0에 있고 재현 코드는 MIT에 있습니다[3][4]።
모델 필드를 주장으로 취급하기
여기서의 유용한 변화는 작고 구체적입니다. API 응답의 model 필드는 주장이며, 언어 모델이 목숨을 걸고 난수를 말할 수 없다는 사실보다 더 이국적인 것에 기초하여 외부에서 그 주장을 확인하는 저렴하고 개방적이고 통계적으로 근거 있는 방법이 처음 있습니다.
모든 중개자를 통해 용량을 구매하는 경우, 이것이 속한 적절한 장소는 가동 시간 모니터링 옆입니다. 귀사가 직접 수집한 참조에 대한 정기적인 확인. 보조 신호는 헤드라인 거리와 함께 모니터링됩니다. 그리고 빨간색 결과를 읽는 올바른 방법은 하나의 대화의 끝이 아니라 시작입니다. LLM API를 검증하는 것은 시간의 한 지점에서 엔드포인트에 대한 증거를 수집하는 것이며, 이는 정확히 대안이 가정하기 때문에 가치가 있습니다.
참고 문헌
- Bruckner, Tomáš. One Token Is Enough: Fingerprinting and Verifying Large Language Models from Single-Token Output Distributions. arXiv, July 2026. arxiv.org/abs/2607.10252
- CISPA researchers. Real Money, Fake Models — an audit of shadow LLM API operators. arXiv. arxiv.org/abs/2603.01919
- LLM fingerprint dataset (models × tasks × languages). Zenodo, CC-BY-4.0. zenodo.org
- Reproduction code for One Token Is Enough. Zenodo, MIT License. zenodo.org
더 읽어보기
- reAPI. Claude Opus 5 사용 방법. reapi.ai/blog/how-to-use-claude-opus-5
- reAPI. GPT-5.6 사용 방법. reapi.ai/blog/how-to-use-gpt-5-6
작성자

카테고리
더 많은 게시물

GPT-5.5 사용법: 에이전트 모델의 강점과 유일한 약점
GPT-5.5 사용법을 설명합니다. Terminal-Bench 1위 성적, 실제 가격 인상의 규모, 아무도 언급하지 않는 86% 환각률과 필요한 루프를 다룹니다.


2026 최고의 AI 비디오 생성 API 종합 비교
Seedance 2.5, MiniMax H3, Kling 3.0, Veo 3.1, Vidu Q3를 지속성, 참조, 오디오, 해상도, 과금 단위로 비교합니다.


AI 이미지 API 콘텐츠 필터: 거부의 메커니즘
이미지 API 필터링은 여러 계층에서 작동합니다. 동일한 프롬프트가 한 호스트는 통과하고 다른 호스트는 실패할 수 있지만, 설정에 관계없이 변하지 않는 경계가 있습니다.
