OllamaをAPIで使う|curlとPythonでローカルLLMを呼び出す

OllamaをAPIで使う|curlとPythonでローカルLLMを呼び出す

前回、Ollama を Windows にインストールして、ターミナルでモデルと対話するところまで進めました。

ただ、コマンドラインで会話できるだけでは、自作のスクリプトやアプリには組み込めません。

Ollama の本領は、起動と同時にローカルで立ち上がる HTTP API を直接叩けるところにあります。

この記事では、その API を curl と Python から呼び出す手順を、最小限のコードでまとめておきます。

WindowsでOllamaを動かす|ローカルLLM入門

Ollama の API は localhost:11434 で待っている

結論から言うと、Ollama アプリが起動していれば API はもう使える状態です。

Ollama は既定で 127.0.0.111434 ポートにバインドします。

つまり http://localhost:11434 がすべての入り口になるわけですね。

まずは手元のモデルが見えているかを /api/tags で確認すると話が早いです。

curl http://localhost:11434/api/tags

curl で叩く:/api/generate と /api/chat

テキスト生成のいちばん素直な入り口が /api/generate です。

プロンプトを 1 つ渡すと、その続きを生成して返してくれます。

curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt": "日本の首都はどこ?",
  "stream": false
}'

ここで注意したいのが stream の挙動。

省略すると既定でトークンごとに分割された JSON が次々と流れてきます

一度にまとめて受け取りたいときは、上の例のように "stream": false を明示しましょう。

一方、会話の文脈を保ちたいなら /api/chat を選びます。

messages 配列に rolecontent を積んでいく形式です。

curl http://localhost:11434/api/chat -d '{
  "model": "llama3.2",
  "messages": [
    { "role": "user", "content": "ローカルAPIって何が便利なの?" }
  ],
  "stream": false
}'

Python から使う:pip install ollama

実装に組み込むなら、公式の Python ライブラリが圧倒的に楽です。

HTTP の細かい部分を意識せず、関数呼び出しの感覚で書けます。

pip install ollama
from ollama import chat
response = chat(
    model="llama3.2",
    messages=[{"role": "user", "content": "なぜ空は青いの?"}],
)
print(response.message.content)

返ってきたテキストは response.message.content で取り出せます。

辞書ふうに response["message"]["content"] と書いても同じ結果です。

リアルタイムに表示したいなら stream=True を渡し、チャンクを順番に処理します。

stream = chat(
    model="llama3.2",
    messages=[{"role": "user", "content": "短い詩を書いて"}],
    stream=True,
)
for chunk in stream:
    print(chunk["message"]["content"], end="", flush=True)

ブラウザから叩くなら OLLAMA_ORIGINS に注意

ここが地味につまずくポイントでした。

Ollama は既定だと 127.0.0.10.0.0.0 以外からのクロスオリジン要求を弾きます。

ブラウザ拡張や別オリジンの Web ページから叩くなら、OLLAMA_ORIGINS に許可するオリジンを足してやる必要があります。

LAN の別端末からアクセスしたい場合は、OLLAMA_HOST=0.0.0.0:11434 でバインド先そのものを広げます。

ブラウザからローカル API に繋がらないときは、まず CORS とバインドアドレスを疑う

この構図は、以前 VOICEVOX をサンドボックス越しに叩こうとして詰まったときとまったく同じでした。

最後に

curl で疎通を確認し、Python ライブラリで実装に組み込む。

この 2 段階さえ押さえれば、ローカル LLM を自分のツールから自由に呼び出せます。

OpenAI 互換のエンドポイント /v1/chat/completions も用意されているので、既存コードの向き先を変えるだけで試せるのも嬉しいところ。

参考: Ollama 公式 FAQollama-pythonOpenAI compatibility

以上です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA