# Anthropic SDK

> base_url 만 바꾸면 돼요.

> 원문: https://oneport.kr/docs/guides/anthropic-sdk

> **base_url 에 /v1 을 붙이지 마세요**
>
> Anthropic SDK 가 /v1/messages 를 알아서 붙여요. OpenAI SDK 와 다른 부분이에요.

```python
import anthropic

client = anthropic.Anthropic(
    api_key="sk-so-...",
    base_url="https://oneport.kr",
)

message = client.messages.create(
    model="claude-opus-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "안녕하세요"}],
)
print(next(b.text for b in message.content if b.type == "text"))
```

## 스트리밍

**받는 대로 흘려받기**

```python
with client.messages.stream(
    model="claude-sonnet-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "분수 단원 수업 계획을 써줘"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
```

> **이 문은 몸통을 손대지 않아요**
>
> 번역이 없어서 보내신 그대로 Anthropic 에 닿아요. thinking · 프롬프트 캐싱(cache_control) · 도구까지 그쪽 문서 그대로 쓰시면 돼요. 저희가 새 기능을 배선하기 전에 먼저 쓰고 싶으실 때 이쪽이 확실해요. 웹 검색 같은 벤더 서버 도구는 그 요금도 같이 빠지고, 요금을 셀 수 없는 것만 400 으로 돌려드려요 — 모델과 단가의 「벤더 서버 도구 요금」을 보세요.

## 안 될 때

- 404 가 난다 — base_url 끝에 /v1 을 붙이셨을 거예요. SDK 가 /v1/messages 를 스스로 붙여서 두 번 붙어요. oneport.kr 까지만 적어주세요.
- 400 이 난다 — max_tokens 를 안 보내셨을 수 있어요. Anthropic 은 이 값이 필수이고, 이 문은 번역이 없어서 저희가 채워드리지 않아요. /v1/chat/completions 쪽은 8,192 로 채워드려요.
- temperature 로 400 이 난다 — Claude 5 세대가 이 값을 거절해요. 빼시거나, 저희가 알아서 빼주는 /v1/chat/completions 로 부르시면 돼요.
- GPT·Gemini 를 넣었더니 400 이 난다 — 이 문은 Claude 만 받아요. 여러 벤더를 섞으시려면 /v1/chat/completions 쪽이 편해요.

## 원래대로 되돌리기

base_url 한 줄을 지우시면 Anthropic 직접 연결로 돌아가요. 코드에 남는 우리 흔적이 그 줄 하나뿐이에요.

