【エンジニア向け】Ollama Pythonライブラリ徹底解説:ローカルLLMをアプリケーションに手軽に組み込む方法


【エンジニア向け】Ollama Pythonライブラリ徹底解説:ローカルLLMをアプリケーションに手軽に組み込む方法

ollama/ollama-python

2025-10-09

「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: userrole: 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)")

ollama/ollama-python




AI捜査チームを結成せよ: openai-agents-pythonによるマルチエージェント連携の導入ガイド

やあ、諸君!私はAI捜査コンサルタントのGだ。今日の捜査対象は、openai/openai-agents-pythonという、複数のAIエージェントを束ねる軽量かつ強力なフレームワークだよ。このフレームワークの魅力は、まるで複数の優秀な探偵を雇い、複雑な事件を役割分担させて解決に導くことができる点にあるんだ。


GitHubの宝の山!Microsoft公式の「データサイエンス10週間コース」を徹底解説

準備はいいかな?それじゃあ、データサイエンスの体操、はじめるよー!イチ、ニ!イチ、ニ!「データサイエンスって、数学ばっかりで難しそう……」って思ってるお友達! この教材はね、エンジニアにとって「最高の地図」なんだ!「コードを書く」だけじゃない!ただの文法解説じゃなくて、「なぜこのデータが必要なのか?」というビジネスの視点も学べるんだ。


ソフトウェアエンジニア必見!Parlantで始める自律型AIエージェント入門

想像してみてください。あなたは巨大な湖(=現実世界の複雑なタスク)で、一人でたくさんの魚(=タスクの実行)を釣ろうとしています。これまでは、魚を一匹一匹、網で捕まえていたかもしれません。しかし、もし、あなたが指示を出すだけで、自動で複数の網を使いこなし、最適な場所で、効率よく魚を釣り上げてくれる優秀な「釣り名人」がいたらどうでしょう?


PythonでAzureを料理する:SDKで始めるクラウド開発

このSDKは、Pythonのコードから直接Azureの様々なサービス(仮想マシン、ストレージ、データベースなど)を操作するためのライブラリ群です。まるで、ラーメンの具材(Azureのサービス)を自在に操るための、最高の調理器具セットのようなものです。


血液型占い風解説!AIエージェントのチームマネジメントツール「agent-squad」とは?

今回は、ソフトウェアエンジニアの視点から、ちょっと面白いツール「agent-squad」について、血液型占いの運勢みたいに、楽しく分かりやすく解説していきますね。全体運最高潮!まるで優秀なチームを瞬時に結成できる魔法の杖を手に入れたかのよう。これまで一人で抱え込んでいた複雑なタスクも、チームで分担することでサクサクこなせるようになります。特に、複数のAIを組み合わせて、まるで人間同士が話し合っているかのように協調させたい場面で、その真価を発揮します。


【ガンダムコント風】ザクとは違うのだよ!LLMアプリ開発の設計図集「awesome-llm-apps」解説

モビルスーツ開発に明け暮れる皆さん、ご苦労様です!今日はですね、なんと、ザクとは違うのだよ、ザクとは!…と言いたくなるくらい、最先端の技術が詰まった「設計図集」をご紹介します。それが、この「Shubhamsaboo/awesome-llm-apps」というプロジェクトです!


Pythonパッケージ管理の新境地:Poetryの魅力

夜の帳が降り、キーボードの光だけが部屋を照らす。君は、Pythonのプロジェクトを始めようと、指を静かに滑らせる。しかし、そこには常に付きまとう悩ましい問題があった。そう、依存関係の管理だ。requirements. txt と virtualenv を駆使しても、その関係性は複雑で、絡み合う糸のように、いつの間にか君を縛り付けてしまう。


ラーメン屋の親父が語る!Pythonだけで作るWebアプリ「Reflex」

なんだか、小難しい顔してパソコンいじってるな。WebアプリをPythonだけで作ろうとしてるのかい? え? 難しくてなかなか前に進めない、だと?ったく、最近の若いもんは、すぐ諦めるからいけねぇ。だが安心しな。俺がとっておきの秘策を教えてやる。


リンクも驚く情報収集術!Maigretで広がるエンジニアの視野

ハイラルを旅する勇敢なソフトウェアエンジニアの皆さん、ごきげんよう!今日は、まるでゼルダの伝説の壮大な冒険のように、私たちエンジニアが「情報収集」という試練に立ち向かうための、素晴らしい魔法のアイテムをご紹介しましょう。その名も「soxoj/maigret」!


Pythonエンジニア必見!次世代スクレイピングフレームワーク『Scrapling』完全ガイド

今日はエンジニアの姫のために、最近業界で「超イケてる」って噂のスクレイピング・フレームワーク『Scrapling』について、俺がエスコートするみたいに優しく教えてあげるよ。これを使えば、面倒なデータ収集も俺の接客くらいスマートに片付いちゃうから、しっかり見ててね。