クイックスタート

このガイドでは、ADK-Rust を使ってすぐに始める方法を紹介します。10 分以内に最初の AI エージェントを作成します。

前提条件

始める前に、以下が揃っていることを確認してください。

  • Rust 1.85.0 以降 (rustup update stable)
  • Gemini 用の Google API キー

ステップ 1: 新しいプロジェクトを作成する

新しい Rust プロジェクトを作成します。

cargo new my_agent
cd my_agent

プロジェクト構造は次のようになります。

my_agent/
├── Cargo.toml
├── src/
│   └── main.rs
└── .env          # You'll create this for your API key

ステップ 2: 依存関係を追加する

Cargo.toml を必要な依存関係で更新します。

[package]
name = "my_agent"
version = "0.1.0"
edition = "2024"

[dependencies]
adk-rust = "0.2.0"
tokio = { version = "1.40", features = ["full"] }
dotenvy = "0.15"

依存関係をインストールします。

cargo build

ステップ 3: API キーを設定する

このプロジェクトは Gemini API を使用しており、API キーが必要です。まだ持っていない場合は、Google AI Studio でキーを作成してください。

プロジェクトのルートに .env ファイルを作成します。

Linux / macOS:

echo 'GOOGLE_API_KEY=your-api-key-here' > .env

Windows (PowerShell):

echo GOOGLE_API_KEY=your-api-key-here > .env

セキュリティのヒント: API キーのコミットを避けるため、.env.gitignore に追加してください。

ステップ 4: エージェントを作成する

src/main.rs の内容を以下に置き換えます。

use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;

#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
    // Load environment variables from .env file
    dotenvy::dotenv().ok();
    
    // Get API key from environment
    let api_key = std::env::var("GOOGLE_API_KEY")
        .expect("GOOGLE_API_KEY environment variable not set");

    // Create the Gemini model
    let model = GeminiModel::new(&api_key, "gemini-2.5-flash")?;

    // Build your agent
    let agent = LlmAgentBuilder::new("my_assistant")
        .description("A helpful AI assistant")
        .instruction("You are a friendly and helpful assistant. Answer questions clearly and concisely.")
        .model(Arc::new(model))
        .build()?;

    // Run the agent with the CLI launcher
    Launcher::new(Arc::new(agent)).run().await?;

    Ok(())
}

ステップ 5: エージェントを実行する

対話型コンソールモードでエージェントを起動します。

cargo run

エージェントとチャットできるプロンプトが表示されます。

🤖 Agent ready! Type your questions (or 'exit' to quit).

You: Hello! What can you help me with?
Assistant: Hello! I'm a helpful AI assistant. I can help you with:
- Answering questions on various topics
- Explaining concepts
- Providing information and suggestions
- Having a friendly conversation

What would you like to know?

You: exit
👋 Goodbye!

ステップ 6: ツールを追加する

エージェントにGoogle Search toolを追加して、リアルタイム情報にアクセスできるようにしましょう。

use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;

#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
    dotenvy::dotenv().ok();
    
    let api_key = std::env::var("GOOGLE_API_KEY")
        .expect("GOOGLE_API_KEY environment variable not set");

    let model = GeminiModel::new(&api_key, "gemini-2.5-flash")?;

    // Build agent with Google Search tool
    let agent = LlmAgentBuilder::new("search_assistant")
        .description("An assistant that can search the web")
        .instruction("You are a helpful assistant. Use the search tool to find current information when needed.")
        .model(Arc::new(model))
        .tool(Arc::new(GoogleSearchTool::new()))  // Add search capability
        .build()?;

    Launcher::new(Arc::new(agent)).run().await?;

    Ok(())
}

インタラクティブコンソールモードでエージェントを再度起動します。

cargo run

これで、エージェントにウェブ検索を促すことができます。

You: What's the weather like in Tokyo today?
Assistant: Let me search for that information...
[Using GoogleSearchTool]
Based on current information, Tokyo is experiencing...

Webサーバーとして実行する

ウェブベースのインターフェースには、serveコマンドで実行します。

cargo run -- serve

これにより、デフォルトポート8080でサーバーが起動します。http://localhost:8080でアクセスできます。

カスタムポートを指定するには:

cargo run -- serve --port 3000

これにより、ポート3000でサーバーが起動します。http://localhost:3000でアクセスできます。

コードの理解

各部分が何をするかを見ていきましょう。

インポート

use adk_rust::prelude::*;  // GeminiModel, LlmAgentBuilder, Arc, etc.
use adk_rust::Launcher;    // CLI launcher for console/server modes
use std::sync::Arc;        // Thread-safe reference counting pointer
  • prelude::* は、GeminiModelLlmAgentBuilderArc、エラー型など、一般的に使用されるすべての型をインポートします。
  • Launcher は、Agentを実行するためのCLIインターフェースを提供します。
  • Arc (Atomic Reference Counted) は、asyncタスク間でModelとAgentを安全に共有できるようにします。

Modelの作成

let model = GeminiModel::new(&api_key, "gemini-2.5-flash")?;

Llm traitを実装するGemini modelインスタンスを作成します。このModelは以下のことを行います:

  • APIキーを使用した認証を処理します
  • LLMからのストリーミング応答を管理します
  • Toolに対するFunction callingをサポートします

Agentの構築

