---
title: "Integración con el SDK de Anthropic (Python / TypeScript)"
description: "Llama a 1折AI con el SDK oficial de Anthropic: base_url es https://1zheai.com, con soporte nativo para caché, streaming, llamadas a herramientas y thinking."
headingIds: {"Instalación":"section-1","Llamada":"section-2","Salida en streaming":"section-3","Llamada con caché":"section-4","Uso de variables de entorno":"section-5","Preguntas frecuentes":"section-6","Estructura de solicitud y respuesta":"section-7"}
---

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

Documentación mantenida por [1ZheAI](https://1zheai.com/en/editorial/#publisher). [Fuentes y correcciones](https://1zheai.com/en/editorial/).

¿Encontraste un error? [Contacta con soporte](mailto:support@1zheai.com) indicando la dirección de la página y una descripción. No envíes claves de API ni credenciales de cuenta.

</aside>
El SDK oficial de Anthropic usa el endpoint nativo `/v1/messages`, y todos los parámetros de Claude se pueden usar directamente. Lo único que hay que cambiar es `base_url` y `api_key`.

## Instalación

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

## Llamada

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

En `base_url` se indica la dirección raíz; no añadas `/v1`.

## Salida en streaming

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

## Llamada con caché

Coloca el contenido largo y fijo en `system` y añade `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)
```

En la segunda llamada, si `cache_read_input_tokens` es mayor que 0, fue un acierto. Para más detalles, consulta [Prompt Caching](/es/docs/prompt-caching/).

## Uso de variables de entorno

El SDK oficial lee `ANTHROPIC_BASE_URL` y `ANTHROPIC_API_KEY`; también puedes no pasar parámetros al construir el cliente:

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

Luego, al construir el cliente, no pases parámetros:

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

Si en esta máquina Claude Code también lee estas dos variables, ambas cambiarán a 1折AI, que normalmente es justo lo que quieres.

## Preguntas frecuentes

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

Se escribió de más `/v1` en `base_url`. El SDK de Anthropic ensambla `/v1/messages` por sí mismo.

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

Comprueba la clave de API (API key); además, si en el entorno también existe `ANTHROPIC_AUTH_TOKEN` (por ejemplo, un valor antiguo configurado antes para Claude Code), el SDK también lo leerá; elimina el valor antiguo y vuelve a intentarlo.

</Accordion>
</AccordionGroup>

## Estructura de solicitud y respuesta

Cuando necesites consultar system, los bloques de contenido y la razón de detención, consulta [Detalles de la interfaz Messages](/es/docs/api-messages/). Un programa completo debe leer el texto según el tipo de bloque de contenido, sin asumir que el primer bloque siempre es text.
