Ollamaとは
ローカル環境でLLMを簡単に実行できるオープンソースツール。
外部にデータが送信されないので安心して組み込める。
NVIDIAのGPUがある場合は自動的に使用される。
モデル一覧
使用できるモデルは以下のページから参照できる
$ ollama pull <model> // モデルを実行せずにダウンロードだけする
$ ollama rm <model> // モデルを削除する
ワンショット実行
対話モードに入らず、1度だけ回答を生成できる
$ ollama run <model> <prompt>
対話モード
ollamaの指定のモデルを起動して対話モードに入る
(初回は自動的にモデルがダウンロードされる)
$ ollama run <model>
REST API
ollama はREST APIを提供しており、プログラムから利用できる
$ ollama serve // デフォルトでは`http://localhost:11434`で起動される
デフォルトではhttp://localhost:11434で起動される
curlでの使用例
curl http://localhost:11434/api/generate -d '{
"model": "llama2",
"prompt": "Why is the sky blue?"
}'
Pythonでの使用
import requests
import json
def chat_with_ollama(prompt):
url = "http://localhost:11434/api/generate"
data = {
"model": "llama2",
"prompt": prompt,
"stream": False
}
response = requests.post(url, json=data)
return response.json()["response"]
result = chat_with_ollama("こんにちは")
print(result)
モデルファイルのカスタマイズ
Modelfileを使用することで、既存のモデルをベースに独自の設定やプロンプトを持つカスタムモデルを作成できる。
Modelfileの基本構造
Modelfileは、Dockerfileに似た構文を使用します。
# Modelfile
FROM llama2
# パラメータの設定
PARAMETER temperature 0.8
PARAMETER top_p 0.9
PARAMETER top_k 40
# システムプロンプトの設定
SYSTEM """
あなたは親切で丁寧な日本語アシスタントです。
"""
# テンプレートの設定
TEMPLATE """{{ .System }}
User: {{ .Prompt }}
Assistant: """
Modelfileのコマンド一覧
FROM - ベースモデルの指定
# 既存のモデルから作成
FROM llama2
# 特定のバージョンを指定
FROM llama2:13b
# ローカルのGGUFファイルから作成
FROM ./models/my-model.gguf
# 別のカスタムモデルをベースに
FROM my-base-model
PARAMETER - モデルパラメータの設定
主要なパラメータ:
# 温度(0.0-2.0): 出力のランダム性を制御
PARAMETER temperature 0.7
# Top P(0.0-1.0): 核サンプリングの閾値
PARAMETER top_p 0.9
# Top K: 考慮するトークン数
PARAMETER top_k 40
# Repeat Penalty: 繰り返しを抑制
PARAMETER repeat_penalty 1.1
# コンテキスト長
PARAMETER num_ctx 4096
# 予測するトークン数の最大値
PARAMETER num_predict 128
# 停止シーケンス
PARAMETER stop "<|im_end|>"
PARAMETER stop "User:"
SYSTEM - システムプロンプト
モデルの役割や振る舞いを定義します。
SYSTEM """
あなたは経験豊富なPythonプログラマーです。
コードの説明は日本語で、コメントも日本語で記述してください。
ベストプラクティスに従い、読みやすいコードを書いてください。
"""
TEMPLATE - プロンプトテンプレート
ユーザー入力とシステムプロンプトの組み合わせ方を定義します。
# ChatML形式
TEMPLATE """<|im_start|>system
{{ .System }}<|im_end|>
<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
"""
# Alpaca形式
TEMPLATE """### Instruction:
{{ .System }}
### Input:
{{ .Prompt }}
### Response:
"""
MESSAGE - 会話履歴の事前設定
Few-shot learningのための例を追加できます。
MESSAGE user "2+2は?"
MESSAGE assistant "2+2は4です。"
MESSAGE user "3+3は?"
MESSAGE assistant "3+3は6です。"
ADAPTER - LoRAアダプターの追加
ファインチューニングされたLoRAアダプターを適用できます。
FROM llama2
ADAPTER ./lora-adapter.bin
LICENSE - ライセンス情報
LICENSE """
MIT License
Copyright (c) 2024
"""
カスタムモデルの作成例
例1: 日本語特化の会話モデル
# Modelfile.japanese-chat
FROM llama2:7b
PARAMETER temperature 0.8
PARAMETER top_p 0.9
PARAMETER repeat_penalty 1.1
PARAMETER num_ctx 4096
SYSTEM """
あなたは日本語で会話するフレンドリーなAIアシスタントです。
丁寧な言葉遣いを心がけ、分かりやすく説明してください。
必要に応じて例を挙げて説明してください。
"""
TEMPLATE """{{ .System }}
ユーザー: {{ .Prompt }}
アシスタント: """
作成と実行:
ollama create japanese-chat -f Modelfile.japanese-chat
ollama run japanese-chat
例2: コーディングアシスタント
# Modelfile.code-assistant
FROM codellama:7b
PARAMETER temperature 0.2
PARAMETER top_p 0.95
PARAMETER num_ctx 8192
SYSTEM """
あなたは経験豊富なソフトウェアエンジニアです。
以下のガイドラインに従ってください:
1. コードは可読性を重視してください
2. 適切なコメントを日本語で記述してください
3. エラー処理を含めてください
4. ベストプラクティスに従ってください
5. セキュリティを考慮してください
"""
TEMPLATE """<|im_start|>system
{{ .System }}<|im_end|>
<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
"""
例3: 技術文書レビューアー
# Modelfile.doc-reviewer
FROM mistral:7b
PARAMETER temperature 0.3
PARAMETER top_p 0.9
PARAMETER num_ctx 8192
SYSTEM """
あなたは技術文書のレビュー専門家です。
以下の観点でレビューしてください:
- 技術的な正確性
- 文章の明瞭性
- 構成の論理性
- 用語の一貫性
- 改善提案
フィードバックは建設的で具体的にしてください。
"""
MESSAGE user "この文書をレビューしてください:「APIのエンドポイントは/api/v1/usersです」"
MESSAGE assistant "良い点:エンドポイントが明確に示されています。\n改善提案:HTTPメソッド(GET, POSTなど)、必要なパラメータ、レスポンス形式についても記載すると、より分かりやすくなります。"
カスタムモデルの管理
# モデルの作成
ollama create my-model -f ./Modelfile
# モデルの詳細表示
ollama show my-model
# Modelfileの内容を表示
ollama show my-model --modelfile
# モデルのコピー
ollama cp my-model my-model-backup
# モデルの削除
ollama rm my-model
GGUFファイルからのモデル作成
独自にファインチューニングしたモデルや、Hugging FaceからダウンロードしたGGUF形式のモデルも使用できます。
# Modelfile.custom
FROM ./models/my-fine-tuned-model.gguf
PARAMETER temperature 0.7
PARAMETER num_ctx 4096
SYSTEM """カスタムシステムプロンプト"""
ollama create custom-model -f Modelfile.custom
実践的なヒント
1. パラメータのチューニング
-
創造的なタスク:
temperature 0.8-1.2 -
事実に基づく回答:
temperature 0.1-0.3 -
コード生成:
temperature 0.2-0.4 -
会話:
temperature 0.7-0.9
2. システムプロンプトのベストプラクティス
- 具体的な役割を定義する
- 出力形式を明示する
- 制約条件を明確にする
- Few-shot例を含める(MESSAGE使用)
3. テンプレートの選択
モデルによって最適なテンプレート形式が異なります。元のモデルのドキュメントを確認してください。
4. バージョン管理
# タグをつけて管理
ollama create my-model:v1 -f Modelfile.v1
ollama create my-model:v2 -f Modelfile.v2
# 特定バージョンの実行
ollama run my-model:v1