Ollama ofrece compatibilidad con la API de mensajes de Anthropic para ayudar a conectar aplicaciones existentes a Ollama, incluidas herramientas como Claude Code.
Uso
Variables de entorno
Para usar Ollama con herramientas que esperan la API de Anthropic (como Claude Code), configura estas variables de entorno:
shell
export ANTHROPIC_AUTH_TOKEN=ollama # requerido pero ignorado
export ANTHROPIC_BASE_URL=http://localhost:11434Ejemplo simple de /v1/messages
python
client = anthropic.Anthropic(
base_url='http://localhost:11434',
api_key='ollama', # requerido pero ignorado
)
message = client.messages.create(
model='qwen3-coder',
max_tokens=1024,
messages=[
{'role': 'user', 'content': 'Hello, how are you?'}
]
)
print(message.content[0].text)javascript
const anthropic = new Anthropic({
baseURL: "http://localhost:11434",
apiKey: "ollama", // requerido pero ignorado
});
const message = await anthropic.messages.create({
model: "qwen3-coder",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, how are you?" }],
});
console.log(message.content[0].text);shell
curl -X POST http://localhost:11434/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: ollama" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "qwen3-coder",
"max_tokens": 1024,
"messages": [{ "role": "user", "content": "Hello, how are you?" }]
}'Ejemplo de transmisión
python
client = anthropic.Anthropic(
base_url='http://localhost:11434',
api_key='ollama',
)
with client.messages.stream(
model='qwen3-coder',
max_tokens=1024,
messages=[{'role': 'user', 'content': 'Count from 1 to 10'}]
) as stream:
for text in stream.text_stream:
print(text, end='', flush=True)javascript
const anthropic = new Anthropic({
baseURL: "http://localhost:11434",
apiKey: "ollama",
});
const stream = await anthropic.messages.stream({
model: "qwen3-coder",
max_tokens: 1024,
messages: [{ role: "user", content: "Count from 1 to 10" }],
});
for await (const event of stream) {
if (
event.type === "content_block_delta" &&
event.delta.type === "text_delta"
) {
process.stdout.write(event.delta.text);
}
}shell
curl -X POST http://localhost:11434/v1/messages \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-coder",
"max_tokens": 1024,
"stream": true,
"messages": [{ "role": "user", "content": "Count from 1 to 10" }]
}'Ejemplo de llamada a herramientas
python
client = anthropic.Anthropic(
base_url='http://localhost:11434',
api_key='ollama',
)
message = client.messages.create(
model='qwen3-coder',
max_tokens=1024,
tools=[
{
'name': 'get_weather',
'description': 'Get the current weather in a location',
'input_schema': {
'type': 'object',
'properties': {
'location': {
'type': 'string',
'description': 'The city and state, e.g. San Francisco, CA'
}
},
'required': ['location']
}
}
],
messages=[{'role': 'user', 'content': "What's the weather in San Francisco?"}]
)
for block in message.content:
if block.type == 'tool_use':
print(f'Tool: {block.name}')
print(f'Input: {block.input}')javascript
const anthropic = new Anthropic({
baseURL: "http://localhost:11434",
apiKey: "ollama",
});
const message = await anthropic.messages.create({
model: "qwen3-coder",
max_tokens: 1024,
tools: [
{
name: "get_weather",
description: "Get the current weather in a location",
input_schema: {
type: "object",
properties: {
location: {
type: "string",
description: "The city and state, e.g. San Francisco, CA",
},
},
required: ["location"],
},
},
],
messages: [{ role: "user", content: "What's the weather in San Francisco?" }],
});
for (const block of message.content) {
if (block.type === "tool_use") {
console.log("Tool:", block.name);
console.log("Input:", block.input);
}
}shell
curl -X POST http://localhost:11434/v1/messages \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-coder",
"max_tokens": 1024,
"tools": [
{
"name": "get_weather",
"description": "Get the current weather in a location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state"
}
},
"required": ["location"]
}
}
],
"messages": [{ "role": "user", "content": "What is the weather in San Francisco?" }]
}'Usar con Claude Code
Claude Code se puede configurar para usar Ollama como backend.
Modelos recomendados
Para casos de uso de programación, se recomiendan modelos como glm-4.7, minimax-m2.1 y qwen3-coder.
Descarga un modelo antes de usarlo:
shell
ollama pull qwen3-coderNota: Qwen 3 coder es un modelo de 30B parámetros que requiere al menos 24 GB de VRAM para funcionar sin problemas. Se requiere más VRAM para longitudes de contexto mayores.
shell
ollama pull glm-4.7:cloudConfiguración rápida
shell
ollama launch claudeEsto te pedirá que selecciones un modelo, configurará Claude Code automáticamente y lo iniciará. Para configurar sin iniciar:
shell
ollama launch claude --configConfiguración manual
Configura las variables de entorno y ejecuta Claude Code:
shell
ANTHROPIC_AUTH_TOKEN=ollama ANTHROPIC_BASE_URL=http://localhost:11434 claude --model qwen3-coderO bien configura las variables de entorno en el perfil de tu shell:
shell
export ANTHROPIC_AUTH_TOKEN=ollama
export ANTHROPIC_BASE_URL=http://localhost:11434Luego ejecuta Claude Code con cualquier modelo de Ollama:
shell
claude --model qwen3-coderEndpoints
/v1/messages
Funcionalidades compatibles
- [x] Mensajes
- [x] Transmisión
- [x] Instrucciones de sistema
- [x] Conversaciones de múltiples turnos
- [x] Visión (imágenes)
- [x] Herramientas (llamada a funciones)
- [x] Resultados de herramientas
- [x] Pensamiento/pensamiento extendido
Campos de solicitud compatibles
- [x]
model - [x]
max_tokens - [x]
messages- [x] Contenido de texto
content - [x] Contenido de imagen
content(base64) - [x] Array de bloques de contenido
- [x] Bloques
tool_use - [x] Bloques
tool_result - [x] Bloques
thinking
- [x] Contenido de texto
- [x]
system(cadena o array) - [x]
stream - [x]
temperature - [x]
top_p - [x]
top_k - [x]
stop_sequences - [x]
tools - [x]
thinking - [ ]
tool_choice - [ ]
metadata
Campos de respuesta compatibles
- [x]
id - [x]
type - [x]
role - [x]
model - [x]
content(bloques de texto, tool_use, thinking) - [x]
stop_reason(end_turn, max_tokens, tool_use) - [x]
usage(input_tokens, output_tokens)
Eventos de transmisión
- [x]
message_start - [x]
content_block_start - [x]
content_block_delta(text_delta, input_json_delta, thinking_delta) - [x]
content_block_stop - [x]
message_delta - [x]
message_stop - [x]
ping - [x]
error
Modelos
Ollama es compatible con modelos locales y en la nube.
Modelos locales
Descarga un modelo local antes de usarlo:
shell
ollama pull qwen3-coderModelos locales recomendados:
qwen3-coder- Excelente para tareas de programacióngpt-oss:20b- Modelo multipropósito potente
Modelos en la nube
Los modelos en la nube están disponibles inmediatamente sin necesidad de descargarlos:
glm-4.7:cloud- Modelo en la nube de alto rendimientominimax-m2.1:cloud- Modelo en la nube rápido
Nombres de modelo predeterminados
Para herramientas que dependen de nombres de modelo predeterminados de Anthropic como claude-3-5-sonnet, usa ollama cp para copiar un nombre de modelo existente:
shell
ollama cp qwen3-coder claude-3-5-sonnetDespués, este nuevo nombre de modelo se puede especificar en el campo model:
shell
curl http://localhost:11434/v1/messages \
-H "Content-Type: application/json" \
-d '{
"model": "claude-3-5-sonnet",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
}'Diferencias con la API de Anthropic
Diferencias de comportamiento
- La clave de API se acepta pero no se valida
- La cabecera
anthropic-versionse acepta pero no se utiliza - Los recuentos de tokens son aproximaciones basadas en el tokenizador del modelo subyacente
No compatible
Las siguientes funcionalidades de la API de Anthropic no son compatibles actualmente:
| Característica | Descripción |
|---|---|
/v1/messages/count_tokens | Endpoint de recuento de tokens |
tool_choice | Forzar el uso de una herramienta específica o deshabilitar herramientas |
metadata | Metadatos de la solicitud (user_id) |
| Caché de indicadores | Bloques cache_control para almacenar prefijos en caché |
| API de lotes | /v1/messages/batches para procesamiento de lotes asíncrono |
| Citas | Bloques de contenido citations |
| Compatibilidad con PDF | Bloques de contenido document con archivos PDF |
| Errores enviados por el servidor | Eventos error durante la transmisión (los errores devuelven un estado HTTP) |
Compatibilidad parcial
| Característica | Estado |
|---|---|
| Contenido de imagen | Se admiten imágenes en base64; no se admiten imágenes por URL |
| Pensamiento extendido | Compatibilidad básica; budget_tokens se acepta pero no se aplica |