릴레이 선택
Claude 릴레이가 진짜인지 확인하는 방법
어떤 릴레이든 첫 화면에 "정품 Claude"라고 적을 수 있습니다. 이 문서는 릴레이의 업스트림이 Anthropic인지 직접 확인하는 방법을 설명합니다. 아무것도 증명하지 못하는 방법, 위조할 수 없는 신호, 바로 실행할 수 있는 스크립트를 다룹니다. CoreCode를 포함해 어떤 릴레이에도 쓸 수 있습니다.
- 모델에게 "어떤 모델이냐"고 묻는 것은 아무것도 증명하지 못합니다. 시스템 프롬프트 한 줄이면 어떤 모델이든 자신을 Claude라고 답합니다.
- 검증할 수 있는 것은 동작입니다. Anthropic Messages 응답의 형태, 기록되고 다시 읽히는 프롬프트 캐시, 변조된 thinking 서명의 거부가 그것입니다.
- Anthropic 문서에 따르면 변조되었거나 복호화할 수 없는 thinking 서명은 항상 400을 반환합니다.
- 검증 스크립트 check-relay.py는 Python 표준 라이브러리만 필요하며 1회 실행에 몇 센트가 듭니다.
- 이 스크립트는 업스트림이 Anthropic이라는 것을 증명할 뿐, 선택한 등급이 실제로 응답하고 있다는 것까지는 증명하지 않습니다.
- CoreCode는 오픈소스 ModelTrace 지문으로 3일마다 모델 자체를 점검하고, 결과와 원시 데이터를 이 페이지에 공개합니다.
릴레이가 비용을 줄이는 방식
- 모델 바꿔치기. Opus를 골랐는데 더 저렴한 Sonnet, Haiku 또는 다른 회사의 모델이 응답합니다.
- 공식 API를 쓰지 않음. 업스트림이 리버스 엔지니어링한 웹/앱 엔드포인트라서 컨텍스트가 잘리고 도구 사용과 캐시가 불완전합니다.
- 사용량 조작. 토큰 수와 캐시 수가 Anthropic이 돌려준 값이 아니라 릴레이 자체 규칙으로 채워져 청구액이 맞지 않습니다.
이 모두 대화와 코드 작성은 정상적으로 되기 때문에 평소 사용 중에는 거의 드러나지 않습니다.
"어떤 모델이야?"라고 묻는 것이 소용없는 이유
모델이 자신의 정체를 답하는 내용은 학습 데이터와 시스템 프롬프트에서 나오며 믿을 만한 근거가 아닙니다. 릴레이가 시스템 프롬프트에 "You are Claude Opus"라고 넣으면 어떤 모델이든 그대로 따라 하고, 진짜 Claude도 자신의 버전을 틀리게 말하기도 합니다. 정체나 지식 기준 시점을 묻거나 말투로 판단하는 것은 기껏해야 참고일 뿐 증거가 아닙니다.
효과가 있는 것은 Anthropic API에만 있고 다른 곳에서는 흉내 낼 수 없는 동작입니다.
위조할 수 없는 신호 세 가지
1. 응답 형태와 usage 필드
Messages API는 type: "message", msg_로 시작하는 id, input_tokens와 output_tokens가 담긴 usage를 반환하며, 캐시를 쓰면 cache_creation_input_tokens와 cache_read_input_tokens도 포함됩니다. 다른 모델의 출력을 이 형태로 변환하는 것은 쉬우므로 이 검사는 조잡한 변환만 잡아냅니다. 나머지 두 검사의 전제 조건입니다.
2. 프롬프트 캐시가 기록되고 다시 읽힘
cache_control을 지정해 약 20,000토큰의 시스템 프롬프트를 보냅니다. 첫 호출은 cache_creation_input_tokens를 보고해야 하고, 직후 같은 호출은 거의 같은 양의 cache_read_input_tokens를 보고해야 합니다. 두 필드는 Anthropic의 프롬프트 캐싱 문서에 설명되어 있습니다.
- 두 번 모두 0이면: 업스트림이 Anthropic 프롬프트 캐싱을 하지 않거나, 릴레이가 usage를 직접 계산하고 있습니다.
- 기록은 되는데 읽히지 않으면: 요청이 매번 다른 계정으로 가는 것으로 보입니다. 업스트림은 진짜일 수 있지만 캐시가 거의 적중하지 않아 Claude Code 비용이 크게 늘어납니다. 캐싱과 과금을 참고하세요.
3. thinking 블록의 서명
확장 사고(extended thinking)를 켜면 Anthropic은 각 thinking 블록에 암호화된 signature를 붙입니다. 다음 턴에 이 블록을 다시 보내면 API가 서명을 검증하고, 수정된 서명은 400으로 거부합니다. 다른 회사의 모델은 통과하는 서명을 만들 수 없고, 변환 계층에는 서명을 검증할 Anthropic 키가 없습니다. Anthropic의 설명에 따르면 API는 이 서명으로 thinking 블록이 Claude가 생성한 것임을 검증하며(Thinking), 변조되었거나 복호화할 수 없는 서명은 항상 400을 반환합니다(Preserved thinking).
테스트 방법: 도구 호출이 있는 서명된 thinking 블록을 가져와 서명의 한 글자를 바꿔 다시 보내면 거부되어야 하고, 그대로 보내면 수락되어야 합니다. 변조된 서명도 수락된다면 아무도 서명을 검증하고 있지 않다는 뜻이며, 업스트림은 Anthropic이 아닙니다.
검증 스크립트
세 가지 검사는 스크립트 하나로 실행됩니다: check-relay.py. Python 3.8 이상과 표준 라이브러리만 필요하며, 키는 지정한 주소로만 전송되고 다른 곳으로는 가지 않습니다. 실행 전에 소스를 읽어 보세요. 소스, 테스트, 이슈는 GitHub에 있습니다: CoreCodeAI/claude-relay-check.
curl -fsSLO https://corecode.live/docs/verify/check-relay.py
python3 check-relay.py --base-url https://relay.example --key sk-your-key --model claude-sonnet-5-5
--base-url과 --key를 생략하면 Claude Code가 쓰는 설정인 ANTHROPIC_BASE_URL과 ANTHROPIC_AUTH_TOKEN을 읽습니다. 릴레이가 Authorization: Bearer를 요구하면 --bearer를 추가하세요. 1회 실행 비용은 몇 센트로, 약 20,000토큰의 캐시 요청 2건과 짧은 요청 4건입니다.
https://relay.example/v1/messages model=claude-sonnet-5-5
[PASS] shape Messages response, model claude-sonnet-5-5, 143 input tokens
[PASS] cache wrote 17755 tokens, read 17755 on call 2
[PASS] signature tampered signature rejected (HTTP 400), genuine one accepted
Result: all checks look like Anthropic
| 결과 | 의미 |
|---|---|
PASS | 이 검사는 Anthropic API의 동작과 일치합니다. |
WARN | 의심스럽지만 단정할 수는 없는 경우입니다. 예를 들어 캐시가 기록만 되고 읽히지 않는 경우입니다. |
FAIL | 이 검사 결과, 업스트림이 Anthropic이 아니거나 usage가 실제 값이 아닙니다. 종료 코드 1. |
ERROR | 요청 자체가 실패했습니다(연결 불가, 잘못된 키, 잔액 없음, 클라이언트 거부). 검사가 끝나지 않았으므로 어느 쪽도 말해 주지 않습니다. 종료 코드 2. |
SKIP | 모델이 thinking 요청을 거부했거나 이번에는 생각하지 않기로 해서 서명 검사를 건너뛰었습니다. 다시 실행하거나 다른 모델을 써 보세요. |
403으로 거부합니다. 이는 클라이언트 제한일 뿐 업스트림에 대해서는 아무것도 말해 주지 않습니다. CoreCode를 검사하려면 Claude 满血(可外接)그룹의 키를 쓰세요. 仅限CC 그룹의 키는 거부됩니다.스크립트가 증명하지 못하는 것
- "업스트림이 Anthropic이다"를 증명할 뿐, "업스트림이 선택한 등급이다"를 증명하지는 않습니다. Sonnet의 thinking 블록에도 유효한 서명이 붙습니다. 등급은 반환된
model필드, 청구된 요청마다 기록된 모델과 단가, 어려운 작업에서의 성능으로 판단하세요. CoreCode 자체 점검은 정기 점검을 참고하세요. - 표본이 하나뿐입니다. 릴레이는 특정 시간대나 일부 요청에서만 모델을 바꿀 수 있습니다. 나중에 다시 실행하는 편이 한 번만 실행하는 것보다 많은 것을 알려 줍니다.
- 안정성은 측정하지 않습니다. 성공률과 지연 시간에는 기록이 필요합니다. CoreCode의 서비스 상태가 그런 예입니다.
모델 구분: CoreCode의 정기 점검
위의 세 신호는 업스트림이 Anthropic임을 증명하지만, 어떤 모델이 응답하는지는 알려 주지 못합니다. 그래서 오픈소스 도구 ModelTrace로 직접 점검합니다. 모델에게 1에서 355 사이의 정수를 수백 개 쓰게 하면 모델마다 선호하는 숫자가 다릅니다. ModelTrace는 이 분포를 보유한 GPT와 Claude 모델 18종의 지문과 비교해 가장 가능성이 높은 모델을 계산합니다.
서버는 3일마다 「Claude 满血(可外接)」 그룹의 키로 이 도구를 실행합니다. Claude 모델마다 3라운드, 라운드마다 3개의 답변입니다. 아래 표는 실행할 때마다 갱신됩니다. 두 그룹은 같은 계정을 씁니다. 「仅限CC」 그룹에서는 테스트하지 않습니다. 이 그룹은 Claude Code의 시스템 프롬프트가 붙은 요청만 받는데, ModelTrace 제작자가 이 프롬프트가 결과를 크게 왜곡한다고 밝혔기 때문입니다.
최근 검사: 2026-11-01 19:17 UTC, 모델마다 3라운드, 라운드마다 응답 3개. 모든 프롬프트와 응답은 2026-11-01.json에 있어 ModelTrace로 다시 계산할 수 있습니다.
| 모델 | 유효 라운드 | Claude로 판정 | 해당 모델로 판정 | 가장 비슷한 모델 |
|---|---|---|---|---|
claude-fable-5-1 | 3 / 3 | 95% | 지문 라이브러리에 없음 | claude-opus-5-5 |
claude-haiku-5-5 | 3 / 3 | 100% | 100% | claude-haiku-5-5 |
claude-opus-5-5 | 3 / 3 | 100% | 100% | claude-opus-5-5 |
claude-sonnet-5-5 | 3 / 3 | 79% | 78% | claude-sonnet-5-5 |
이전 검사
| 날짜 | claude-fable-5-1 | claude-haiku-5-5 | claude-opus-5-5 | claude-sonnet-5-5 |
|---|---|---|---|---|
| 2026-11-01 | 95% / — | 100% / 100% | 100% / 100% | 79% / 78% |
| 2026-10-31 | 100% / — | 100% / 100% | 100% / 100% | 96% / 79% |
| 2026-10-28 | 100% / — | 100% / 100% | 100% / 100% | 99% / 99% |
각 칸은 Claude로 판정 / 해당 모델로 판정 의 평균 확률입니다.
표 읽는 법:
- 결과는 지문 은행에 있는 모델 사이에서만 유효합니다. 은행에 없는 모델도 가장 가까운 모델로 분류됩니다.
claude-fable-5-1은 은행에 없으므로 "이 모델" 열에는 "은행에 없음"이라고 표시되고 Claude 계열 수치만 의미가 있습니다. - 한 라운드는 편차가 크므로 표에는 3회 평균을 보여 줍니다. 2026년 10월 28일의 첫 시험에서
claude-sonnet-5-5의 한 라운드는 Claude 계열을 63%로만 판정했고, 같은 날 나머지 두 라운드는 100%였습니다. - ModelTrace 제작자는 결과가 참고용일 뿐이라고 말합니다. Claude 지문은 Anthropic API가 아니라 서드파티 릴레이인 OAIPro를 통해 수집되었습니다. 서명 검사가 답하지 못하는 모델 문제를 다루지만 위의 세 신호를 대체하지는 않습니다.
- 직접 실행할 수 있습니다. ModelTrace 웹 페이지를 열어 세 가지 과제를 모델에 보내고 답을 붙여 넣거나, ModelTrace를 로컬에서 실행해 API 테스트에
https://corecode.live와 可外接 그룹의 키를 입력하세요. 표 위에 링크된 원시 데이터에는 모든 프롬프트와 답변이 들어 있어 직접 다시 채점할 수도 있습니다.
릴레이에서 확인할 만한 나머지 항목은 Claude Code 릴레이 고르는 방법을 참고하세요.
FAQ
모델에게 어떤 모델이냐고 물어서 릴레이가 진짜인지 알 수 있나요?
아니요. 모델이 자신에 대해 답하는 내용은 학습 데이터와 시스템 프롬프트에서 나오며, 릴레이가 한 줄로 바꿀 수 있고 진짜 Claude도 자신의 버전을 틀리게 말할 수 있습니다. 아무도 흉내 낼 수 없는 동작을 보세요. 위조할 수 없는 신호 세 가지를 참고하세요.
검사 비용은 얼마인가요?
몇 센트입니다. 약 20,000토큰의 캐시 요청 2건과 짧은 요청 4건입니다.
CoreCode에서도 쓸 수 있나요?
네, Claude 满血(可外接)그룹의 키로 쓸 수 있습니다. 仅限CC 그룹은 Claude Code만 받으므로 스크립트가 403으로 거부되고 ERROR로 보고되며, 이는 어느 쪽도 말해 주지 않습니다.
스크립트는 내 키를 어디로 보내나요?
--base-url로 지정한 주소로만 보내며 다른 곳에는 접속하지 않습니다. 스크립트는 공개되어 있으니 실행 전에 읽어 보세요.
세 검사를 모두 통과하면 확실히 Opus인가요?
꼭 그렇지는 않습니다. Sonnet의 thinking 블록에도 유효한 서명이 붙습니다. 등급은 반환된 model 필드, 청구된 요청마다 기록된 모델과 가격, 어려운 작업에서의 성능으로 판단하세요. 스크립트가 증명하지 못하는 것을 참고하세요. CoreCode는 ModelTrace로 3일마다 각 모델을 점검합니다. 정기 점검을 참고하세요.