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)?;

推奨モデル

ModelSizeRAM Needed最適な用途
llama3.23B4GB高速、汎用
llama3.2:7b7B8GBより高品質
qwen2.5:7b7B8GB最高のツール呼び出し
mistral7B8GBコードと推論
codellama7B8GBコード生成
gemma29B10GBバランスの取れた性能
llama3.1:70b70B48GB最高品質

モデルの選択

  • 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

関連


Previous: ← Model Providers | Next: Local Models (mistral.rs) →