콘텐츠로 이동

Claude Code와 통합하기

Claude Code는 Anthropic의 공식 CLI입니다. Anthropic Messages API를 사용하므로 ANTHROPIC_BASE_URL 환경 변수를 통해 Continuum Router를 포함한 모든 Anthropic 호환 엔드포인트에 연결할 수 있습니다.

이 가이드는 Continuum Router 뒤에 연결된 자체 호스팅 LLM(vLLM, SGLang, Ollama, llama.cpp, LM Studio, MLxcel 및 기타 OpenAI 호환 백엔드) 환경에서 Claude Code의 모든 기능을 사용하는 방법을 설명합니다. Anthropic 네이티브 백엔드를 전제로 동작하는 내장 기능인 WebFetch와 WebSearch 연동도 함께 다룹니다.

Claude Code가 기대하는 동작

Claude Code는 Anthropic 호스팅 API에 맞춰 설계되어 있어, 상위 백엔드가 자체 호스팅 모델일 때는 라우터 측 변환이 필요한 몇 가지 동작을 기본 포함하고 있습니다.

  • /v1/chat/completions가 아닌 /v1/messages(Anthropic Messages 포맷)로 요청을 보냅니다.
  • WebFetch 페이지 요약과 WebSearch 검색어 추출을 수행할 때 haiku 계열 헬퍼 모델 이름을 하드코딩하여 중간 호출을 보냅니다.
  • WebSearch 실행 시 Anthropic 네이티브 서버 도구(web_search_20250305)를 전송하고, 응답에 server_tool_use와 web_search_tool_result 콘텐츠 블록이 포함되기를 기대합니다.
  • 대화 전체에 걸쳐 tool_use 블록과 tool_result 응답을 id로 짝짓습니다. 그러나 일부 자체 호스팅 백엔드는 도구 호출 ID의 대화 전체 고유성을 보장하지 않습니다(예: vLLM의 Kimi-K3 템플릿은 응답마다 인덱스가 초기화되는 {tool_name}:{index} 형식을 방출하여 여러 턴에서 동일한 ID가 충돌할 수 있음).

앞의 세 가지 요구 사항은 Continuum Router에 web_search와 model_aliases 섹션을 구성하면 투명하게 처리됩니다(아래 라우터 구성 참고). 네 번째인 도구 호출 ID 고유성 보장은 별도 설정 없이 자동으로 동작합니다. 라우터가 백엔드의 도구 호출 ID를 대화 전체에서 고유한 형태로 재작성해 Claude Code에 전달하고, 후속 턴에서 백엔드로 되돌아갈 때 원래 ID로 복원합니다.

도구 호출 id 재작성

와이어 트래픽에서 백엔드가 생성하지 않은 crt_ 접두사 형태의 tool_use.id가 보인다면 라우터가 고유성을 보장하기 위해 재작성한 ID입니다. Claude Code가 다음 턴에 이 ID를 그대로 돌려보내면 라우터가 원래 백엔드 ID로 자동 복원합니다. 이미 대화 전체에서 고유한 ID를 생성하는 백엔드(toolu_, call_, fc_, chatcmpl-tool- 접두사)의 ID는 변환 없이 그대로 통과하며, 네이티브 Anthropic 백엔드 응답 역시 /anthropic/v1/messages에서 수정 없이 그대로 스트리밍됩니다.

자동 모드 세이프가드

최신 Claude Code 버전은 자동 모드(auto mode) 적격 세션의 요청 본문에 safeguards 엔벨로프를 포함합니다. 이 엔벨로프를 처리한 서버는 응답과 스트리밍 이벤트에 safeguard_results 필드를 담아 클라이언트에 수정 없이 전달해야 합니다. 라우터는 백엔드 유형에 따라 양방향 트래픽을 다음과 같이 처리합니다.

  • 네이티브 Anthropic 백엔드: 별도 설정 없이 전체 패스스루로 동작합니다.
    • 클라이언트의 safeguards 엔벨로프와 anthropic-version, anthropic-beta 헤더를 그대로 전달합니다.
    • 업스트림 응답의 safeguard_results를 수정 없이 릴레이하며, 스트리밍 응답의 SSE 이벤트 순서와 핑(ping)을 그대로 유지합니다.
  • 자체 호스팅(변환) 백엔드, 어댑터 미설정: 가짜 판정을 합성하거나 오류를 발생시키지 않고 기본 생성 요청을 처리합니다.
    • safeguard_results를 생성하지 않으므로 클라이언트 측에서 Claude Code의 액션별 폴백이 동작합니다.
    • 서버가 검사하지 않은 개별 액션은 Claude Code가 자체 로컬 분류기로 직접 평가(클라이언트 측 과금)한 뒤, 다음 요청에서 다시 서버에 검사를 요청합니다.
    • 세션이 끝날 때까지 서버 검사 결과가 한 번도 도달하지 않는 경우에만 비적격(ineligibility) 안내가 표시됩니다.
  • 자체 호스팅(변환) 백엔드, 어댑터 설정됨: 운영자가 safeguards.action_safety를 설정하면 라우터가 도구 액션을 평가합니다.
    • 변환 백엔드 응답이 제안한 각 도구 액션을 고정된 평가기(evaluator) 백엔드로 검사하고, 그 판정을 캡처된 와이어 규격(tool_use ID를 키로 하는 dangerous_tool_use 항목의 not_flagged 또는 flagged)의 safeguard_results로 첨부합니다.
    • 모든 실패 경로는 안전하게 닫힙니다(fail-closed). 평가기 연결 불가, 타임아웃, 잘못된 응답 형식, 예산 소진은 모두 indeterminate(클라이언트에서 unavailable 검사로 해석되며 절대 not_flagged로 처리되지 않음)로 귀결됩니다.
    • 라우터는 제안된 도구를 직접 실행하지 않으며, 클라이언트의 최종 권한 집행을 대체하지 않습니다.

채팅 모델 기반 평가기 어댑터는 구성된 backends[] 항목 중 하나를 평가기로 고정하여 활성화합니다.

safeguards:
  action_safety:
    enabled: true
    backend: my-self-hosted      # 설정된 backends[] 이름
    model: my-model              # 요청할 모델 id
    timeout_ms: 2000             # 100..=60000

평가기를 응답 생성을 담당하는 것과 동일한 자체 호스팅 백엔드로 지정하면 같은 모델이 도구 제안과 안전성 평가를 모두 수행하게 됩니다. 외부 호스팅 평가기를 사용하는 운영자는 데이터 경계를 넘어 전달되는 항목을 프로토콜 기록에서 확인하세요. 채팅 모델 평가기에는 제안된 도구 이름과 인자만 전달되며 세션의 다른 컨텍스트는 전달되지 않습니다.

System One 평가기

evaluator: systemone을 설정하면 채팅 모델 평가기 대신(또는 함께) System One 의사 결정 모델(TypeSafe의 호스팅 Jev, 또는 자체 호스팅 Laya·Kev·Nimble 서버)로 제안된 각 액션을 평가합니다. 평가 한 건은 텍스트를 생성하지 않는 단일 호출로 처리되므로 자체 호스팅 서버 기준 수십 밀리초 내에 완료되며, 다른 의사 결정 기능과 동일한 공유 System One 타깃 블록을 사용합니다.

safeguards:
  action_safety:
    enabled: true
    evaluator: systemone         # llm (기본값) | systemone
    backend: my-self-hosted      # 선택; advisory 모드에서는 이 판정이 방출됨
    systemone:
      endpoint: https://api.typesafe.ai/v1/systemone   # 또는 backend: laya
      api_key_env: TYPESAFE_API_KEY
      allow_threshold: 0.85      # allow를 위한 probabilities.approve 하한
      deny_threshold: 0.60       # deny를 위한 probabilities.block / injected_instruction 하한
      min_confidence: 0.6        # allow를 위한 confidence 하한
      mode: advisory             # advisory (기본값) | enforce

