모델 Provider (클라우드)

ADK-Rust는 adk-model crate를 통해 여러 클라우드 LLM provider를 지원합니다. 모든 provider는 Llm trait를 구현하므로, 여러분의 agents에서 상호 교환하여 사용할 수 있습니다.

개요

┌─────────────────────────────────────────────────────────────────────┐
│                     Cloud Model Providers                           │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│   • Gemini (Google)    ⭐ Default    - Multimodal, large context    │
│   • OpenAI (GPT-4o)    🔥 Popular    - Best ecosystem               │
│   • Anthropic (Claude) 🧠 Smart      - Best reasoning               │
│   • DeepSeek           💭 Thinking   - Chain-of-thought, cheap      │
│   • Groq               ⚡ Ultra-Fast  - Fastest inference           │
│                                                                     │
│   For local/offline models, see:                                    │
│   • Ollama     → ollama.md                                          │
│   • mistral.rs → mistralrs.md                                       │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

빠른 비교

Provider적합한 용도속도비용주요 기능
Gemini일반적인 사용⚡⚡⚡💰Multimodal, 대규모 컨텍스트
OpenAI신뢰성⚡⚡💰💰최고의 생태계
Anthropic복잡한 추론⚡⚡💰💰가장 안전하고 사려 깊음
DeepSeekChain-of-thought⚡⚡💰Thinking 모드, 저렴함
Groq속도 중요⚡⚡⚡⚡💰가장 빠른 추론

1단계: 설치

필요한 provider를 Cargo.toml에 추가하세요:

[dependencies]
# 하나 이상의 provider 선택:
adk-model = { version = "0.2", features = ["gemini"] }        # Google Gemini (기본값)
adk-model = { version = "0.2", features = ["openai"] }        # OpenAI GPT-4o
adk-model = { version = "0.2", features = ["anthropic"] }     # Anthropic Claude
adk-model = { version = "0.2", features = ["deepseek"] }      # DeepSeek
adk-model = { version = "0.2", features = ["groq"] }          # Groq (초고속)

# 또는 모든 클라우드 provider 한 번에:
adk-model = { version = "0.2", features = ["all-providers"] }

2단계: API 키 설정

export GOOGLE_API_KEY="your-key"      # Gemini
export OPENAI_API_KEY="your-key"      # OpenAI
export ANTHROPIC_API_KEY="your-key"   # Anthropic
export DEEPSEEK_API_KEY="your-key"    # DeepSeek
export GROQ_API_KEY="your-key"        # Groq

Gemini (Google) ⭐ 기본

가장 적합한 용도: 범용, 멀티모달 작업, 대규모 문서

주요 특징:

  • 🖼️ 네이티브 멀티모달 (이미지, 비디오, 오디오, PDF)
  • 📚 최대 2M 토큰 컨텍스트 창
  • 💰 경쟁력 있는 가격
  • ⚡ 빠른 추론

완전한 작동 예시

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

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    dotenvy::dotenv().ok();
    
    let api_key = std::env::var("GOOGLE_API_KEY")?;
    let model = GeminiModel::new(&api_key, "gemini-2.0-flash")?;

    let agent = LlmAgentBuilder::new("gemini_assistant")
        .description("Gemini-powered assistant")
        .instruction("You are a helpful assistant powered by Google Gemini. Be concise.")
        .model(Arc::new(model))
        .build()?;

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

사용 가능한 모델

Model설명Context
gemini-2.0-flash빠르고 효율적 (권장)1M tokens
gemini-2.5-flash최신 flash 모델1M tokens
gemini-2.5-pro가장 유능함2M tokens

예시 출력

👤 User: What's in this image? [uploads photo of a cat]

🤖 Gemini: I can see a fluffy orange tabby cat sitting on a windowsill. 
The cat appears to be looking outside, with sunlight illuminating its fur. 
It has green eyes and distinctive striped markings typical of tabby cats.

OpenAI (GPT-4o) 🔥 인기

가장 적합한 용도: 프로덕션 앱, 안정적인 성능, 광범위한 기능

주요 특징:

  • 🏆 업계 표준
  • 🔧 뛰어난 tool/function calling
  • 📖 최고의 문서 및 에코시스템
  • 🎯 일관되고 예측 가능한 출력

완전한 작동 예시

use adk_rust::prelude::*;
use adk_rust::Launcher;
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 = OpenAIClient::new(OpenAIConfig::new(&api_key, "gpt-4o"))?;

    let agent = LlmAgentBuilder::new("openai_assistant")
        .description("OpenAI-powered assistant")
        .instruction("You are a helpful assistant powered by OpenAI GPT-4o. Be concise.")
        .model(Arc::new(model))
        .build()?;

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

사용 가능한 모델

Model설명Context
gpt-4o가장 유능하며 멀티모달128K tokens
gpt-4o-mini빠르고 비용 효율적128K tokens
gpt-4-turbo이전 플래그십128K tokens
o1추론 모델128K tokens

예시 출력

👤 User: Write a haiku about Rust programming

🤖 GPT-4o: Memory so safe,
Ownership guards every byte—
Compiler, my friend.

Anthropic (Claude) 🧠 스마트

용도: 복잡한 추론, 안전에 민감한 앱, 긴 문서

주요 특징:

  • 🧠 탁월한 추론 능력
  • 🛡️ 가장 안전에 중점을 둠
  • 📚 200K 토큰 컨텍스트
  • ✍️ 뛰어난 작성 품질

