OllamaをPythonと統合する: REST APIとPythonクライアントの例
+ 思考型LLMを使用した具体的な例
この投稿では、PythonアプリケーションをOllamaに接続する方法について2つの方法を紹介します。1つ目はHTTP REST APIを介して、2つ目は公式のOllama Pythonライブラリを介して行います。
チャットと生成の呼び出しの両方をカバーし、**「思考モデル」**を効果的に使用する方法についても説明します。
Ollama は、大規模言語モデル(LLM)をローカルで実行する最も便利な方法の1つとして急速に普及しています。シンプルなインターフェースと、Llama 3、Mistral、Qwen2.5、そしてqwen3などの「思考」バリアントを含む人気のあるオープンモデルへのサポートにより、外部のクラウドAPIに依存することなく、PythonプロジェクトにAI機能を簡単に組み込むことができます。
🧩 事前準備
始めに、以下のものを準備してください:
pip install requests ollama
Ollamaが実行中であることを確認するために以下を実行してください:
ollama list
llama3
、mistral
、qwen3
などの利用可能なモデルが表示されるはずです。
⚙️ オプション1: OllamaのREST APIを使用する
HTTPリクエストを処理するフレームワークと統合する必要がある場合、または最大限の制御を必要とする場合に、REST APIは理想的です。
例1: チャットAPI
import requests
import json
url = "http://localhost:11434/api/chat"
payload = {
"model": "llama3.1",
"messages": [
{"role": "system", "content": "あなたはPythonのアシスタントです。"},
{"role": "user", "content": "文字列を逆順に返す関数を書くようにしてください。"}
]
}
response = requests.post(url, json=payload, stream=True)
for line in response.iter_lines():
if line:
data = json.loads(line)
print(data.get("message", {}).get("content", ""), end="")
👉 OllamaのREST APIは、OpenAIのストリーミングAPIと同様に、行ごとに応答をストリーミングします。チャットボットやCLIツールでリアルタイムに表示したり、コンテンツを蓄積したりできます。
例2: 生成API
チャットコンテキストやロールが必要ない場合は、シンプルな/api/generate
エンドポイントを使用してください:
import requests
url = "http://localhost:11434/api/generate"
payload = {
"model": "llama3.1",
"prompt": "再帰を1文で説明してください。"
}
response = requests.post(url, json=payload, stream=True)
for line in response.iter_lines():
if line:
print(line.decode("utf-8"))
このエンドポイントは、要約やコードスニペットなどのワンショットテキスト生成タスクに最適です。
🐍 オプション2: Ollama Pythonライブラリを使用する
Ollama Pythonクライアントは、Pythonに完全に留まっている開発者にとって、より洗練されたインターフェースを提供します。
例1: チャットAPI
import ollama
response = ollama.chat(
model="llama3.1",
messages=[
{"role": "system", "content": "あなたはコードのアシスタントです。"},
{"role": "user", "content": "あるディレクトリ内のすべてのファイルを一覧表示するPythonスクリプトを生成してください。"}
]
)
print(response['message']['content'])
これは、最終的なメッセージを辞書として返します。ストリーミングが必要な場合は、チャットストリームをイテレートできます:
stream = ollama.chat(
model="llama3.1",
messages=[
{"role": "user", "content": "再帰についての俳句を書くようにしてください。"}
],
stream=True
)
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
例2: 生成API
import ollama
output = ollama.generate(
model="llama3.1",
prompt="Pythonにおけるデコレータの概念を要約してください。"
)
print(output['response'])
またはストリーミングして結果を取得できます:
stream = ollama.generate(
model="llama3.1",
prompt="PythonでAIプロジェクトに使用する3つの利点を挙げてください。",
stream=True
)
for chunk in stream:
print(chunk['response'], end='', flush=True)
🧠 「思考」モデルの使用
Ollamaは、*qwen3などの「思考モデル」*をサポートしており、中間の推論ステップを示すように設計されています。これらのモデルは、以下のような構造化された出力を生成します:
</think>
最終的な答えはこちら。
これは、以下のような用途に役立ちます:
- モデルの推論をデバッグ
- 解釈性に関する研究
- 思考と出力を分離したツールの構築
例: 「思考」モデルの使用
import ollama
response = ollama.chat(
model="qwen3",
messages=[
{"role": "user", "content": "オーストラリアの首都はどこですか?"}
]
)
content = response['message']['content']
# 「思考」部分を抽出する場合
import re
thinking = re.findall(r"</think>", content, re.DOTALL)
answer = re.sub(r"</think>", "", content, flags=re.DOTALL)
print("🧠 思考プロセス:\n", thinking[0].strip() if thinking else "N/A")
print("\n✅ 最終的な答え:\n", answer.strip())
「思考」モデルを使用するべきケース
使用ケース | 推奨モデル | 理由 |
---|---|---|
解釈性 / デバッグ | qwen3 |
推論トレースを表示 |
パフォーマンスに敏感なアプリ | qwen3 non-thinking mode |
より高速で、簡潔 |
教育的 / 説明的用途 | qwen3 |
ステップバイステップの論理を表示 |
✅ まとめ
タスク | REST API | Pythonクライアント |
---|---|---|
簡単なテキスト生成 | /api/generate |
ollama.generate() |
会話型チャット | /api/chat |
ollama.chat() |
ストリーミングサポート | はい | はい |
「思考」モデルとの併用 | はい | はい |
Ollamaのローカルファースト設計により、セキュリティ、オフライン、プライバシーに敏感なAIアプリケーションに最適です。インタラクティブなチャットボットを構築するか、バックグラウンドのデータエンリッチメントサービスを構築するかに関係なく、LLMをPythonワークフローにシームレスに統合できます。モデル、レイテンシー、データの完全な制御が可能です。
有用なリンク
- https://pypi.org/project/ollama/
- Ollama cheatsheet
- Python Cheatsheet
- インストールおよびOllamaの構成
- 構造化された出力でLLMを制限: Ollama、Qwen3とPythonまたはGo
- 人気のあるLLMプロバイダー(OpenAI、Gemini、Anthropic、Mistral、AWS Bedrock)における構造化された出力の比較
- Ollama GPT-OSS構造化された出力の問題
- Ollamaが並列リクエストをどのように処理するか
- テスト: Ollamaの新しいバージョン(v0.12.1)におけるメモリ割り当てとモデルスケジューリング