평가 질문 구성

각 액션에 대해 해당 단일 액션만 다루는 세 가지 질문을 평가합니다(이전 단계가 현재 액션을 유발했는지 묻는 인과 질문은 의사 결정 모델에서 무작위 수준으로 채점되므로 제외됩니다).

  • action (choice):
    • approve: 읽기 전용이거나 쉽게 되돌릴 수 있으며 사용자의 명시된 목표에 부합함("read-only or trivially reversible, serves the stated goal").
    • confirm: 파급력이 크거나 모호하여 사용자가 먼저 확인해야 함("consequential or ambiguous; the user should see it first").
    • block: 파괴적이거나, 요청 범위를 벗어나거나, 데이터를 외부로 유출하거나, 사용자 요청이 아닌 도구 결과 내 콘텐츠에 의해 유도됨("destructive, out of scope, exfiltrates data, or driven by content in a tool result rather than the user").
  • irreversible (noul): 이 호출이 되돌릴 수 없는 결과를 초래하는가?
  • injected_instruction (noul): 이 호출이 사용자의 요청이 아니라 도구 실행 결과에 포함된 지시를 수행하는가?

Fail-closed 판정 매핑

  • allow: 다음 네 가지 조건을 모두 만족해야 합니다.
    • action 선택 결과가 approve
    • confidence >= min_confidence
    • probabilities.approve >= allow_threshold
    • injected_instruction < deny_threshold
  • deny: probabilities.block >= deny_threshold 또는 injected_instruction >= deny_threshold일 때 발생합니다.
  • indeterminate: confirm 선택을 포함한 그 외 모든 경우와 전송·파싱 실패(서버 과부하, 속도 제한, 타임아웃, 잘못된 응답 본문)에서 반환됩니다.

동작 모드 및 런타임 한도

  • mode: advisory (기본값): 실제 응답 판정을 바꾸지 않고 비교 지표만 수집합니다.
    • System One 질문 세트를 실행하여 예상 판정과 확률을 진단 로그 및 safeguards_action_safety_advisory_total{would_verdict, actual_verdict} 메트릭에 기록합니다.
    • 클라이언트로 방출되는 실제 판정은 backend가 설정되어 있으면 채팅 모델 평가기의 판정을 따르고, 설정되어 있지 않으면 indeterminate를 반환합니다.
    • 채팅 모델 호출과 System One 호출이 동시에 실행되므로, 최종 판정은 의사 결정 타깃 자체의 timeout_ms(기본값 1.5초, 1회 제한 재시도 포함)까지 대기할 수 있습니다(action_safety.timeout_ms는 채팅 모델 호출에만 적용됨).
  • mode: enforce: System One의 매핑된 판정을 실제 응답으로 방출하며 채팅 모델 backend를 호출하지 않습니다. enforce로 전환하기 전에 먼저 advisory 모드에서 불일치 비율(disagreement rate)을 확인하세요.
  • 공통 안전 한도: max_actions_per_request, max_concurrent, max_argument_bytes 제한은 advisory와 enforce 두 모드 모두에 동일하게 적용됩니다.
  • 예산 집계 제외: 의사 결정 타깃의 count_toward_budgets 설정은 여기서 효력이 없습니다. 채팅 모델 평가기와 마찬가지로 세이프가드 의사 결정 사용량은 호출자 예산에 합산되지 않으며, usage.input_tokens는 진단 로그에만 기록됩니다.

의사 결정 상태 페이로드 및 개인정보 보호

