---
title: "Anthropic SDK 연동 (Python / TypeScript)"
description: "Anthropic 공식 SDK로 1zheai 호출: base_url에 https://1zheai.com 입력, 캐시·스트리밍·도구 호출·thinking을 네이티브 지원."
headingIds: {"설치":"section-1","호출":"section-2","스트리밍 출력":"section-3","캐시를 사용한 호출":"section-4","환경 변수 사용":"section-5","자주 묻는 질문":"section-6","요청 및 응답 구조":"section-7"}
---

<aside className="docs-publication" data-pagefind-ignore>

[1ZheAI](https://1zheai.com/en/editorial/#publisher)가 관리하는 문서입니다. [출처 및 수정 사항](https://1zheai.com/en/editorial/).

오류를 발견하셨나요? 페이지 주소와 설명을 첨부하여 [고객 지원](mailto:support@1zheai.com)으로 문의해 주세요. API 키나 계정 정보는 보내지 마세요.

</aside>
Anthropic 공식 SDK는 네이티브 `/v1/messages`을 사용하므로 Claude의 모든 파라미터를 그대로 사용할 수 있습니다. 변경할 부분은 `base_url`과 `api_key`뿐입니다.

## 설치

<CodeGroup>
```bash title="Python"
pip install anthropic
```
```bash title="TypeScript / Node.js"
npm install @anthropic-ai/sdk
```
</CodeGroup>

## 호출

<CodeGroup>
```python title="Python"
import os
import anthropic

client = anthropic.Anthropic(
    base_url="https://1zheai.com",
    api_key=os.environ["ONEZHE_API_KEY"],
)

message = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "用一句话介绍你自己"}],
)
print(message.model)
print(message.content[0].text)
print(message.usage)
```
```typescript title="TypeScript"
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://1zheai.com",
  apiKey: process.env.ONEZHE_API_KEY,
});

const message = await client.messages.create({
  model: "claude-sonnet-5-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "用一句话介绍你自己" }],
});
console.log(message.model);
console.log(message.content);
console.log(message.usage);
```
</CodeGroup>

`base_url`에 루트 주소를 입력하며, `/v1`을 붙이지 마세요.

## 스트리밍 출력

<CodeGroup>
```python title="Python"
with client.messages.stream(
    model="claude-sonnet-5-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "写一首四行的诗"}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
```
```typescript title="TypeScript"
const stream = client.messages.stream({
  model: "claude-sonnet-5-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "写一首四行的诗" }],
});
stream.on("text", (text) => process.stdout.write(text));
await stream.finalMessage();
```
</CodeGroup>

## 캐시를 사용한 호출

길고 고정된 내용을 `system`에 넣고 `cache_control`을 추가하세요:

```python title="Python"
message = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": LONG_PROJECT_CONTEXT,  # 每次都一样的长文本
            "cache_control": {"type": "ephemeral"},
        }
    ],
    messages=[{"role": "user", "content": "根据上面的说明回答：..."}],
)
print(message.usage.cache_creation_input_tokens, message.usage.cache_read_input_tokens)
```

두 번째 호출 시 `cache_read_input_tokens`이 0보다 크면 캐시에 적중한 것입니다. 자세한 내용은 [Prompt Caching](/ko/docs/prompt-caching/)을 참조하세요.

## 환경 변수 사용

공식 SDK는 `ANTHROPIC_BASE_URL`과 `ANTHROPIC_API_KEY`을 읽으므로, 클라이언트 생성 시 파라미터를 전달하지 않아도 됩니다:

```bash
export ANTHROPIC_BASE_URL="https://1zheai.com"
export ANTHROPIC_API_KEY="sk-你的Key"
```

그런 다음 클라이언트 생성 시 파라미터를 전달하지 않습니다:

```python
client = anthropic.Anthropic()  # 自动读取上面两个变量
```

이 기기에서 Claude Code도 이 두 변수를 읽는다면, 둘 다 1zheai로 전환됩니다. 보통 원하는 결과가 바로 이것입니다.

## 자주 묻는 질문

<AccordionGroup>
<Accordion title="404？">

`base_url`에 `/v1`을 과도하게 입력했습니다. Anthropic SDK가 `/v1/messages`을 자동으로 조합합니다.

</Accordion>
<Accordion title="401？">

API 키(API key)를 확인하세요. 또한, 환경에 `ANTHROPIC_AUTH_TOKEN`(예: 이전에 Claude Code에 설정한 오래된 값)이 동시에 존재하면 SDK가 이것도 읽으므로, 오래된 값을 삭제한 후 다시 시도하세요.

</Accordion>
</AccordionGroup>

## 요청 및 응답 구조

system, 콘텐츠 블록, 중지 원인을 조회해야 한다면 [Messages 인터페이스 상세](/ko/docs/api-messages/)을 확인하세요. 완전한 프로그램은 콘텐츠 블록 유형에 따라 텍스트를 읽어야 하며, 첫 번째 블록이 항상 text라고 가정하지 마세요.
