Ollama (ローカルモデル)
APIキー、インターネット、コストなしで、完全にプライベートな環境でLLMをローカルで実行します。
概要
┌─────────────────────────────────────────────────────────────────────┐
│ Ollama Local Setup │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ Your Machine │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ ADK-Rust │ ───▶ │ Ollama │ │ │
│ │ │ Agent │ │ Server │ │ │
│ │ └──────────────┘ └──────┬───────┘ │ │
│ │ │ │ │
│ │ ┌──────▼───────┐ │ │
│ │ │ Local LLM │ │ │
│ │ │ (llama3.2) │ │ │
│ │ └──────────────┘ │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ 🔒 100% Private - Data never leaves your machine │
│ │
└─────────────────────────────────────────────────────────────────────┘
なぜ Ollama なのか?
| 利点 | 説明 |
|---|---|
| 🆓 無料 | APIコストは一切かかりません |
| 🔒 プライベート | データはあなたのマシンに留まります |
| 📴 オフライン | インターネットなしで動作します |
| 🎛️ コントロール | 任意のモデルを選択し、設定をカスタマイズできます |
| ⚡ 高速 | ネットワーク遅延がありません |
ステップ 1: Ollama をインストールする
macOS
brew install ollama
Linux
curl -fsSL https://ollama.com/install.sh | sh
Windows
ollama.com からダウンロードしてください
ステップ 2: サーバーを起動する
ollama serve
次のように表示されるはずです。
Couldn't find '/Users/you/.ollama/id_ed25519'. Generating new private key.
Your new public key is: ssh-ed25519 AAAA...
time=2024-01-05T12:00:00.000Z level=INFO source=server.go msg="Listening on 127.0.0.1:11434"
ステップ 3: モデルをプルする
新しいターミナルで実行します。
# 推奨されるスターターモデル (3Bパラメータ、高速)
ollama pull llama3.2
# その他の人気モデル
ollama pull qwen2.5:7b # 優れたツール呼び出し
ollama pull mistral # コードに適しています
ollama pull codellama # コード生成
ollama pull gemma2 # Googleの効率的なモデル
ステップ 4: プロジェクトに追加する
[dependencies]
adk-model = { version = "0.2", features = ["ollama"] }
ステップ5:コードでの使用
use adk_model::ollama::{OllamaModel, OllamaConfig};
use adk_agent::LlmAgentBuilder;
use std::sync::Arc;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// APIキーは不要です!
let model = OllamaModel::new(OllamaConfig::new("llama3.2"))?;
let agent = LlmAgentBuilder::new("local_assistant")
.instruction("You are a helpful assistant running locally.")
.model(Arc::new(model))
.build()?;
// Agentを使用...
Ok(())
}
完全な動作例
use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
dotenvy::dotenv().ok();
// APIキーは不要です!
let model = OllamaModel::new(OllamaConfig::new("llama3.2"))?;
let agent = LlmAgentBuilder::new("ollama_assistant")
.description("Ollama-powered local assistant")
.instruction("You are a helpful assistant running locally via Ollama. Be concise.")
.model(Arc::new(model))
.build()?;
// 対話型セッションを実行
Launcher::new(Arc::new(agent)).run().await?;
Ok(())
}
Cargo.toml
[dependencies]
adk-rust = { version = "0.2", features = ["cli", "ollama"] }
tokio = { version = "1", features = ["full"] }
dotenvy = "0.15"
anyhow = "1.0"
設定オプション
use adk_model::ollama::{OllamaModel, OllamaConfig};
let config = OllamaConfig::new("llama3.2")
.with_base_url("http://localhost:11434") // カスタムサーバーURL
.with_temperature(0.7) // 創造性 (0.0-1.0)
.with_max_tokens(2048); // 最大応答長
let model = OllamaModel::new(config)?;
推奨モデル
| Model | Size | RAM Needed | 最適な用途 |
|---|---|---|---|
llama3.2 | 3B | 4GB | 高速、汎用 |
llama3.2:7b | 7B | 8GB | より高品質 |
qwen2.5:7b | 7B | 8GB | 最高のツール呼び出し |
mistral | 7B | 8GB | コードと推論 |
codellama | 7B | 8GB | コード生成 |
gemma2 | 9B | 10GB | バランスの取れた性能 |
llama3.1:70b | 70B | 48GB | 最高品質 |
モデルの選択
- RAMが少ない (8GB)? →
llama3.2(3B) - ツール呼び出しが必要? →
qwen2.5:7b - コードを書く? →
codellamaまたはmistral - 最高の品質? →
llama3.1:70b(48GB以上のRAMが必要)
Ollamaでのツール呼び出し
Ollamaは互換性のあるモデルでFunction Toolをサポートしています。
use adk_model::ollama::{OllamaModel, OllamaConfig};
use adk_agent::LlmAgentBuilder;
use adk_tool::FunctionTool;
use std::sync::Arc;
// qwen2.5 は優れたツール呼び出しサポートを備えています
let model = OllamaModel::new(OllamaConfig::new("qwen2.5:7b"))?;
let weather_tool = Arc::new(FunctionTool::new(
"get_weather",
"特定の場所の天気を取得",
|_ctx, args| async move {
let location = args.get("location").and_then(|v| v.as_str()).unwrap_or("unknown");
Ok(serde_json::json!({
"location": location,
"temperature": "72°F",
"condition": "Sunny"
}))
},
));
let agent = LlmAgentBuilder::new("weather_assistant")
.instruction("ユーザーが天気を調べるのを手伝います。")
.model(Arc::new(model))
.tool(weather_tool)
.build()?;
注: ツール呼び出しは、ローカルモデルでの信頼性を確保するため、非ストリーミングモードを使用します。
出力例
👤 User: Hello! What can you do?
🤖 Ollama (llama3.2): こんにちは!私はあなたのマシン上で動作するローカルAIアシスタントです。お手伝いできることは次のとおりです。
- 質問への回答
- テキストの作成と編集
- 概念の説明
- 基本的なコーディング支援
すべて完全にプライベートで、何もあなたのコンピュータから離れることはありません!
トラブルシューティング
"Connection refused"
# Ollamaが実行されていることを確認してください
ollama serve
"Model not found"
# 最初にモデルをプルしてください
ollama pull llama3.2
応答が遅い
- より小さいモデルを使用する (
llama3.2の代わりにllama3.1:70b) - 他のアプリケーションを閉じてRAMを解放する
- 利用可能であればGPUアクセラレーションを検討する
利用可能なモデルを確認する
ollama list
例の実行
# official_docs_examplesフォルダから
cd official_docs_examples/models/providers_test
cargo run --bin ollama_example
関連
- Model Providers - クラウドベースのLLMプロバイダー
- Local Models (mistral.rs) - ネイティブRust推論
Previous: ← Model Providers | Next: Local Models (mistral.rs) →