ローカルLLMとAIエージェントの組み合わせ:Ollamaでプライバシーを守る実践チュートリアル
Ollamaを使ったローカルLLMとAIエージェントの連携方法を解説。プライバシーを守りながらオフラインで動作するAIエージェントの構築手順を紹介します。
はじめに
近年、AIエージェントが注目を集めていますが、クラウド上のLLMを利用するとプライバシーやコストの懸念があります。そこで、ローカルで動作するLLM(ローカルLLM)とAIエージェントを組み合わせることで、オフラインかつプライベートな環境でエージェントを実行できます。本チュートリアルでは、Ollamaを使ってローカルLLMをセットアップし、AIエージェントと連携する方法を具体的に解説します。
ローカルLLMとAIエージェントのメリット
必要なもの
ステップ1: Ollamaのインストールとモデル準備
1.1 Ollamaのインストール
Ollama公式サイトからOSに合ったインストーラをダウンロードし、インストールします。
<h1>Linux/macOSの場合(curl経由)</h1>
curl -fsSL https://ollama.com/install.sh | sh
1.2 モデルのダウンロード
Ollamaは多くのモデルをサポートしています。ここでは軽量で性能の良い「Mistral」を使用します。
ollama pull mistral
ダウンロードが完了したら、以下のコマンドで動作確認します。
ollama run mistral "Hello, how are you?"
ステップ2: AIエージェントの設計
シンプルなタスク実行エージェントを作成します。エージェントはユーザーの指示を解析し、適切なアクションを実行します。今回は「ファイル操作」を例にします。
2.1 機能一覧
ステップ3: Pythonでエージェントを実装
3.1 必要なライブラリのインストール
pip install ollama
3.2 エージェントコードの作成
agent.pyを作成し、以下のコードを記述します。
import ollama
import os
import json
<h1>Ollamaクライアントの初期化</h1>
client = ollama.Client()
def get_llm_response(prompt):
response = client.generate(model='mistral', prompt=prompt)
return response['response']
def parse_command(user_input):
# LLMに命令を解析させる
system_prompt = """
あなたはファイル操作アシスタントです。ユーザーの入力を解析し、以下のJSON形式で出力してください。
{
"action": "list | read | delete",
"params": {
"path": "ファイルパス"
}
}
例:
- ユーザー: "ファイル一覧を表示" → {"action": "list", "params": {"path": "."}}
- ユーザー: "test.txtの内容を表示" → {"action": "read", "params": {"path": "test.txt"}}
- ユーザー: "test.txtを削除" → {"action": "delete", "params": {"path": "test.txt"}}
"""
full_prompt = f"{system_prompt}\n\nユーザー: {user_input}"
response = get_llm_response(full_prompt)
try:
# JSON部分を抽出
json_start = response.index('{')
json_end = response.rindex('}') + 1
json_str = response[json_start:json_end]
return json.loads(json_str)
except:
return None
def execute_action(command):
if command is None:
return "コマンドを解析できませんでした。"
action = command['action']
path = command['params']['path']
if action == 'list':
files = os.listdir(path)
return "\n".join(files)
elif action == 'read':
try:
with open(path, 'r') as f:
return f.read()
except FileNotFoundError:
return "ファイルが見つかりません。"
elif action == 'delete':
confirm = input(f"本当に{path}を削除しますか? (y/n): ")
if confirm.lower() == 'y':
os.remove(path)
return "削除しました。"
else:
return "削除をキャンセルしました。"
else:
return "不明なアクションです。"
if __name__ == "__main__":
print("ファイル操作エージェントを開始します。終了するには 'exit' と入力。")
while True:
user_input = input("\n指示を入力: ")
if user_input.lower() == 'exit':
break
command = parse_command(user_input)
result = execute_action(command)
print(result)
3.3 実行テスト
python agent.py
以下のように動作します。
指示を入力: ファイル一覧を表示
agent.py
README.md
...
指示を入力: agent.pyの内容を表示
import ollama
...
ステップ4: 応用とカスタマイズ
4.1 他のモデルへの変更
Ollamaで利用可能なモデルに変更できます。例えば、日本語性能の高い「ELYZA-jp」を使用する場合:
ollama pull elyza:jp8b
コード内のmodel='mistral'をmodel='elyza:jp8b'に変更します。
4.2 エージェントの機能拡張
注意点
まとめ
Ollamaを使えば、ローカルLLMとAIエージェントを簡単に組み合わせることができます。プライバシーを重視する業務や、オフライン環境での自動化に役立ててください。本チュートリアルを基に、自分だけのエージェントを構築してみましょう。