クイックスタート
5分以内に最初の AI エージェントを作成します。
前提条件
- Rust 1.95.0 以降(
rustup update stable) - このチュートリアル用の OpenAI API キー
ステップ 1: OpenAI サーバーのひな形を作成する
cargo install cargo-adk
cargo adk new quickstart_agent --template api --provider openai
cd quickstart_agent
これにより、OpenAI エージェント、インメモリセッション、ADK HTTP ランタイム、ストリーミングエンドポイント、組み込み開発 UI を備えた完全な Rust プロジェクトが作成されます。
その他のテンプレート
# Agent with custom tools using #[tool] macro
cargo adk new my_agent --template tools
# RAG agent with Gemini embeddings and in-memory vector search
cargo adk new my_agent --template rag
# REST API server with the embedded runtime UI
cargo adk new my_agent --template api
# OpenAI GPT-5-mini agent
cargo adk new my_agent --template openai
# A2A protocol agent with builder API
cargo adk new my_agent --template a2a
# Use any provider with any template
cargo adk new my_agent --template tools --provider anthropic
# Add optional addons to any template
cargo adk new my_agent --template tools --addon docker --addon ci
| テンプレート | 得られるもの |
|---|---|
basic | インタラクティブコンソール付き Gemini エージェント(デフォルト) |
tools | #[tool] マクロのカスタムツール + schemars スキーマ生成付きエージェント |
rag | RAG パイプライン — Gemini 埋め込み、インメモリベクトルストア、ドキュメント取り込み |
api | Axum REST サーバー、ヘルスチェック、ストリーミングエンドポイント、組み込みランタイム UI |
openai | OpenAI GPT-5-mini エージェントとコンソール |
a2a | A2A プロトコルエージェントと A2aServer ビルダーおよびエージェントカード |
graph | チェックポイントと永続的な再開機能を備えたグラフベースのワークフロー |
realtime | リアルタイム音声ストリーミングエージェント |
ヒント:
--addonフラグを使用すると、docker、ci、telemetryなどのオプションのアドオンを含むテンプレートを構成できます。9 個のアドオンと 5 つのエンタープライズパターンの完全な一覧については、構成可能なテンプレート のページを参照してください。
ステップ 2: API キーを追加する
cp .env.example .env
# Open .env and replace the OPENAI_API_KEY placeholder.
生成された .gitignore には .env が含まれていません。キーはローカルに保持し、決してコミットしないでください。
ステップ 3: エージェントを実行する
cargo run
http://127.0.0.1:8080/ui/ を開きます。エージェントは自動的に表示されるため、最初にセッションを作成したりエンドポイントを呼び出したりする必要はありません。
ステップ 4: ランタイム UI でテストする
次のようなプロンプトを入力します。
Explain what this agent can do in three concise Markdown bullets.
レスポンスは会話にストリーミングされます。右側のインスペクターを使用すると、ページを離れることなく、実行トポロジー、順序付けられたイベントタイムライン、状態の変更、アーティファクト、セッション、プロトコルの機能、テレメトリを確認できます。

