Ollama est compatible avec l'API Messages d'Anthropic pour vous aider à connecter vos applications existantes à Ollama, y compris des outils comme Claude Code.
Utilisation
Variables d'environnement
Pour utiliser Ollama avec des outils qui attendent l'API Anthropic (comme Claude Code), définissez ces variables d'environnement :
shell
export ANTHROPIC_AUTH_TOKEN=ollama # obligatoire mais ignoré
export ANTHROPIC_BASE_URL=http://localhost:11434Exemple simple de /v1/messages
python
client = anthropic.Anthropic(
base_url='http://localhost:11434',
api_key='ollama', # obligatoire mais ignoré
)
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", // obligatoire mais ignoré
});
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?" }]
}'Exemple de streaming
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" }]
}'Exemple d'appel d'outils
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?" }]
}'Utilisation avec Claude Code
Claude Code peut être configuré pour utiliser Ollama comme backend.
Modèles recommandés
Pour les cas d'usage liés au code, des modèles comme glm-4.7, minimax-m2.1 et qwen3-coder sont recommandés.
Téléchargez un modèle avant de l'utiliser :
shell
ollama pull qwen3-coderNote : Qwen 3 Coder est un modèle de 30 milliards de paramètres nécessitant au moins 24 Go de VRAM pour fonctionner correctement. Davantage de mémoire est nécessaire pour des longueurs de contexte plus importantes.
shell
ollama pull glm-4.7:cloudConfiguration rapide
shell
ollama launch claudeCela vous invitera à sélectionner un modèle, configurera Claude Code automatiquement et le lancera. Pour configurer sans lancer :
shell
ollama launch claude --configConfiguration manuelle
Définissez les variables d'environnement et exécutez Claude Code :
shell
ANTHROPIC_AUTH_TOKEN=ollama ANTHROPIC_BASE_URL=http://localhost:11434 claude --model qwen3-coderOu définissez les variables d'environnement dans votre profil de shell :
shell
export ANTHROPIC_AUTH_TOKEN=ollama
export ANTHROPIC_BASE_URL=http://localhost:11434Exécutez ensuite Claude Code avec n'importe quel modèle Ollama :
shell
claude --model qwen3-coderPoints de terminaison
/v1/messages
Fonctionnalités prises en charge
- [x] Messages
- [x] Streaming
- [x] Instructions système
- [x] Conversations multi-tours
- [x] Vision (images)
- [x] Outils (appel de fonctions)
- [x] Résultats d'outils
- [x] Réflexion / réflexion étendue
Champs de requête pris en charge
- [x]
model - [x]
max_tokens - [x]
messages- [x] Contenu textuel
- [x] Contenu image (base64)
- [x] Tableau de blocs de contenu
- [x] Blocs
tool_use - [x] Blocs
tool_result - [x] Blocs
thinking
- [x]
system(chaîne de caractères ou tableau) - [x]
stream - [x]
temperature - [x]
top_p - [x]
top_k - [x]
stop_sequences - [x]
tools - [x]
thinking - [ ]
tool_choice - [ ]
metadata
Champs de réponse pris en charge
- [x]
id - [x]
type - [x]
role - [x]
model - [x]
content(blocs texte, tool_use, thinking) - [x]
stop_reason(end_turn, max_tokens, tool_use) - [x]
usage(input_tokens, output_tokens)
Événements de streaming
- [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
Modèles
Ollama prend en charge à la fois des modèles locaux et des modèles cloud.
Modèles locaux
Téléchargez un modèle local avant de l'utiliser :
shell
ollama pull qwen3-coderModèles locaux recommandés :
qwen3-coder- Excellent pour les tâches de codegpt-oss:20b- Modèle généraliste performant
Modèles cloud
Les modèles cloud sont disponibles immédiatement sans téléchargement préalable :
glm-4.7:cloud- Modèle cloud haute performanceminimax-m2.1:cloud- Modèle cloud rapide
Noms de modèles par défaut
Pour les outils qui s'appuient sur des noms de modèles Anthropic par défaut comme claude-3-5-sonnet, utilisez ollama cp pour copier un nom de modèle existant :
shell
ollama cp qwen3-coder claude-3-5-sonnetPar la suite, ce nouveau nom de modèle peut être spécifié dans le champ 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!"
}
]
}'Différences avec l'API Anthropic
Différences de comportement
- La clé API est acceptée mais non validée
- L'en-tête
anthropic-versionest accepté mais non utilisé - Les comptages de tokens sont des approximations basées sur le tokenizer du modèle sous-jacent
Non pris en charge
Les fonctionnalités suivantes de l'API Anthropic ne sont pas actuellement prises en charge :
| Fonctionnalité | Description |
|---|---|
/v1/messages/count_tokens | Point de terminaison de comptage de tokens |
tool_choice | Forcer l'utilisation d'un outil spécifique ou désactiver les outils |
metadata | Métadonnées de requête (user_id) |
| Mise en cache des prompts | Blocs cache_control pour la mise en cache des préfixes |
| API Batches | /v1/messages/batches pour le traitement de lots asynchrone |
| Citations | Blocs de contenu citations |
| Support PDF | Blocs de contenu document avec des fichiers PDF |
| Erreurs envoyées par le serveur | Événements error pendant le streaming (les erreurs renvoient un statut HTTP) |
Prise en charge partielle
| Fonctionnalité | Statut |
|---|---|
| Contenu image | Images base64 prises en charge ; images par URL non prises en charge |
| Réflexion étendue | Prise en charge basique ; budget_tokens est accepté mais non appliqué |