Skip to content

Anthropic

기본 패스스루 프로바이더 — 호출자 본인의 자격 증명을 전달하거나, API 키를 주입하거나, OAuth로 Claude 구독 계정을 풀링합니다.

Updated View as Markdown

내장 anthropic 프로바이더는 shunt의 기본 목적지입니다: 일치하는 라우트가 없는 모델은 모두 api.anthropic.com으로 변경 없이 전달됩니다(server.default_provider로 설정 가능). 이는 kind = "anthropic" 프로바이더입니다 — 업스트림이 이미 Anthropic Messages API를 사용하므로, shunt는 변환 없이 요청을 패스스루하고 어떤 자격 증명을 업스트림으로 보낼지만 결정합니다.

인증 모드 자격 증명 사용 사례
passthrough (기본값) 호출자 본인의 x-api-key / Authorization 투명 프록시 — 각 클라이언트가 자신의 키나 OAuth 토큰을 가져옴
api_key env 변수에서 읽는 서버 측 키 운영자 소유의 API 키 하나로 모든 요청을 다시 키잉
claude_oauth shunt가 관리하는 하나 이상의 Claude 구독 계정 풀링과 쿼터 인지 로테이션을 통해 Claude 구독을 사용

빠른 시작

코딩 에이전트가 대신 구성하도록 하세요 — shunt add는 내장된 설정 블루프린트를 출력합니다 (오프라인·읽기 전용이며, 구성은 에이전트가 편집하고 이 명령은 절대 편집하지 않습니다):

shunt add upstream anthropic --print | claude

또는 아래의 수동 단계를 따르세요.

업스트림 구성

anthropic은 내장입니다 — 구성이 전혀 없어도 shunt는 라우팅되지 않은 모델을 이미 passthrough로 그쪽에 전달합니다. 명시적으로 선언하려면(순서가 있는 페일오버를 위해서, 또는 인증을 바꾸기 위해서) kind = "anthropic", base_url = "https://api.anthropic.com", auth = "passthrough"를 제공하는 프리셋을 사용하세요:

[[upstreams]]
name = "anthropic"
provider = "anthropic"

명시적으로 지정한 필드는 프리셋 기본값을 오버라이드합니다. 레거시 [providers.anthropic] 테이블 형식도 계속 지원됩니다 — 다만 한 파일에서 [[upstreams]][providers.*]를 섞지 마세요.

패스스루 (기본값)

더 구성할 것이 없습니다: shunt는 클라이언트 본인의 x-api-key 또는 Authorization 헤더를 전달합니다. 서버 측 시크릿은 구성에 들어가지 않습니다. 클라이언트가 어떤 자격 증명을 보내야 하는지는 Claude Code 연결에서 다룹니다.

서버 측 API 키

호출자가 키를 가져오리라 믿는 대신 운영자 소유의 키를 주입하세요:

[[upstreams]]
name = "anthropic"
provider = "anthropic"
auth = { mode = "api_key", env = "ANTHROPIC_API_KEY", header = "x_api_key" }

서버 측 자격 증명을 주입한다면, 루프백 밖으로 노출하기 전에 [server.auth]로 게이트웨이를 보호하세요.

Claude 구독 계정 (claude_oauth)

갱신 가능한 shunt 관리 계정을 한 번 만든 다음, 업스트림을 그 계정으로 한정하세요:

shunt login claude --name primary --mode oauth
[[upstreams]]
name = "anthropic"
provider = "anthropic"
auth = { mode = "claude_oauth", account = "primary" }

shunt login claude에는 세 가지 모드가 있습니다: --mode oauth는 shunt 자체의 갱신 가능한 OAuth 플로우를 실행하고(권장), --mode import는 현재 Claude Code 로그인을 복사하며, --mode setup-token은 1년짜리 추론 전용 토큰을 생성합니다. account(그리고 accounts)를 생략하면 shunt가 관리하는 계정 스토어 전체를 스캔합니다 — 스토어에 계정이 여러 개 있으면 이는 세션 고정성과 쿼터 인지 로테이션을 갖춘 부하 분산 풀이 됩니다. 전체 풀링 동작 — 명시적 계정 항목, 계정별 임계값, [server.pool] 튜닝, 페일오버 — 은 Anthropic 멀티 계정에 문서화되어 있습니다.

모델 & 라우팅

기본 프로바이더이므로 anthropic에는 라우트가 필요 없습니다 — 다른 곳에 매핑하지 않은 것은 모두 여기로 옵니다. 순서가 있는 페일오버 체인 안에서 모델을 명시적으로 고정하려면:

[[models]]
id = "claude-sonnet-5"
display_name = "Claude Sonnet 5"

[models.upstream_model]
anthropic = "claude-sonnet-5"

맵의 키는 프리셋 id가 아니라 [[upstreams]].name입니다. auto_include_builtin_models = true(기본값)이면, GET /v1/modelsserver.default_provider가 Anthropic 종류일 때 먼저 그쪽의 실시간 모델 목록을 시도합니다. 그렇지 않으면 shunt의 내장 Claude 카탈로그 스냅샷으로 폴백합니다 — 모델 디스커버리를 참고하세요.

검증

shunt check    # -> config ok
shunt run
curl -sS http://127.0.0.1:3001/v1/models

그런 다음 최소 요청을 하나 보내세요(passthrough에서는 본인의 자격 증명을 포함하고, claude_oauth에서는 생략합니다):

curl -sS http://127.0.0.1:3001/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H 'anthropic-version: 2023-06-01' \
  -H 'content-type: application/json' \
  -d '{"model":"claude-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"Reply with OK."}]}'

관련 문서

Navigation

Type to search…

↑↓ navigate↵ selectEsc close