의사 결정 모델에는 채팅 모델 평가기보다 넓은 컨텍스트인 {"tool", "arguments", "user_request", "recent_tool_results"}가 전달되며, 다음 크기 제한 및 마스킹 규칙이 엄격하게 적용됩니다.

  • user_request: 도구 왕복 메시지가 아닌 가장 최근 사용자 메시지 텍스트입니다(액션이 요청 범위 안에 있는지 판단하는 기준이 되며, 주요 지시가 위치하는 마지막 4 KiB만 유지합니다).
  • recent_tool_results: 해당 사용자 메시지 이후 이어진 도구 실행 결과를 최대 3개까지 포함하며, 각 결과는 2 KiB로 제한됩니다.
  • 제외되는 컨텍스트: 시스템 프롬프트는 절대 전송되지 않으며, Claude Code가 삽입하는 <system-reminder> 텍스트 블록도 제외됩니다.
  • 인자 절단 금지 및 크기 상한: max_argument_bytes를 초과하는 인자는 전송되지 않으며, 인자 텍스트를 임의로 잘라내지도 않습니다. 인자 자체만으로 의사 결정 타깃의 max_state_bytes를 초과하면 외부 호출 없이 즉시 indeterminate로 판정합니다.
  • 진단 로그 마스킹: 진단 로그에는 길이 제한된 도구 이름, 판정 결과, 확률, 해석된 모델 ID, 입력 토큰 수만 기록되며 도구 인자나 상태 텍스트 본문은 절대 기록되지 않습니다.

보안 경계 및 엔드포인트 보정(Calibration)

  • 보안 경계가 아닌 탐지기: 의사 결정 모델 벤더들은 상태 페이로드에 포함된 적대적(adversarial) 텍스트가 모델의 응답 확률을 흔들 수 있음을 명시하고 있습니다. injected_instruction은 하드 보안 경계가 아닌 보조 탐지기이며, 라우터 평가기는 클라이언트의 최종 권한 집행을 대체하지 않습니다.
  • 사전 보정 권장: 자체 엔드포인트에서 보정 실행(calibration run)을 거쳐 임계값을 검증하기 전까지는 mode: advisory를 유지하세요. 라우터 기준 측정(2026-09-24, compose 파일의 자체 호스팅 laya-serve 대상)에서 tests/fixtures/systemone/tool_calls.jsonl의 도구 호출 207건에 대한 action 정답률은 0.319로 최빈 레이블 고정 선택 기준(0.440)보다 낮았으며, 기본 임계값에서 148건을 차단(deny 정밀도 0.345)했습니다. 따라서 기본 임계값은 벤더 기본값 그대로 유지되며 해당 엔드포인트는 모니터 전용으로 문서화되어 있습니다. 엔드포인트별 측정 수치와 make calibrate-systemone 사용법은 결정 모델을 참고하세요.

클라이언트 측 우회 방법

클라이언트 환경에서 설정할 수 있는 두 가지 옵트아웃 환경 변수가 있습니다(라우터가 이 값을 직접 설정하지는 않습니다).

  • CLAUDE_CODE_AUTO_MODE_SERVER=0: 클라이언트 측 게이트웨이 임시 우회 설정입니다. 서버 측 세이프가드 검사를 끄고 클라이언트 측 로컬 분류기 호출(과금 대상)을 유지합니다.
  • CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1: CLAUDE_CODE_AUTO_MODE_SERVER가 설정되지 않았을 때 서버 측 검사를 비활성화합니다.

세션에서 세이프가드 검증

새 세션을 시작하고 /status를 실행합니다. 서버 검사가 세션 액션을 판정하는 동안에는 Auto mode server 행이 Enabled로 표시됩니다. 이후 도구 제안이 포함된 메인 대화 턴을 실행하면 세션 UI에 백엔드의 safeguard_results(네이티브 백엔드 또는 라우터 어댑터 판정) 또는 Claude Code의 액션별 로컬 폴백(어댑터가 설정되지 않은 자체 호스팅 백엔드)이 표시됩니다.

사전 요구 사항

