近年、ChatGPTやGeminiといった 大規模言語モデル(LLM) を活用したアプリケーションが急速に広がっています。
これまで生成AI・AIエージェントを利用したプログラムを実装するには、有料のWeb API(Open AIのAPI等)や、高性能なクラウド環境が必要でした。しかし、Pythonの基本的な知識があれば、自分のパソコンでAIのモデルを動かし、生成AI・AIエージェントを利用したアプリを作ることも可能になっています。
本書では、Open AIのAPI・AWSのクラウド環境等の有料のサービスは利用せず、無料で利用でき、ローカル環境で動作するLLM 「Ollama」 と、効率的に生成AI・AIエージェントに必須の機能を実装できるPython向けの開発ライブラリ 「LangChain」 を用いて、実際にプログラムを作る方法を学びます。
第1章では、LangChainとOllamaの基本を理解し、PythonでOllamaを利用した生成AI・AIエージェントのプログラムを開発する環境構築を行います。
1. LangChainとは
LangChain(ラングチェーン)は、生成AI・AIエージェントの必須機能を効率的に実装できるPythonライブラリです。LangChainの大きな特徴は、以下のような機能を一つひとつフルスクラッチで作らずとも、ライブラリで簡単に実装できることです。
- LLMを使って基本的な会話を行うこと
- 会話の文脈(履歴)を保持して、前の発言を踏まえた応答を作ること
- モデルが持つ知識だけでなく、Webサイトや会社リソース等の外部データソースを検索し、回答に反映させること
- AIエージェントの機能である、Tools(ツール)を実装すること
LangChainには、単にAIが質問に答えるだけでなく、実際に使えるアプリケーションとしての仕組みを作るための機能が揃っており、ユーザにとって実用的なアプリを効率的に開発できます。
2. Ollamaとは
Ollama(オラマ)は、ローカル環境でLLMを実行できるツールです。クラウドを利用せずにモデルを動かすことができるので、通信環境に依存しない、プライバシーを保護できる、更に、無料でモデルをダウンロードして利用できる点も大きな魅力です。
ローカルで動作するということは、あなたのパソコン上でモデルが直接計算を行います。これまで、生成AI・AIエージェントの学習をしたいけど、Web APIやクラウド環境にお金がかかる事が障壁となっていた方には、Ollamaを利用した無料でできる生成AI・AIエージェントの学習がおすすめです。
実際の研究開発現場でも、Ollamaを利用した実装が盛んに行われていますので、実践の現場でもかなり役にたつスキルになります。
3. 開発環境の準備
まず、Pythonの仮想環境を作ります。仮想環境を使うと、パソコンにインストールした他のPythonプロジェクトに影響を与えず、必要なライブラリだけを隔離して管理できます。
※仮想環境の準備は、個人の好みもあるので必須ではないです。
python -m venv venv
# macOS/Linux
source venv/bin/activate
# Windows
venv\Scripts\activate
pip install --upgrade pip
仮想環境を有効にしたら、必要なライブラリをインストールします。
※ここから先は全て必須です。
pip install langchain langchain-ollama ollama requests
- langchain はLangChain本体です。
- langchain-ollama はLangChainからOllamaを利用するための拡張です。
- ollama はPythonからOllamaを操作するためのSDKです。
- requests は、HTTPでOllamaにアクセスする場合に必要です。
4. Ollamaのセットアップ
まずは、Ollamaを公式サイトからインストールしてください。
Ollamaをインストールできたら、モデルをダウンロードします。
ここでは例として 「LLaMA 3.1:8b」 を使用します。
ターミナルを開き、以下のコマンドで自分のPCに LLaMA 3.1:8b をダウンロードします。
ollama pull llama3.1:8b
ダウンロードが完了したら、モデルを起動してみます。
ollama run llama3.1:8b
上記のコマンドで対話モードが始まります。ChatGPTのように質問すると、モデルが応答します。終了するには Ctrl + D を押します。
※パソコンの推奨メモリは16GB以上です。LLaMA 3.1:8bより大きなモデルを扱う場合は、これより多めのメモリがあると快適です。
5. PythonからOllamaを使う3つの実装方法
実際に、Pythonの中でOllamaを利用する(PythonからOllamaを操作する)方法についてみていきます。方法としては、主に3つありますので、順に見ていきましょう。
5.1 requestsで直接APIを呼ぶ
HTTPリクエストを使ってOllamaに問い合わせる方法です。自由度は高いですが、コードが少し複雑になります。
import requests
import json
payload = {
"model": "llama3.1:8b",
"prompt": "こんにちは。良い天気ですね。"
}
res = requests.post("http://localhost:11434/api/generate", json=payload)
result = ""
for line in res.iter_lines():
if line:
data = json.loads(line.decode())
result += data["response"]
print(result)
出力例は以下の通りです。
はい、良い天気ですね!外で活動してみるのもいいと思いますよ。
Ollamaをインストールすると、PC起動時に11434番ポートで自動起動します。そのため、以下のように「localhost:11434」を指定しています。
res = requests.post("http://localhost:11434/api/generate", json=payload)
この方法では、Ollama APIの仕様書を読みながら実装する必要があるため、開発効率は他の2つの方法と比較すると良くないです。
5.2 OllamaのPythonライブラリを利用する
Ollamaには、Pythonのライブラリが用意されており、API呼び出しの細かい処理が隠蔽され、それらを意識せずに実装することができます。
import ollama
response = ollama.chat(
model="llama3.1:8b",
messages=[{"role": "user", "content": "こんにちは。良い天気ですね。"}]
)
print(response['message']['content'])
上記のように、非常に少ないコード量でシンプルに実装できます。シンプルにOllamaのモデルを利用するだけであれば、この方法が便利です。
5.3 LangChainを利用する
LangChainを利用すると、プロンプト管理や複雑な処理の連携も簡単に行えます。生成AI・AIエージェントのアプリを実装する際に、モデルを利用することは必須ですが、それだけではアプリとして完成しません。
会話の文脈(履歴)の保持、外部データソースの利用(RAG)、AIエージェント特有の振る舞いといった、重要な機能を実装する際、LangChainを利用する事で、これらの機能を効率よく実装できます。
from langchain_ollama import OllamaLLM
llm = OllamaLLM(model="llama3.1:8b")
response = llm.invoke("こんにちは。良い天気ですね。")
print(response)
LangChainを利用することで、単一の処理を一連の流れとして組み合わせる事で、複雑な処理をシンプルに記述することができます。
例えば、「ユーザ入力を受け取る → LLMで回答 → 結果をパースして表示」といった一連の処理を、簡潔に書くことが可能です。先の章に進んでいくと、メリットが実感できると思います。
6. 3つの方法の比較
ソースコードの簡潔さ、自由度・カスタマイズ性、本格的なアプリ開発を効率的に実施できる点で、LangChainは他の方法と比較した利点があります。
- requests:自由度が高いが、コード量が多くなる
- Python SDK:呼び出しが簡単で、扱いやすい
- LangChain:拡張性が高く、プロンプト管理やツール連携が容易
LangChainを利用すると、具体的に以下のことが容易になります。
- 統一感のある応答を作るためのプロンプトテンプレートの利用
- 会話履歴の保存と会話文脈の保持
- 外部データソースの取り込み(RAG)
- 必要なときにツールを使わせる(AIエージェントに必須の機能)
上記の機能を実現するには、通常は複雑な処理の記述が必要ですが、これらの処理をPythonでシンプルに構築できることがLangChainの強みです。
基本的に、生成AIやAIエージェント、LLMといった内容でPythonプログラムを実装したいと考えた際は、あまり深く考えず、LangChainを利用するのが良いと思います。
7. まとめ
第1章では、LangChainとOllamaを利用して、自分のPCでLLMを利用する基礎を学びました。
- LangChain は、LLMを使ったアプリ開発を効率的かつ拡張性高く進められるライブラリです。
- Ollama は、Web APIやクラウドに頼らずローカルでモデルを動かせるため、無料で開発でき、プライバシーを重視した開発にも向いています。
- PythonでOllamaを操作する方法は3種類あり、それぞれメリットが異なります。本書では、LangChainを利用します。
次の章では、LangChainを利用したプロンプトの設計方法や応用例を学び、より実践的なアプリ開発に進みます。