この録画では、アニメーション表示されるハンドオフを確認しやすいよう、ポータブルチームのショーケースを使用しています。スキャフォールドされたエージェントは、1 ノードのトポロジーで同じランタイム UI を使用します。
スモークテストを行う場合は、HTTP ランタイムも個別に検証してください。
curl -fsS http://127.0.0.1:8080/api/health
これで、エージェントの実行、セッションの管理、イベントのストリーミング、独自のテストインターフェースの提供を 1 つの実行可能ファイルで行えるようになりました。個別のフロントエンドのインストールは必要ありません。
ターミナルのみのエージェントを使用しますか?
代わりに OpenAI コンソールテンプレートを使用してください。
cargo adk new quickstart_console --template openai
cd quickstart_console
cp .env.example .env # replace the OPENAI_API_KEY placeholder
cargo run
設定不要の代替方法 — adk::run()
スキャフォールディングを使わずにエージェントをすぐ実行したいだけの場合は、次のワンライナーを使用します。
use adk_rust::run;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
dotenvy::dotenv().ok();
// Minimal default: set GOOGLE_API_KEY. Add provider features for OpenAI/Anthropic.
let response = run("You are a helpful assistant.", "Explain Rust in one sentence.").await?;
println!("{response}");
Ok(())
}
これは、コンパイル済みプロバイダーの検出、セッションの作成、エージェントの構築、実行を1回の呼び出しで処理します。スクリプト、プロトタイプ、簡単な実験に適しています。
生成されたコードを理解する
API スキャフォールドの src/main.rs は通常の LlmAgent を構築し、それを標準サーバーにマウントします。重要な接続処理は次のとおりです。
use adk_rust::prelude::*;
use adk_rust::server::{ServerConfig, create_app};
use adk_rust::session::InMemorySessionService;
use std::sync::Arc;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
dotenvy::dotenv().ok();
let api_key = std::env::var("OPENAI_API_KEY")?;
let model = adk_rust::model::openai::OpenAIClient::new(
adk_rust::model::openai::OpenAIConfig::new(&api_key, "gpt-5.6-terra"),
)?;
let agent: Arc<dyn Agent> = Arc::new(
LlmAgentBuilder::new("quickstart_agent")
.description("REST API agent")
.instruction("You are a helpful assistant accessible via REST API.")
.model(Arc::new(model))
.build()?,
);
let config = ServerConfig::new(
Arc::new(adk_rust::SingleAgentLoader::new(agent)),
Arc::new(InMemorySessionService::new()),
);
let app = create_app(config);
let listener = tokio::net::TcpListener::bind("127.0.0.1:8080").await?;
axum::serve(listener, app).await?;
Ok(())
}
| 部分 | 動作 |
|---|---|
OpenAIClient | OPENAI_API_KEY からモデルクライアントを作成します |
LlmAgentBuilder | ビルダーパターン:名前、説明、指示(システムプロンプト)、モデル、ツール |
InMemorySessionService | ランナーと UI のローカル開発セッションを保存します |
create_app | REST/SSE API と組み込みランタイム UI を 1 つの Axum ルーターにマウントします |
カスタムツールの追加
ツールを追加する最も速い方法は、#[tool] マクロを使うことです。adk-tool を依存関係に追加します。
[dependencies]
adk-tool = "2.1.0"
schemars = "1"
serde = { version = "1", features = ["derive"] }
次にツールを定義します — ドキュメントコメントが説明になり、引数構造体が JSON スキーマになります。
use adk_tool::{tool, AdkError};
use schemars::JsonSchema;
use serde::Deserialize;
use serde_json::{json, Value};
#[derive(Deserialize, JsonSchema)]
struct WeatherArgs {
/// The city to look up
city: String,
}
/// Get the current weather for a city.
#[tool]
async fn get_weather(args: WeatherArgs) -> std::result::Result<Value, AdkError> {
Ok(json!({ "temp": 22, "city": args.city, "condition": "sunny" }))
}
このマクロは Tool を実装する GetWeather 構造体を生成します。これをエージェントに追加します。
let agent = LlmAgentBuilder::new("weather_agent")
.instruction("Use the get_weather tool for weather questions.")
.model(Arc::new(model))
.tool(Arc::new(GetWeather)) // Generated by #[tool]
.build()?;
ヒント: ツールがあらかじめ設定されたプロジェクトをスキャフォールドすることもできます:
cargo adk new my-agent --template tools
組み込みツール
ADK には、すぐに使えるツールも含まれています。
// Google Search (handled server-side by Gemini)
.tool(Arc::new(GoogleSearchTool::new()))
// Exit a LoopAgent
.tool(Arc::new(ExitLoopTool::new()))
Web サーバーとして実行する
HTTP を提供する場合は、サーバープロジェクトをスキャフォールドします。
cargo adk new my-api --template api --provider openai
cd my-api
cp .env.example .env
cargo run
http://127.0.0.1:8080/ui/ を開きます。デフォルトの基本テンプレートでは、代わりに軽量なコンソールランチャーが使用されます。
他のモデルを使用する
フィーチャーフラグでプロバイダーを有効にします。高速なインストールのため、デフォルトのビルドは Gemini 専用のままになっているので、必要なプロバイダーだけを追加します。
[dependencies]
adk-rust = { version = "2.1.0", features = ["openai"] }
または、プロバイダーを指定してスキャフォールドします: cargo adk new my-agent --provider openai
OpenAI
let api_key = std::env::var("OPENAI_API_KEY")?;
let model = OpenAIClient::new(OpenAIConfig::new(api_key, "gpt-5.6-terra"))?;
Anthropic
let api_key = std::env::var("ANTHROPIC_API_KEY")?;
let model = AnthropicClient::new(AnthropicConfig::new(api_key, "claude-sonnet-5"))?;
DeepSeek
let api_key = std::env::var("DEEPSEEK_API_KEY")?;
let model = DeepSeekClient::chat(api_key)?; // standard
// let model = DeepSeekClient::reasoner(api_key)?; // chain-of-thought
Groq
let api_key = std::env::var("GROQ_API_KEY")?;
let model = GroqClient::new(GroqConfig::gpt_oss_120b(api_key))?;
Ollama(ローカル)
// Requires: ollama serve && ollama pull llama3.2
let model = OllamaModel::new(OllamaConfig::new("llama3.2"))?;
サポートされているモデル
| プロバイダー | モデル例 | 機能フラグ |
|---|---|---|
| Gemini | gemini-3.7-flash, gemini-3.6-flash, gemini-3.1-pro-preview | (デフォルト) |
| OpenAI | gpt-5.6-terra, gpt-5.6-sol, gpt-5.6-luna | openai |
| Anthropic | claude-sonnet-5、claude-opus-5、claude-fable-5 | anthropic |
| DeepSeek | deepseek-v4-flash、deepseek-v4-pro | deepseek |
| Groq | openai/gpt-oss-120b、openai/gpt-oss-20b | groq |
| Ollama | qwen3.6:35b-a3b、qwen3.5、llama3.2:3b | ollama |
次のステップ
- LlmAgent 設定 — すべての設定オプション
- 関数ツール —
#[tool]を使用してカスタムツールを作成 - ワークフローエージェント — 順次、並列、ループのパイプライン
- セッション — 会話状態を管理
- コールバック — エージェントの動作をカスタマイズ