완전한 작동 예시

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

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    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("anthropic_assistant")
        .description("Anthropic-powered assistant")
        .instruction("You are a helpful assistant powered by Anthropic Claude. Be concise and thoughtful.")
        .model(Arc::new(model))
        .build()?;

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

사용 가능한 모델

Model설명Context
claude-sonnet-4-20250514최신 Claude 4 Sonnet200K tokens
claude-opus-4-20250514가장 강력한 Claude 4200K tokens
claude-3-5-sonnet-20241022Claude 3.5 Sonnet200K tokens

예시 출력

👤 User: 10살 아이에게 양자 얽힘을 설명해 줘

🤖 Claude: 마법 동전 두 개가 있다고 상상해 봐. 동전을 던지면, 하나는 지구에 있고 다른 하나는 달에 있더라도, 항상 똑같은 면으로 떨어져 - 둘 다 앞면이거나 둘 다 뒷면이지! 과학자들은 이것을 "얽힘(entanglement)"이라고 불러. 이 동전들은 우리가 볼 수 없는 특별한 방식으로 연결되어 있어, 마치 항상 동시에 같은 선택을 하는 보이지 않는 가장 친한 친구들처럼 말이야.

DeepSeek 💭 사고

용도: 복잡한 문제 해결, 수학, 코딩, 추론 작업

주요 특징:

  • 💭 사고 모드 - 사고 과정을 보여줌
  • 💰 매우 비용 효율적 (GPT-4보다 10배 저렴)
  • 🔄 반복되는 접두사에 대한 컨텍스트 캐싱
  • 🧮 수학 및 코딩에 강함

완전한 작동 예시

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

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    dotenvy::dotenv().ok();
    
    let api_key = std::env::var("DEEPSEEK_API_KEY")?;
    
    // Standard chat model
    let model = DeepSeekClient::chat(&api_key)?;
    
    // OR: Reasoning model with thinking mode
    // let model = DeepSeekClient::reasoner(&api_key)?;

    let agent = LlmAgentBuilder::new("deepseek_assistant")
        .description("DeepSeek-powered assistant")
        .instruction("You are a helpful assistant powered by DeepSeek. Be concise.")
        .model(Arc::new(model))
        .build()?;

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

사용 가능한 모델

Model설명특수 기능
deepseek-chat빠른 채팅 모델범용
deepseek-reasoner추론 모델사고 과정 표시

예시 출력 (사고 모드를 사용하는 Reasoner)

👤 User: 17 × 23은 얼마야?

🤖 DeepSeek: <thinking>
이것을 분해해 보겠습니다:
17 × 23 = 17 × (20 + 3)
       = 17 × 20 + 17 × 3
       = 340 + 51
       = 391
</thinking>

정답은 391입니다.

Groq ⚡ 초고속

다음 용도에 가장 적합합니다: 실시간 애플리케이션, 챗봇, 속도가 중요한 작업

주요 특징:

  • 가장 빠른 추론 - 경쟁사보다 10배 빠름
  • 🔧 LPU (Language Processing Unit) 기술
  • 💰 경쟁력 있는 가격
  • 🦙 LLaMA, Mixtral, Gemma 모델 실행

완전한 작동 예시

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

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    dotenvy::dotenv().ok();
    
    let api_key = std::env::var("GROQ_API_KEY")?;
    let model = GroqClient::llama70b(&api_key)?;

    let agent = LlmAgentBuilder::new("groq_assistant")
        .description("Groq-powered assistant")
        .instruction("You are a helpful assistant powered by Groq. Be concise and fast.")
        .model(Arc::new(model))
        .build()?;

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

사용 가능한 모델

모델메서드설명
llama-3.3-70b-versatileGroqClient::llama70b()가장 유능함
llama-3.1-8b-instantGroqClient::llama8b()가장 빠름
mixtral-8x7b-32768Custom config좋은 균형

예시 출력

👤 User: Quick! Name 5 programming languages

🤖 Groq (in 0.2 seconds): 
1. Rust
2. Python
3. JavaScript
4. Go
5. TypeScript

제공자 전환

모든 제공자는 동일한 Llm trait를 구현하므로 전환이 쉽습니다.

use adk_agent::LlmAgentBuilder;
use std::sync::Arc;

// 모델만 변경하면 나머지는 모두 동일하게 유지됩니다!
let model: Arc<dyn adk_core::Llm> = Arc::new(
    // 하나를 선택하세요.
    // GeminiModel::new(&api_key, "gemini-2.0-flash")?
    // OpenAIClient::new(OpenAIConfig::new(&api_key, "gpt-4o"))?
    // AnthropicClient::new(AnthropicConfig::new(&api_key, "claude-sonnet-4-20250514"))?
    // DeepSeekClient::chat(&api_key)?
    // GroqClient::llama70b(&api_key)?
);

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

예시

# Gemini (기본값)
cargo run --example quickstart

# OpenAI
cargo run --example openai_basic --features openai

# Anthropic
cargo run --example anthropic_basic --features anthropic

# DeepSeek
cargo run --example deepseek_basic --features deepseek
cargo run --example deepseek_reasoner --features deepseek  # 사고 모드

# Groq
cargo run --example groq_basic --features groq

관련 항목


이전: ← 실시간 Agent | 다음: Ollama (로컬) →