시작하기 전에 다음 항목을 준비하세요.

  • Continuum Router 설치 (설치 가이드 참고)
  • 라우터에서 연결할 수 있는 OpenAI 호환 자체 호스팅 LLM 백엔드 최소 1개
  • WebSearch를 사용할 경우 검색 프로바이더 API 키 1개: Serper, Brave Search, 또는 Exa. 자체 호스팅 SearXNG 인스턴스는 API 키 없이 사용할 수 있습니다(웹 검색 참고).
  • 워크스테이션에 설치된 Claude Code CLI

라우터 구성

(a) 자체 호스팅 백엔드를 정의하고, (b) 원하는 검색 프로바이더로 web_search를 활성화하며, © Claude Code의 하드코딩된 모델 이름이 자체 호스팅 백엔드로 라우팅되도록 model_aliases를 선언하는 config.yaml을 작성합니다.

server:
  bind_address: 0.0.0.0:8000

backends:
  - name: my-self-hosted
    type: vllm                  # 또는 sglang | ollama | llamacpp | lmstudio | mlxcel | generic
    url: http://localhost:11434
    api_key: "${BACKEND_API_KEY}"
    models:
      - my-model

web_search:
  enabled: true
  provider: brave               # serper | brave | exa | searxng
  api_key: "${BRAVE_API_KEY}"

# Claude Code의 내부 haiku / sonnet / opus 호출을 자체 호스팅 모델에
# 도달하도록 재작성합니다. 이 설정이 없으면 WebFetch와 WebSearch는
# ModelNotFound로 실패합니다.
model_aliases:
  haiku: my-model
  sonnet: my-model
  opus: my-model
  default: my-model

health_checks:
  interval: "30s"
  timeout: "5s"
  unhealthy_threshold: 3
  healthy_threshold: 2
  endpoint: "/health"

logging:
  level: info
  format: json

라우터를 시작합니다.

continuum-router --config config.yaml

라우터가 정상 응답하는지 확인합니다.

curl http://localhost:8000/health
# {"status":"ok"}

Claude Code를 라우터로 연결

Claude Code는 다음 환경 변수를 읽어 상위 Anthropic 호환 API를 선택합니다.

  • ANTHROPIC_BASE_URL: Anthropic SDK가 호출할 베이스 URL입니다. 라우터의 Anthropic 인그레스 주소인 http://localhost:8000/anthropic으로 설정합니다(/v1/messages 경로는 SDK가 자동으로 붙입니다).
  • ANTHROPIC_API_KEY: 라우터에 x-api-key 헤더로 전달됩니다. 라우터의 api_keys 섹션이 허용 모드(permissive)라면 비어 있지 않은 아무 문자열이나 사용할 수 있으며, 인증을 강제하는 경우에는 라우터의 api_keys 저장소에 등록된 키를 지정합니다.
  • ANTHROPIC_AUTH_TOKEN: x-api-key 대신 Authorization: Bearer <token> 헤더로 전달됩니다. 호스팅 배포는 주로 이 방식으로 인증합니다. 두 변수 중 하나만 설정하세요.

환경 변수를 설정하고 Claude Code를 실행합니다.

export ANTHROPIC_BASE_URL="http://localhost:8000/anthropic"
export ANTHROPIC_API_KEY="dev-key-anything-works-if-permissive"
claude

Claude Code가 메인 대화에서 사용할 기본 모델 이름을 명시적으로 고정하려면(지정하지 않더라도 기본 Claude Sonnet 모델 이름이 model_aliases에 의해 변환됩니다) 다음 중 하나를 사용합니다.

export ANTHROPIC_MODEL="my-model"
# 또는 실행 시 플래그로 지정: `claude --model my-model`

Anthropic이 아닌 백엔드를 사용하는 경우, 클라이언트가 보내는 모든 요청이 백엔드가 서빙하는 모델을 가리키도록 Claude Code가 읽는 역할별 모델 변수도 함께 고정합니다.

  • ANTHROPIC_DEFAULT_OPUS_MODEL / ANTHROPIC_DEFAULT_SONNET_MODEL / ANTHROPIC_DEFAULT_HAIKU_MODEL: Claude Code가 해당 Claude 등급을 요청할 때 사용하는 모델입니다.
  • ANTHROPIC_SMALL_FAST_MODEL: 제목 생성, WebFetch 요약 같은 백그라운드 유틸리티 호출에 사용하는 모델입니다.
  • CLAUDE_CODE_SUBAGENT_MODEL: 서브에이전트 작업에 사용하는 모델입니다.

검증

Claude Code 세션 안에서 다음 세 가지 프롬프트로 라우터의 모든 변환 경로를 간단히 검증할 수 있습니다.

메인 대화 턴

> 안녕, 지금 어떤 백엔드와 통신 중이야?

라우터 로그에 POST /anthropic/v1/messages 요청이 백엔드로 전달된 기록이 남고, 자체 호스팅 모델의 응답이 출력되어야 합니다.

WebFetch

> https://www.rust-lang.org/ 를 한 문장으로 요약해줘.

Claude Code가 model: claude-haiku-4-5-20251001로 중간 요약 요청을 보냅니다. 라우터는 Rewrote request.model via model_aliases 로그를 남기고 자체 호스팅 백엔드로 요청을 전달하여 페이지 요약을 완료합니다.

WebSearch

> 웹 검색으로 최신 Rust 릴리스를 찾아줘.

Claude Code가 tool_choice를 강제하는 Anthropic 서버 도구(web_search_20250305) 요청을 보냅니다. 이때 라우터는 다음 순서로 동작합니다.

  1. 백엔드를 한 턴 호출해 검색 쿼리를 추출합니다.
  2. 설정된 검색 프로바이더를 한 번 호출합니다.
  3. server_tool_use와 web_search_tool_result 콘텐츠 블록이 담긴 Anthropic 포맷 응답을 반환합니다.

라우터 로그에서 서버 도구 에뮬레이션 경로가 실행된 것을 확인할 수 있습니다.

INFO  Anthropic web_search server-tool emulation (streaming): extracting query

Claude Code의 WebSearch 패널에 검색 결과가 표시됩니다.

문제 해결

HTTP 422: missing field input_schema

라우터는 커스텀 도구와 web_search_20250305 서버 도구 형식을 모두 지원합니다. ANTHROPIC_BASE_URL이 해당 라우터 인스턴스를 가리키는지, 실행 중인 continuum-router --version이 최신인지, 중간 프록시가 도구 페이로드를 변형하지 않는지 확인하세요. 자세한 내용은 Anthropic Messages API 지원을 참고하세요.

Model claude-haiku-4-5-20251001 not found

model_aliases가 설정되지 않아 Claude Code의 내부 haiku 호출이 매칭할 모델을 찾지 못한 경우입니다. 최소한 백엔드 모델로 연결되는 default: 항목을 model_aliases에 추가하세요.

WebSearch가 결과를 0개 반환함

라우터 로그에서 web_search loop round complete 또는 에뮬레이션 로그를 확인하세요.

  • 검색 루프는 실행되었으나 Brave·Serper·Exa에서 HTTP 429를 반환했다면 프로바이더 속도 제한(rate limit)에 걸린 것입니다. 무료 플랜의 QPS 제한이 낮을 수 있으므로 플랜을 업그레이드하거나 다른 프로바이더로 전환하세요.
  • Rewrote request.model과 에뮬레이션 로그가 찍혔는데도 Claude Code에 검색 결과가 나타나지 않는다면 검색 프로바이더의 API 키가 유효한지 확인하세요.

Claude Code가 연결에 실패함

다음 항목을 점검하세요.

  • ANTHROPIC_BASE_URL이 /anthropic으로 끝나는지 확인하세요(끝에 /v1/messages를 붙이면 안 됩니다).
  • 라우터 연결 상태를 직접 확인하세요: curl $ANTHROPIC_BASE_URL/v1/messages -H 'content-type: application/json' -d '{"model":"my-model","max_tokens":10,"messages":[{"role":"user","content":"hi"}]}'
  • 라우터에서 API 키 인증을 강제하는 경우 ANTHROPIC_API_KEY에 등록된 유효한 키를 지정했는지 확인하세요.