let agent = LlmAgentBuilder::new("my_assistant")
    .description("A helpful AI assistant")
    .instruction("You are a friendly assistant...")
    .model(Arc::new(model))
    .build()?;

ビルダーパターンがAgentを設定します:

メソッド目的
new("name")Agentの一意の識別子を設定します(ログやマルチエージェントシステムで使用されます)
description()AgentカードやA2Aプロトコルで表示される簡単な説明
instruction()システムプロンプト - Agentの個性と振る舞いを定義します
model(Arc::new(...))ModelをArcでラップし、スレッドセーフな共有を可能にします
tool(Arc::new(...))(オプション) Agentが呼び出せるTool/関数を追加します
build()設定を検証し、Agentインスタンスを作成します

Launcher

Launcher::new(Arc::new(agent)).run().await?;

Launcherはランタイムを処理します:

  • コンソールモード (デフォルト): ターミナルでのインタラクティブチャット
  • サーバーモード (-- serve): Webインターフェースを備えたREST API
  • セッションの状態、ストリーミング応答、および正常なシャットダウンを管理します

その他のモデルの使用

adk-rustは、複数のLLMプロバイダーをすぐにサポートしています。Cargo.tomlのフィーチャーフラグを介して有効にします。

[dependencies]
adk-rust = { version = "0.2.0", features = ["openai", "anthropic", "deepseek", "groq", "ollama"] }

プロバイダーに適したAPIキーを設定してください。

# OpenAI
export OPENAI_API_KEY="your-api-key"

# Anthropic
export ANTHROPIC_API_KEY="your-api-key"

# DeepSeek
export DEEPSEEK_API_KEY="your-api-key"

# Groq
export GROQ_API_KEY="your-api-key"

# Ollama (no key needed, just run: ollama serve)

OpenAI

use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;

#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
    dotenvy::dotenv().ok();

    let api_key = std::env::var("OPENAI_API_KEY")?;
    let model = OpenAIClient::new(OpenAIConfig::new(api_key, "gpt-4o"))?;

    let agent = LlmAgentBuilder::new("assistant")
        .instruction("You are a helpful assistant.")
        .model(Arc::new(model))
        .build()?;

    Launcher::new(Arc::new(agent)).run().await?;

    Ok(())
}

Anthropic

use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;

#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
    dotenvy::dotenv().ok();

    let api_key = std::env::var("ANTHROPIC_API_KEY")?;
    let model = AnthropicClient::new(AnthropicConfig::new(api_key, "claude-sonnet-4-20250514"))?;

    let agent = LlmAgentBuilder::new("assistant")
        .instruction("You are a helpful assistant.")
        .model(Arc::new(model))
        .build()?;

    Launcher::new(Arc::new(agent)).run().await?;

    Ok(())
}

DeepSeek

use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;

#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
    dotenvy::dotenv().ok();

    let api_key = std::env::var("DEEPSEEK_API_KEY")?;

    // Standard chat model
    let model = DeepSeekClient::chat(api_key)?;

    // Or use reasoner for chain-of-thought reasoning
    // let model = DeepSeekClient::reasoner(api_key)?;

    let agent = LlmAgentBuilder::new("assistant")
        .instruction("You are a helpful assistant.")
        .model(Arc::new(model))
        .build()?;

    Launcher::new(Arc::new(agent)).run().await?;

    Ok(())
}

Groq (超高速推論)

use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;

#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
    dotenvy::dotenv().ok();

    let api_key = std::env::var("GROQ_API_KEY")?;
    let model = GroqClient::new(GroqConfig::llama70b(api_key))?;

    let agent = LlmAgentBuilder::new("assistant")
        .instruction("You are a helpful assistant.")
        .model(Arc::new(model))
        .build()?;

    Launcher::new(Arc::new(agent)).run().await?;

    Ok(())
}

Ollama (ローカルモデル)

use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;

#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
    dotenvy::dotenv().ok();

    // Requires: ollama serve && ollama pull llama3.2
    let model = OllamaModel::new(OllamaConfig::new("llama3.2"))?;

    let agent = LlmAgentBuilder::new("assistant")
        .instruction("You are a helpful assistant.")
        .model(Arc::new(model))
        .build()?;

    Launcher::new(Arc::new(agent)).run().await?;

    Ok(())
}

サポートされているモデル

プロバイダーモデルの例フィーチャーフラグ
Geminigemini-3-pro-preview, gemini-3-flash-preview, gemini-2.5-flash, gemini-2.5-pro, gemini-2.0-flash(デフォルト)
OpenAIgpt-5.2, gpt-5.2-mini, gpt-5-mini, gpt-5-nano, gpt-4.1, gpt-4.1-mini, o3-mini, gpt-4o, gpt-4o-miniopenai
Anthropicclaude-sonnet-4-5, claude-haiku-4-5, claude-opus-4-5, claude-sonnet-4, claude-opus-4, claude-haiku-4anthropic
DeepSeekdeepseek-chat, deepseek-reasonerdeepseek
Groqgpt-oss-120b, qwen3-32b, llama-3.3-70b-versatile, mixtral-8x7b-32768groq
Ollamagemma3, qwen2.5, llama3.2, mistral, phi4, codellamaollama

次のステップ

最初のagentが実行されたので、以下のトピックを探求してください。


前へ: Introduction | 次へ: LlmAgent