はじめに
Ollama は単なる CLI ツールではありません。上で実行される REST API を公開します http://localhost:11434これにより、あらゆるアプリケーションが LLM を呼び出すことができるようになります。特に、Ollama は OpenAI 互換エンドポイント をサポートしています。つまり、OpenAI API 用に作成されたコードは、Ollama モデルをほとんど変更せずに使用できます。
1. 基本 API
サーバーを確認してください
curl http://localhost:11434
# Output: Ollama is running
/api/generate — テキストを生成する
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Viết hàm fibonacci bằng Python",
"stream": false
}'
応答:
{
"model": "llama3.2",
"response": "```Python\ndef fibonacci(n):\n ...",
「完了」: true、
"合計期間": 3241920000、
"prompt_eval_count": 12、
"prompt_eval_duration": 180000000、
"eval_count": 156、
"eval_duration": 2890000000
}
/api/chat — Chat với history
カールする http://localhost:11434/api/chat -d '{
"モデル": "ラマ3.2",
「メッセージ」: [
{"role": "system", "content": "あなたは Python の専門家です。ベトナム語で答えてください。"},
{"role": "user", "content": "辞書理解とは何ですか?"}
]、
「ストリーム」: false
}'
/api/embeddings — Vector embeddings
カールする http://localhost:11434/api/embeddings -d '{
"モデル": "ノミック埋め込みテキスト",
"prompt": "Docker はコンテナ化テクノロジーです"
}'
Response chứa vector embedding (mảng số thực), dùng cho RAG, semantic search.
2. Streaming responses
Mặc định stream: true — Ollama trả về từng chunk:
カールする http://localhost:11434/api/generate -d '{
"モデル": "ラマ3.2",
"prompt": "マイクロサービスについて説明します"
}'
Mỗi dòng là một JSON object:
{"モデル":"llama3.2","応答":"マイクロ","完了":false}
{"モデル":"llama3.2","応答":"サービス","完了":false}
{"モデル":"llama3.2","応答":" は","完了":false}
...
{"モデル":"llama3.2","応答":"","完了":true,"合計期間":...}
3. OpenAI-compatible endpoint
Ollama expose endpoint tương thích OpenAI tại /v1/:
# チャット完了 (OpenAI など)
カールする http://localhost:11434/v1/chat/completions -d '{
"モデル": "ラマ3.2",
「メッセージ」: [
{"役割": "ユーザー", "コンテンツ": "こんにちは、あなたは誰ですか?"}
】
}'
Dùng OpenAI Python SDK
pip3 インストール openai
openaiインポートからOpenAI
# OpenAI の代わりに Ollama を指す
クライアント = OpenAI(
Base_url=http://localhost:11434/v1"、
api_key="ollama", # Ollama にはキーは必要ありませんが、SDK ではキーが必要です
)
応答 = client.chat.completions.create(
モデル="ラマ3.2"、
メッセージ=[
{"role": "システム", "content": "ベトナム語で返信します。"},
{"role": "ユーザー", "content": "Kubernetes とは何ですか?"},
]、
温度=0.7、
max_tokens=500、
)
print(response.choices[0].message.content)
Streaming với OpenAI SDK
openaiインポートからOpenAI
client = OpenAI(base_url=http://localhost:11434/v1"、api_key="オラマ")
stream = client.chat.completions.create(
モデル="ラマ3.2"、
messages=[{"role": "user", "content": "Python でクイックソート関数を書く"}],
ストリーム=真、
)
ストリーム内のチャンクの場合:
chunk.choices[0].delta.contentの場合:
print(chunk.choices[0].delta.content, end="", flash=True)
プリント()
💡 Tại sao điều này quan trọng? Bất kỳ thư viện/framework nào hỗ trợ OpenAI API (LangChain, LlamaIndex, Vercel AI SDK, Cursor, Continue.dev...) đều có thể dùng Ollama chỉ bằng cách đổi
base_url.
4. Python requests (không cần SDK)
インポートリクエスト
jsonをインポートする
def チャット(メッセージ、モデル = "llama3.2"、ストリーム = False):
応答 = リクエスト.post(
」http://localhost:11434/api/chat"、
json={"モデル": モデル、"メッセージ": メッセージ、"ストリーム": ストリーム}
)
ストリームの場合:
response.iter_lines() の行:
行の場合:
データ = json.loads(行)
データ["完了"]でない場合:
生成データ["メッセージ"]["コンテンツ"]
それ以外の場合:
return response.json()["メッセージ"]["コンテンツ"]
# 非ストリーミング
結果 = チャット([
{"role": "user", "content": "Docker とは何ですか?"}
])
印刷(結果)
#ストリーミング
print("\n--- ストリーミング ---")
チャット内のトークン用(
[{"ロール": "ユーザー", "コンテンツ": "二分検索関数を作成する"}],
ストリーム=真
):
print(トークン、end=""、flush=True)
5. JavaScript/TypeScript (Node.js)
Fetch API
非同期関数 chat(メッセージ) {
const 応答 = fetch を待ちます('http://localhost:11434/api/chat'、{
メソッド: 'POST'、
ヘッダー: { 'Content-Type': 'application/json' },
本文: JSON.stringify({
モデル: 'ラマ3.2'、
メッセージ、
ストリーム: false、
})、
});
const data = 応答を待ちます.json();
データ.メッセージ.コンテンツを返します。
}
// 使用する
const result = チャットを待ちます([
{ 役割: 'ユーザー'、コンテンツ: 'JavaScript で Promise を説明する' },
]);
console.log(結果);
Streaming với ReadableStream
非同期関数 streamChat(messages) {
const 応答 = fetch を待ちます('http://localhost:11434/api/chat'、{
メソッド: 'POST'、
ヘッダー: { 'Content-Type': 'application/json' },
本文: JSON.stringify({
モデル: 'ラマ3.2'、
メッセージ、
ストリーム: true、
})、
});
const リーダー = 応答.body.getReader();
const デコーダ = 新しい TextDecoder();
while (true) {
const {完了、値} = Reader.read(); を待ちます。
(終わったら)休憩する。
const Lines = decoder.decode(value).split('\n').filter(Boolean);
for (const 行) {
const データ = JSON.parse(line);
if (!data.done) {
process.stdout.write(data.message.content);
}
}
}
コンソール.log();
}
ストリームチャットを待ちます([
{ 役割: 'ユーザー', コンテンツ: 'TypeScript でデータを取得する非同期関数を作成する' },
]);
Dùng OpenAI SDK cho JavaScript
npm インストール openai
「openai」から OpenAI をインポートします。
const client = new OpenAI({
ベースURL: 'http://localhost:11434/v1'、
apiKey: 'オラマ',
});
const completed = await client.chat.completions.create({
モデル: 'ラマ3.2'、
メッセージ: [{ 役割: 'ユーザー'、コンテンツ: 'こんにちは!' }]、
});
console.log(completion.choices[0].message.content);
6. API Parameters quan trọng
| Parameter | Mô tả | Mặc định |
|---|---|---|
temperature | Độ sáng tạo (0.0-2.0) | 0.8 |
top_p | Nucleus sampling | 0.9 |
top_k | Top-k sampling | 40 |
num_predict | Max tokens generate | 128 |
num_ctx | Context window size | 2048 |
stop | Stop sequences | [] |
seed | Random seed (cho reproducible) | random |
keep_alive | Thời gian giữ model loaded | "5m" |
カールする http://localhost:11434/api/generate -d '{
"モデル": "ラマ3.2",
"prompt": "プログラミングについての詩を書いてください",
"オプション": {
「温度」: 1.2、
"top_p": 0.95、
"num_predict": 300、
「種」:42
}、
「ストリーム」: false
}'
7. Model management API
# モデルをリストする
カールする http://localhost:11434/api/tags
# モデル情報を表示
カールする http://localhost:11434/api/show -d '{"名前": "llama3.2"}'
# プルモデル
カールする http://localhost:11434/api/pull -d '{"名前": "gemma3:4b"}'
# モデルの削除
カールする http://localhost:11434/api/delete -d '{"名前": "ミストラル"}'
# 実行中のモデル
カールする http://localhost:11434/api/ps
8. Expose API ra mạng local
Mặc định Ollama chỉ listen trên localhost. Để expose cho các máy khác trong mạng:
# すべてのインターフェイスでリッスンする
エクスポート OLLAMA_HOST=0.0.0.0:11434
オラマサーブ
Giờ các máy khác trong mạng có thể truy cập:
# 別のデバイスから
カールする http://192.168.1.100:11434/api/generate -d '{
"モデル": "ラマ3.2",
"プロンプト": "こんにちは!",
「ストリーム」: false
}'
⚠️ Bảo mật: Chỉ expose trong mạng nội bộ (LAN). Không expose ra internet public nếu không có authentication.
Tóm tắt
| Endpoint | Method | Mô tả |
|---|---|---|
/api/生成 | POST | Generate text |
/api/チャット | POST | Chat với message history |
/api/embeddings | POST | Vector embeddings |
/v1/チャット/コンプリート | POST | OpenAI-compatible |
/api/タグ | GET | List models |
/api/show | POST | Model info |
/api/プル | POST | Pull model |
/api/ps | GET | Running models |
Bài tập
- Dùng curl gọi
/api/チャットvới system prompt tiếng Việt - Viết Python script tạo chatbot terminal dùng requests + streaming
- Dùng OpenAI SDK Python/JS trỏ tới Ollama, chạy chat
- Đo thời gian response với các `温度が異なる (0.1、0.7、1.5)
- Ollama を LAN に公開し、携帯電話から (ブラウザ経由で) 通話してみます。
次の記事: Python でローカル チャットボットを構築する →