【エンジニア向け】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: 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)")

ollama/ollama-python




ハルシネーションを許さない。LangExtractで実現する根拠(ソース)付きの情報抽出の実践

「彼女の下着は何色?」という、一歩間違えれば通報案件の問いを、LangExtractがどう鮮やかに(かつ紳士的に)解決するのか……。コント仕立てのサンプルコードと一緒に見ていきましょう!一言でいうと、「LLMを使って、超高精度かつ『証拠付き』でテキストを構造化データ(JSON等)にするライブラリ」です。


動画ファイルが賢くなる?NLPとOpenCVでテキスト検索を可能にする「memvid」とは

「memvid」は、Olow304/memvid というGitHubリポジトリで公開されている、Pythonで書かれたライブラリです。NLP(自然言語処理)とOpenCV(コンピュータービジョンライブラリ)を組み合わせて、テキスト情報を動画ファイル(MP4)の中に効率的に保存し、高速な意味検索を可能にします。


PythonとNode.jsの力を解き放つ。ByteDanceのオープンソース「Deer-flow」でエージェント開発を加速させる

エンジニアの視点で見ると、これって「ただのチャットAI」とは全然別物。まるで、一歩先を読んで複雑な家事(仕事)を全部片付けてくれる、すごく有能な執筆・開発パートナーって感じかな。「どれが一番似合うかな?」って水着選びで迷うみたいに、Deer-flowの可能性を一緒に探っていこう!


AIアプリケーション開発のためのレシピブック

今日は「Haystack」という、AIの世界で最近話題の新しいカクテルを紹介させてください。これ、ただのAIじゃなくて、色々なAIの材料を組み合わせて、お客様の好みにぴったりの一杯を作り出すためのツールなんです。ソフトウェアエンジニアの視点から言えば、Haystackは例えるなら「AIアプリケーション開発のためのシェイカーとレシピブック」です。


Daft:PythonとRustの二刀流でどんなデータも高速処理!

おっと、旦那、なんだいその渋い顔は。データ処理で困ってるとでもいうのかい? そんな旦那に、とっておきの江戸の秘伝、いや、世界の最先端技術を教えてやろうってんだ。今回のお題は、「Eventual-Inc/Daft」だ!なんだい、その顔は。「だふと?」だぁ? 違う違う!「Da-ft」って読むんだ。覚えておきな!


pathwaycom/pathway タイトル集

簡単に言うと、リアルタイムでデータを処理できるPythonのETLフレームワークです。ETLとは、Extract(抽出)、Transform(変換)、Load(読み込み)の頭文字をとったもので、データ処理の基本となるプロセスです。普通のETLは、バッチ処理といって、ある程度のデータをまとめて処理することが多いですが、pathwaycom/pathwayはストリーム処理が得意です。つまり、データが流れてくるそばから、リアルタイムで処理してくれるんです。


ソフトウェアエンジニアのためのFrappe/ERPNext徹底解説:酒の飲み比べで学ぶ導入と活用

皆さん、こんにちは!ソフトウェアエンジニアとして日々コードと格闘されている皆さん、お疲れ様です!今回は、ビジネスの世界でよく耳にする「ERP」という言葉と、それを実現する素晴らしいフレームワーク「Frappe」、そしてその上に構築された「ERPNext」について、まるで日本酒の銘柄をじっくり味わうように、その魅力と使い方を深掘りしていきましょう!


オフラインAWS開発を実現するLocalStack入門:サーバーレス時代のテスト戦略を革新せよ

LocalStack は、フル機能を持つローカルの AWS クラウドスタックです。つまり、Amazon Web Services (AWS) のサービス(S3、Lambda、DynamoDB、SQSなど)を、自分のPC上やCI/CD環境でオフラインで動作させることができるツールなんです。


【Python Robotics】ロボットアルゴリズムを動かす!エンジニアのための学習・開発入門

この AtsushiSakai/PythonRobotics は、ソフトウェアエンジニアのお兄ちゃんにとって、ロボティクスや自律移動に関する知識を深め、すぐに使えるサンプルコードが満載のとっても頼りになる教材集だよ!このリポジトリは、ただコードがあるだけじゃなくて、ロボットを動かすためのコアな技術を学べるのがポイントだよ。