Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

llm - Büyük Dil Modelleri

OpenAI, Anthropic, Google ve Ollama API client'ları

4
Provider
Async
Destekli
Stream
Modu
15+
Model

Genel Bakış

llm modülü, popüler LLM API sağlayıcılarına erişim için birleşik bir arayüz sunar. Tüm provider'lar için tutarlı bir API ile chat completion, streaming ve asenkron işlemler yapabilirsiniz.

OpenAI

GPT-4, GPT-3.5-turbo

  • Chat completion
  • Function calling
  • Vision (GPT-4V)

Anthropic

Claude 3 (Opus, Sonnet, Haiku)

  • 100K context
  • Extended thinking
  • Document analysis

Google

Gemini Pro, Gemini Ultra

  • Multimodal input
  • Code generation
  • Long context

Ollama

Llama 2, Mistral, Mixtral

  • Local inference
  • Privacy first
  • No API key

OpenAI Client

Chat Completion

kullan ai/llm;

değişken client = OpenAI::yeni(
    api_key: env::var("OPENAI_API_KEY")?
);

değişken response = client.chat(
    model: "gpt-4",
    messages: [
        Message { role: "system", content: "Sen yardımcı bir asistansın." },
        Message { role: "user", content: "Rust ile Berk arasındaki farklar neler?" }
    ],
    temperature: 0.7,
    max_tokens: 1000
).await?;

yazdir("{}", response.content);

Streaming Response

kullan ai/llm;

değişken stream = client.chat_stream(
    model: "gpt-4",
    messages: messages
).await?;

her chunk içinde stream için yap
    print!("{}", chunk.content); // Anında yazdır
son
yazdir!();  // Yeni satır

Function Calling

kullan ai/llm;

değişken functions = [
    Function {
        name: "get_weather",
        description: "Hava durumu bilgisini al",
        parameters: json!({
            "type": "object",
            "properties": {
                "location": { "type": "string" },
                "unit": { "type": "string", "enum": ["celsius", "fahrenheit"] }
            }
        })
    }
];

değişken response = client.chat(
    model: "gpt-4",
    messages: messages,
    functions: functions,
    function_call: "auto"
).await?;

eğer response.function_call.is_some() ise yap
    değişken func = response.function_call.unwrap();
    yazdir("Fonksiyon çağrısı: {}({})", func.name, func.arguments);
son

Anthropic Client

Claude Chat

kullan ai/llm;

değişken client = Anthropic::yeni(
    api_key: env::var("ANTHROPIC_API_KEY")?
);

değişken response = client.chat(
    model: "claude-3-opus-20240229",
    messages: [
        Message { role: "user", content: "BERK dilinde bir web server yazmak istiyorum." }
    ],
    max_tokens: 4096,
    temperature: 1.0
).await?;

yazdir!("{}", response.content[0].text);

Extended Thinking

kullan ai/llm;

// Uzun düşünme süresi için
değişken response = client.chat(
    model: "claude-3-opus-20240229",
    messages: messages,
    thinking_time: 30.0,  // 30 saniye düşünme
    stream: doğru
).await?;

Google Gemini

Gemini Pro

kullan ai/llm;

değişken client = Gemini::yeni(
    api_key: env::var("GOOGLE_API_KEY")?
);

değişken response = client.generate(
    model: "gemini-pro",
    prompt: "BERK'in temel özelliklerini açıkla",
    temperature: 0.9,
    top_p: 1.0,
    top_k: 40
).await?;

yazdir("{}", response.text);

Multimodal (Vision)

kullan ai/llm;

değişken image_data = fs::read("diagram.png")?;

değişken response = client.generate_multimodal(
    model: "gemini-pro-vision",
    prompt: "Bu diyagramı açıkla",
    images: [image_data],
    temperature: 0.4
).await?;

yazdir("{}", response.text);

Ollama (Local)

Local Llama 2

kullan ai/llm;

değişken client = Ollama::yeni(
    host: "http://localhost:11434"
);

// Önce modeli indir (ilk kullanım)
client.pull("llama2:13b").await?;

değişken response = client.generate(
    model: "llama2:13b",
    prompt: "BERK programlama dili nedir?",
    stream: yanlış
).await?;

yazdir("{}", response.response);

Streaming Local Inference

kullan ai/llm;

değişken stream = client.generate_stream(
    model: "mistral:7b",
    prompt: "Berk ile bir örnek yap"
).await?;

her chunk içinde stream için yap
    print!("{}", chunk.response);
son

Unified API

Provider-Agnostic Code

kullan ai/llm;

// Tüm provider'lar için aynı arayüz
fonksiyon chat(provider: LLMProvider, prompt: dizgi) -> dizgi yap
    değişken response = provider.chat(
        messages: [Message::user(prompt)],
        temperature: 0.7
    ).await?;
    
    dön response.content;
son

// Kullanım
değişken openai = OpenAI::yeni(openai_key);
değişken claude = Anthropic::yeni(anthropic_key);

değişken r1 = chat(openai, "Merhaba")?;
değişken r2 = chat(claude, "Merhaba")?;

Advanced Features

Conversation History

kullan ai/llm;

değişken conversation = Conversation::yeni();

conversation.add_system("Sen bir BERK uzmanısın.");
conversation.add_user("BERK'te vektör nasıl tanımlanır?");

değişken response = client.chat(
    messages: conversation.messages(),
    temperature: 0.7
).await?;

conversation.add_assistant(response.content);

// Devam eden konuşma
conversation.add_user("Peki matris nasıl?");
değişken response2 = client.chat(
    messages: conversation.messages()
).await?;

Token Counting

kullan ai/llm;

değişken tokens = client.count_tokens(
    model: "gpt-4",
    messages: messages
)?;

yazdir("Token sayısı: {}", tokens);
yazdir("Tahmini maliyet: ${:.4}", tokens as ondalık * 0.00003);

Retry & Error Handling

kullan ai/llm;

değişken client = OpenAI::yeni(api_key)
    .with_retry(max_attempts: 3, backoff: 2.0)
    .with_timeout(30.0);

deneme yap
    değişken response = client.chat(messages).await?;
    yazdir("{}", response.content);
yakala hata için yap
    match hata {
        LLMError::RateLimit => yazdir!("Rate limit aşıldı, bekleyin..."),
        LLMError::InvalidKey => yazdir!("API key geçersiz"),
        LLMError::Timeout => yazdir!("Zaman aşımı"),
        _ => yazdir!("Hata: {}", hata)
    }
son

Model Karşılaştırması

ModelContextHızKaliteMaliyet
GPT-48KOrtaÇok YüksekYüksek
GPT-3.5-turbo4KHızlıYüksekDüşük
Claude 3 Opus100KOrtaÇok YüksekYüksek
Claude 3 Sonnet100KHızlıYüksekOrta
Gemini Pro32KHızlıYüksekOrta
Llama 2 13B4KHızlıOrtaÜcretsiz
Mistral 7B8KÇok HızlıOrtaÜcretsiz

API Referansı

Provider Trait

  • chat(messages, options) -> Response - Sohbet tamamlama
  • chat_stream(messages) -> Stream - Streaming sohbet
  • count_tokens(messages) -> usize - Token sayısı
  • list_models() -> Vec<String> - Kullanılabilir modeller

Message Struct

  • role: "system" | "user" | "assistant"
  • content: dizgi - Mesaj içeriği
  • name: Option<dizgi> - Opsiyonel isim