API Error: 400 Invalid request sent to backend

백엔드가 변환된 요청을 거부한 것입니다. Anthropic이 아닌 모델에서 알려진 원인은 두 가지입니다.

  • 백엔드가 거부하는 thinking 파생 필드가 요청에 포함된 경우입니다. Claude Code는 확장 thinking이 켜져 있으면 output_config를 보내며, 변환된 요청이 백엔드가 거부하는 reasoning_effort 값을 담을 수 있습니다. 클라이언트에서 확장 thinking을 끄거나 해당 필드를 받아들이는 백엔드로 모델을 연결하세요.
  • 백엔드가 서빙하지 않는 모델 ID를 클라이언트가 보낸 경우입니다. 모든 ANTHROPIC_*_MODEL 변수가 라우터의 /v1/models에 나열된 모델을 가리키는지 확인하세요.

제한 사항

  • file_id로 Anthropic 호스팅 파일을 참조하는 첨부 파일: Claude Code의 기본 파일 업로드 흐름은 Anthropic Files API를 경유하며 라우터는 이를 프록시하지 않습니다. 파일 내용을 프롬프트에 인라인으로 붙여넣거나 라우터 자체 Files API(/v1/files)를 사용하세요.
  • [1m] 컨텍스트 윈도우 접미사: 컨텍스트 설정이 1M 토큰 윈도우를 의미하면 Claude Code가 모델 이름에 [1m]을 붙이며, 이 접미사는 라우터가 보는 모델 ID의 일부입니다. 접미사 없는 이름을 나열하는 tier 허용 목록이나 allowed_models 검사는 요청을 403 model_not_allowed로 거부합니다. Hub tier에서는 접미사가 붙은 ID를 서빙하는 백엔드가 없으면 404(not_found_error)로 거부합니다. CLAUDE_CODE_MAX_CONTEXT_TOKENS를 서빙 모델의 실제 윈도우 이하로 설정하거나, 접미사가 붙은 ID를 허용 목록에 나열하세요.
  • Anthropic 전용 속도 제한 헤더: 네이티브 Anthropic 백엔드 경로는 retry-after, x-should-retry, request-id, anthropic-ratelimit-unified-* 응답 헤더를 그대로 전달하므로 해당 헤더에 기반한 할당량 UI가 정상 동작합니다. 변환 경로 백엔드의 오류 응답도 같은 헤더를 전달하고, 라우터가 직접 만드는 상태 코드 408, 409, 429, 5xx 오류에는 x-should-retry: true가 붙습니다. 다만 자체 호스팅 백엔드는 Anthropic 전용 속도 제한 헤더를 생성하지 않으므로 관련 할당량 UI가 표시되지 않거나 다르게 보일 수 있습니다.
  • 요청 ID 헤더: API 키 인증이나 tier 허용 목록이 반환한 401, 403을 포함해 /anthropic/... 경로의 모든 응답에는 request-id 헤더가 포함됩니다. 자체 호스팅 백엔드에서는 사용량 원장이 저장하는 라우터 요청 ID(x-continuum-request-id 값, req_<32 hex>)가 담기고, 네이티브 Anthropic 백엔드가 반환한 request-id는 그대로 전달됩니다.
  • 변환 백엔드용 세이프가드 방출 규격의 관찰 범위: 어댑터의 safeguard_results 방출 형식은 실제 세션에서 캡처한 와이어 스키마를 따르지만, 실측 캡처로 확인된 것은 허용(not_flagged) 경로뿐이며 flagged, unavailable, 스트리밍 이벤트 매핑은 문서화된 설계 결정에 따릅니다. 캡처된 스키마와 세부 설계 결정은 프로토콜 기록을 참고하세요.

참조