【エンジニア向け】Ollama Pythonライブラリ徹底解説:ローカルLLMをアプリケーションに手軽に組み込む方法
「Ollama Python library」は、ローカル環境で動作するLLM実行環境「Ollama」を、Pythonコードから簡単に操作するための公式ライブラリです。
これがエンジニアにとってどのように役立つかというと、主に以下の点があります。
統合・自動化のしやすさ
Pythonスクリプトや既存のアプリケーションにLLMの機能をシームレスに組み込むことができます。例えば、Webアプリケーションのバックエンド、データ処理パイプラインの一部、自動テストの生成などに使えます。
コマンドラインでollama runを実行するよりも、プログラム内で動的にプロンプトを変えたり、結果を後続の処理に渡したりといった自動化が格段に簡単になります。
プロトタイピングと開発コスト削減
クラウドのLLM API(有料)を使う前に、ローカルで無料のオープンソースLLM(例
Llama 3, Phi-3など)を使って、機能のプロトタイピングや検証を素早く行えます。
API利用料を気にせず、開発初期段階で何度も試行錯誤できるため、開発コストを抑えられます。
ストリーミング処理
大規模な応答を待つことなく、トークンが生成されるたびにリアルタイムで処理できるストリーミング機能を簡単に実装できます。これは、チャットアプリケーションなどでユーザー体験を向上させるために非常に重要です。
環境の統一
OllamaをDockerなどでコンテナ化すれば、開発環境と本番環境でLLMの実行環境を統一しやすくなります。
Ollama Python libraryを使うには、まずベースとなるOllama本体が動作している必要があります。
まず、Ollama公式サイトから、お使いのOS(macOS, Windows, Linux)に合ったアプリケーションをダウンロードし、インストールして起動しておきましょう。
Pythonから利用したいLLMモデルを、事前にOllamaにダウンロードしておきます。ターミナル(またはPowerShell/コマンドプロンプト)で以下のコマンドを実行します。
# 例:Llama 3をダウンロードする場合
ollama pull llama3
Ollama本体が起動し、モデルもダウンロードできたら、Python環境に公式ライブラリをpipでインストールします。
pip install ollama
これで準備完了です!
ここからは、具体的なPythonコードで、Ollama Python libraryの基本的な使い方を見ていきましょう。
最も基本的な使い方です。ユーザーのプロンプトに対してモデルに回答させます。
import ollama
# モデルに質問を投げる
response = ollama.chat(
model='llama3', # 使用したいモデル名(Step 2でダウンロードしたもの)
messages=[
{
'role': 'user',
'content': '猫がモチーフのプログラミング言語は何ですか?',
},
],
)
# 応答内容を表示
# response['message']['content'] に回答テキストが含まれています
print("モデルの回答:")
print(response['message']['content'])
応答が大きい場合や、リアルタイム性が求められるチャットUIなどを開発する際に、ストリーミング機能を使うと便利です。
import ollama
import sys
# stream=True を指定すると、応答がジェネレーターとして返されます
stream = ollama.chat(
model='llama3',
messages=[
{
'role': 'user',
'content': 'ソフトウェアエンジニアの生産性を高めるためのアイデアを5つ、箇条書きで提案してください。',
},
],
stream=True # ストリーミングを有効化
)
print("モデルの回答(ストリーミング):")
for chunk in stream:
# チャンクごとにテキストを取得して表示
if chunk['message']['content'] is not None:
print(chunk['message']['content'], end='', flush=True)
# 最後に改行
print()
messagesリストに、過去のやり取り(role: userとrole: assistant)を追加していくことで、文脈を理解した会話を継続させることができます。
import ollama
# 過去の会話履歴をリストで保持
messages_history = [
{
'role': 'user',
'content': '私が好きな動物は、忠実で賢い犬です。',
},
]
# 1回目の応答
response1 = ollama.chat(
model='llama3',
messages=messages_history
)
print(f"モデル1回目の応答: {response1['message']['content']}\n")
# 1回目の応答を履歴に追加(モデルからの応答は 'assistant' ロール)
messages_history.append(response1['message'])
# 2回目の質問 (文脈依存)
messages_history.append({
'role': 'user',
'content': 'その動物を飼う上での一般的な注意点を3つ教えてください。'
})
# 2回目の応答(履歴全体を渡す)
response2 = ollama.chat(
model='llama3',
messages=messages_history
)
print(f"モデル2回目の応答: {response2['message']['content']}")
現在ローカルで利用可能なモデルの一覧を取得したい場合は、list()関数を使います。
import ollama
# ローカルにインストールされているモデルの一覧を取得
models = ollama.list()
print("ローカルにインストールされているモデル:")
for model in models['models']:
print(f"- {model['name']} (サイズ: {round(model['size'] / (1024**3), 2)} GB)")