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
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ı
| Model | Context | Hız | Kalite | Maliyet |
|---|---|---|---|---|
| GPT-4 | 8K | Orta | Çok Yüksek | Yüksek |
| GPT-3.5-turbo | 4K | Hızlı | Yüksek | Düşük |
| Claude 3 Opus | 100K | Orta | Çok Yüksek | Yüksek |
| Claude 3 Sonnet | 100K | Hızlı | Yüksek | Orta |
| Gemini Pro | 32K | Hızlı | Yüksek | Orta |
| Llama 2 13B | 4K | Hızlı | Orta | Ücretsiz |
| Mistral 7B | 8K | Çok Hızlı | Orta | Ücretsiz |
API Referansı
Provider Trait
chat(messages, options) -> Response- Sohbet tamamlamachat_stream(messages) -> Stream- Streaming sohbetcount_tokens(messages) -> usize- Token sayısılist_models() -> Vec<String>- Kullanılabilir modeller
Message Struct
role: "system" | "user" | "assistant"content: dizgi- Mesaj içeriğiname: Option<dizgi>- Opsiyonel isim