API ve SDKKılavuz
async-openai ile Rust'ta ilk istek: temel URL, anahtar, kullanım
tokio ve async-openai ile CheapTokens'a bir sohbet tamamlama isteği gönderen ve yanıtı ve token sayılarını yazdıran küçük bir Rust programı.

Bu sayfada
CheapTokens'ı Rust'ta async-openai ile çağırmak için, temel URL'si https:/ ve anahtarınızla bir OpenAIConfig oluşturun, ardından isteği create_byot ve bir JSON gövdesiyle gönderin. Yanıt metni ve token sayıları, geri gelen JSON'dan çıkar. Bu yaklaşık 25 satır koddur ve aynı program, tek bir dizeyi değiştirdiğinizde CheapTokens modeller sayfasındaki herhangi bir model için çalışır.
Crate'in docs.rs sayfası (8 Kasım 2026'da kontrol edildi) MIT lisansı altında 0.43.0 sürümünü listeliyor ve bu kılavuz o sürümü takip ediyor.

Neden tipli istekler yerine create_byot#
async-openai normalde size tipli bir istek oluşturucu sunar: bir struct doldurursunuz, o da size bir struct döndürür. Bu, bir ağ geçidi struct'ların bilmediği bir alan döndürene kadar rahattır. byot özelliği ("kendi tiplerini getir") herhangi bir JSON gövdesi alan ve düz serde_ dahil olmak üzere serileştirebileceğiniz herhangi bir türü döndüren *_byot metotları ekler.
İlk istek için tam olarak istediğiniz şey budur. Bir curl çağrısına koyacağınız aynı JSON'u yazarsınız ve usage doğrudan yanıttan okursunuz, bakılacak bir tür yoktur.
Projeyi kurun#
Adım adım
Projeyi oluşturun ve anahtarı ayarlayın
Crate'leri ekleyin
Yeni bir projede (cargo new cheaptokens-), üç bağımlılık ekleyin. async-openai burada iki özelliğe ihtiyaç duyar: create_byot metotları için byot ve sohbet bölümü için chat-completion.
cargo add async-openai --features byot,chat-completion
cargo add tokio --features macros,rt-multi-thread
cargo add serde_jsonAnahtarı bir ortam değişkenine koyun
Anahtarı CheapTokens hesabınızda oluşturun ve kaynak kodun dışında tutun. Uzun versiyonunu istiyorsanız, bir API anahtarını güvenle nasıl saklayacağınıza bakın.
export CHEAPTOKENS_API_KEY="paste-your-key-here"Windows PowerShell'de aynı satır $env:CHEAPTOKENS_ şeklindedir.
Programı çalıştırın
Sonraki bölümdeki kodu src/main.rs içine yapıştırın ve başlatın.
cargo runProgram#
use async_openai::{config::OpenAIConfig, Client};
use serde_json::{json, Value};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let key = std::env::var("CHEAPTOKENS_API_KEY")?;
let config = OpenAIConfig::new()
.with_api_key(key)
.with_api_base("https://api.cheaptokens.dev/v1");
let client = Client::with_config(config);
let response: Value = client
.chat()
.create_byot(json!({
"model": "deepseek-ai/DeepSeek-V4-Flash-0731",
"messages": [
{"role": "user", "content": "Explain what a token is in one sentence."}
],
"max_tokens": 100
}))
.await?;
let choice = &response["choices"][0];
println!("{}", choice["message"]["content"].as_str().unwrap_or("(no text)"));
println!("finish_reason: {}", choice["finish_reason"]);
println!("input tokens: {}", response["usage"]["prompt_tokens"]);
println!("output tokens: {}", response["usage"]["completion_tokens"]);
Ok(())
}Üç satır tüm fikri taşır. with_api_base CheapTokens'ın girdiği yerdir: temel URL /v1 ile biter ve async-openai uç nokta yolunu kendisi ekler. with_api_key ortamdan okuduğumuz değeri alır. Ve model tam kimlik deepseek-'dır — fiyat tablolarındaki kısa adlar API tarafından kabul edilmez.
Bir Value'yi eksik bir anahtarla indekslemek panik yerine null verir, böylece bir alan adındaki yazım hatası çökme yerine çıktıda null olarak görünür. Bir yanıtı keşfederken bu kullanışlıdır.
Geri gelen#
Ağ geçidi OpenAI Chat Completions formatını konuşur, bu yüzden yanıt olağan şekle sahiptir (burada kısaltılmış, ... atladığımız alanları işaretler):
{
"choices": [
{ "message": { "role": "assistant", "content": "..." }, "finish_reason": "stop" }
],
"usage": { "prompt_tokens": 0, "completion_tokens": 0 }
}usage içindeki sayılar isteğiniz için gerçek sayılardır, bu yüzden çalıştırdığınızda sıfırların yerini alırlar. prompt_tokens gönderdiğinizdir, completion_ modelin yazdığıdır. Farklı fiyatlardan faturalandırılırlar, bunları yazdırmanın amacı da budur. Fark size yeni geliyorsa, girdi vs çıktı tokenları bunu beş dakikada açıklar.
Kendin deneDeneyin: "max_tokens" değerini 5 yapın ve tekrar çalıştırın. finish_reason ne diyor?Cevabı göster
OpenAI Chat Completions formatında length der. Model sınırınıza ulaştı ve cümle ortada kesildi. Normal bir yanıtta stop der. Gerçek bir işte length görürseniz, max_tokens değerini artırın — bu makale düzeltmeyi ele alır.
Bir isteğin maliyeti#
Diyelim ki bu çağrıyı bir döngüde çalıştırıyorsunuz, içeri küçük bir soru ve dışarı kısa bir yanıt: her biri 300 girdi tokenı ve 200 çıktı tokenı. DeepSeek-V4-Flash'te bu, 1M girdi tokenı başına $0.015 ve 1M çıktı tokenı başına $0.10 canlı fiyatından, istek başına $0.000025 eder. Girdi ve çıktı birlikte sayıldığında bu OpenRouter'dan daha ucuzdur ve model 380K bağlamı korur ve 32.768 tokena kadar yanıt verir.
Aşağıdaki tablo aynı isteği her modelde, 1.000 ile çarpılmış olarak gösterir.
| Model | Giriş $/1M | Çıkış $/1M | İstek başına | 1.000 istek | OpenRouter, 1.000 istek |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000014 | $0.014 | $0.0267 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000025 | $0.0245 | $0.049 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.000045 | $0.045 | $0.54 |
İstek başına 300 giriş ve 200 çıkış token'ı. 1M token başına fiyatlar günceldir ve tarifelerimizle birlikte değişir; OpenRouter sütunu aynı iş yükü için referans fiyatları gösterir.
Fiyatlar fiyatlandırma sayfasında bulunur.
Modeli değiştirmek#
Model değiştiğinde kod değişmez; yalnızca "model" içindeki dize değişir. Örneğin, zai- 390K bağlama sahiptir ve 8.192 tokena kadar yanıt verir. Kodu hiç düzenlememek için, kimliği std::env::var("CHEAPTOKENS_ ile ikinci bir değişkenden okuyun. Anahtarınızın hangi kimlikleri gördüğünden emin değilseniz, GET /v1/models ile modelleri listeleyin.
Çalışmazsa#
- En başta
environment variable not found: anahtar bu terminalde dışa aktarılmamış.cargo runçalıştırdığınız aynı pencerede tekrar dışa aktarın. - API'den 401 hatası: anahtar yanlış veya etrafında kaçak bir boşluk ya da tırnak var.
- 404 hatası: temel URL'nin
/v1ile bittiğini ve model kimliğinindeepseek-ai/önekiyle tam olan olduğunu kontrol edin. API 401 veya 404: anahtar, temel URL, model kimliği bunu adım adım anlatır. - Derleyici
create_byotbulamıyor:byotözelliği etkin değil. Kurulumdakicargo addsatırını tekrar çalıştırın.
Bunlardan hiçbiri olmayan bir bağlantı sorunu için, yaygın bağlantı hatalarına bakın.
Aynı ilk istek diğer diller için de mevcut: Go ve Ruby. API'nin kendisi hakkında daha fazlası için, CheapTokens belgelerini açın.



