Ollama menyediakan kompatibilitas dengan Anthropic Messages API untuk membantu menghubungkan aplikasi yang sudah ada ke Ollama, termasuk alat seperti Claude Code.
Penggunaan
Variabel Lingkungan
Untuk menggunakan Ollama dengan alat yang mengharapkan API Anthropic (seperti Claude Code), atur variabel lingkungan berikut:
shell
export ANTHROPIC_AUTH_TOKEN=ollama # wajib diisi tetapi diabaikan
export ANTHROPIC_BASE_URL=http://localhost:11434Contoh sederhana /v1/messages
python
client = anthropic.Anthropic(
base_url='http://localhost:11434',
api_key='ollama', # wajib diisi tetapi diabaikan
)
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", // wajib diisi tetapi diabaikan
});
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?" }]
}'Contoh 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" }]
}'Contoh pemanggilan alat
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?" }]
}'Menggunakan dengan Claude Code
Claude Code dapat dikonfigurasi untuk menggunakan Ollama sebagai backendnya.
Model yang direkomendasikan
Untuk kasus penggunaan pemrograman, model seperti glm-4.7, minimax-m2.1, dan qwen3-coder direkomendasikan.
Unduh model sebelum menggunakannya:
shell
ollama pull qwen3-coderCatatan: Qwen 3 coder adalah model dengan 30B parameter yang membutuhkan setidaknya 24GB VRAM untuk berjalan dengan lancar. Diperlukan lebih banyak VRAM untuk panjang konteks yang lebih panjang.
shell
ollama pull glm-4.7:cloudPengaturan cepat
shell
ollama launch claudeIni akan meminta Anda untuk memilih model, mengonfigurasi Claude Code secara otomatis, dan menjalankannya. Untuk mengonfigurasi tanpa menjalankannya:
shell
ollama launch claude --configPengaturan manual
Atur variabel lingkungan dan jalankan Claude Code:
shell
ANTHROPIC_AUTH_TOKEN=ollama ANTHROPIC_BASE_URL=http://localhost:11434 claude --model qwen3-coderAtau atur variabel lingkungan di profil shell Anda:
shell
export ANTHROPIC_AUTH_TOKEN=ollama
export ANTHROPIC_BASE_URL=http://localhost:11434Kemudian jalankan Claude Code dengan model Ollama apa pun:
shell
claude --model qwen3-coderEndpoint
/v1/messages
Fitur yang didukung
- [x] Pesan
- [x] Streaming
- [x] Prompt sistem
- [x] Percakapan multi-turn
- [x] Vision (gambar)
- [x] Alat (pemanggilan fungsi)
- [x] Hasil alat
- [x] Pemikiran/pemikiran lanjutan
Bidang permintaan yang didukung
- [x]
model - [x]
max_tokens - [x]
messages- [x] Konten teks
content - [x] Konten gambar
content(base64) - [x] Array blok konten
- [x] Blok
tool_use - [x] Blok
tool_result - [x] Blok
thinking
- [x] Konten teks
- [x]
system(string atau array) - [x]
stream - [x]
temperature - [x]
top_p - [x]
top_k - [x]
stop_sequences - [x]
tools - [x]
thinking - [ ]
tool_choice - [ ]
metadata
Bidang respons yang didukung
- [x]
id - [x]
type - [x]
role - [x]
model - [x]
content(teks, blok tool_use, thinking) - [x]
stop_reason(end_turn, max_tokens, tool_use) - [x]
usage(input_tokens, output_tokens)
Event 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
Model
Ollama mendukung baik model lokal maupun cloud.
Model lokal
Tarik model lokal sebelum menggunakannya:
shell
ollama pull qwen3-coderModel lokal yang direkomendasikan:
qwen3-coder- Sangat baik untuk tugas pemrogramangpt-oss:20b- Model umum yang kuat
Model cloud
Model cloud tersedia langsung tanpa perlu menarik:
glm-4.7:cloud- Model cloud berperforma tinggiminimax-m2.1:cloud- Model cloud cepat
Nama model default
Untuk alat yang bergantung pada nama model Anthropic default seperti claude-3-5-sonnet, gunakan ollama cp untuk menyalin nama model yang ada:
shell
ollama cp qwen3-coder claude-3-5-sonnetSetelah itu, nama model baru ini dapat ditentukan di bidang 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!"
}
]
}'Perbedaan dari API Anthropic
Perbedaan perilaku
- Kunci API diterima tetapi tidak divalidasi
- Header
anthropic-versionditerima tetapi tidak digunakan - Jumlah token adalah perkiraan berdasarkan tokenizer model yang mendasarinya
Tidak didukung
Fitur API Anthropic berikut saat ini tidak didukung:
| Fitur | Deskripsi |
|---|---|
/v1/messages/count_tokens | Endpoint penghitungan token |
tool_choice | Memaksa penggunaan alat tertentu atau menonaktifkan alat |
metadata | Metadata permintaan (user_id) |
| Caching prompt | Blok cache_control untuk caching prefiks |
| API Batch | /v1/messages/batches untuk pemrosesan batch asinkron |
| Sitasi | Blok konten citations |
| Dukungan PDF | Blok konten document dengan file PDF |
| Kesalahan yang dikirim server | Event error selama streaming (kesalahan mengembalikan status HTTP) |
Dukungan parsial
| Fitur | Status |
|---|---|
| Konten gambar | Gambar base64 didukung; gambar URL tidak didukung |
| Pemikiran lanjutan | Dukungan dasar; budget_tokens diterima tetapi tidak dipaksa |