---
title: Anthropic SDK 接入（Python / TypeScript）
description: 用 Anthropic 官方 SDK 调 1折AI：base_url 填 https://1zheai.com，原生支持缓存、流式、工具调用和 thinking。
---

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](/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 也读这两个变量，它们会一起切到 1折AI，这通常正是你想要的。

## 常见问题

<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>
