API ve SDKKılavuz
openai gem ile Ruby'de ilk istek: base_url, anahtar, usage
Kısa bir Ruby betiği: resmi openai gem'i, özel bir base_url ve ortam değişkeninden bir anahtar. Yanıt metnini ve token kullanımını yazdırır.

Bu sayfada
Evet, resmi openai gem'i CheapTokens ile çalışır: OpenAI::Client.'ye base_ ve anahtarınızı verin, client. çağırın ve metni choices.'ten okuyun. Bu sayfanın geri kalanı tam betik, dönen yanıtın nasıl okunacağı ve çalışmadığında nelerin kontrol edileceğidir.
Diyelim ki destek taleplerini etiketleyen bir rake göreviniz veya bir notu kaydetmeden önce özetleyen bir arka plan işiniz var. Elle yazılmış HTTP değil, resmi SDK'yı istiyorsunuz ve her çağrının kaç token kullandığını görmek istiyorsunuz. Bu betik tam olarak bunu yapıyor.
Başlamadan önce ihtiyacınız olanlar#
RubyGems'teki gem sayfası (8 Kasım 2026'da kontrol edildi) 5 Kasım 2026'da yayımlanan, Apache-2.0 lisanslı openai 0.120.0 sürümünü listeliyor. Ruby 3.3.0 veya daha yenisini gerektiriyor; Ruby 3.2'de takılıp kaldıysanız gem'in kendi notları 0.75.x serisine işaret ediyor. Paket hâlâ 0.x ve hızlı hareket ediyor, bu yüzden sürümü sabitleyin.
Gemfile dosyanızda:
gem "openai", "~> 0.120.0"Ardından bundle install. Bundler olmadan gem install openai - aynı işi yapar.
Ayrıca CheapTokens hesabınızdan bir API anahtarına ihtiyacınız var. Anahtarı koddan uzak tutun: bir ortam değişkenine koyun ve .gitignore kelimesi size yeni geliyorsa, anahtarları güvende tutma rehberi beş dakikalık bir okumadır.
export CHEAPTOKENS_API_KEY="sk-your-key"Betik#
ask.rb oluşturun:
require "openai"
client = OpenAI::Client.new(
api_key: ENV.fetch("CHEAPTOKENS_API_KEY"),
base_url: "https://api.cheaptokens.dev/v1"
)
completion = client.chat.completions.create(
model: "deepseek-ai/DeepSeek-V4-Flash-0731",
messages: [
{ role: "user", content: "Explain in one sentence what a token is." }
]
)
choice = completion.choices.first
puts choice.message.content
puts "finish_reason: #{choice.finish_reason}"
puts completion.usageruby ask.rb ile çalıştırın. İkinci bir bakışı hak eden üç şey var.
ENV[...] yerine ENV.fetch. Değişken eksikse, fetch hemen durur ve onu adlandıran bir KeyError fırlatır. ENV[...] sessizce nil geçirir ve birkaç satır sonra kafa karıştırıcı bir kimlik doğrulama hatası alırsınız.
base_url:, gem'in README'sindeki OpenAI örneklerinden farklı olan tek satırdır. Geri kalan her şey aynı koddur; OpenAI uyumlu bir API'nin bütün amacı da budur. Kavram size yeni geliyorsa, base_url nedir ve nasıl değiştirilir bunu bir restoran benzetmesiyle açıklıyor.
Model kimliği tam olandır, deepseek-. Bir fiyat tablosundaki kısa ad API tarafından kabul edilmez; kimlikleri CheapTokens dokümanlarından veya GET /v1/models üzerinden alın.

Dönen yanıtı okumak#
Yanıt bir hash değil, bir nesnedir; bu yüzden üzerinde metot çağırırsınız. Metin completion. konumundadır; gem'in README'sinin kullandığı yol da budur.
İlk günden itibaren yazdırmaya değer iki satır daha var:
finish_reasonmodelin neden durduğunu söyler.stopnormal bir bitiştir.lengthbir uzunluk sınırının yanıtı kestiği anlamına gelir. Bunu görürseniz, yanıtlar neden kesilir ve nasıl düzeltilir.usageçağrının faturalandırıldığı token'ları tutar: gönderdiğiniz ve modelin yazdığı. Betik tüm nesneyiputs completion.ile yazdırır, böylece her iki sayıyı da API'nin döndürdüğü şekilde görürsünüz.usage
Neden kayıt tutmalı? Çünkü token'lar faturadır. Tek cümlelik bir soru ve tek cümlelik bir yanıt küçüktür, ama günde bin kez çalışan bir iş değildir. Girdi ve çıktı token'ları ikinci sayının neden genellikle token başına daha pahalı olduğunu açıklar.
Böyle bir çağrının maliyeti#
CheapTokens'ta DeepSeek-V4-Flash, 1M girdi token'ı başına $0.015 ve 1M çıktı token'ı başına $0.10; günün her saatinde aynı fiyat. Bir talep etiketleme işini ele alalım: talep başına yaklaşık 300 token girdi, 150 token çıktı. Bir talep $0.00002 tutar. Bin talep şöyle görünür, yan sütunda OpenRouter'ın referans fiyatıyla:
| Model | Giriş $/1M | Çıkış $/1M | İstek başına | 1.000 istek | OpenRouter, 1.000 istek |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000012 | $0.012 | $0.0225 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.00002 | $0.0195 | $0.042 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.000038 | $0.0375 | $0.45 |
İstek başına 300 giriş ve 150 çı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.
Model 380K token'a kadar bağlam ve tek yanıtta 32.768 token'a kadar destekler, bu yüzden bir özetleme işi nadiren duvara toslar. Aynı betikle ikinci bir modeli denemek isterseniz, yalnızca model: dizesini zai- olarak değiştirin (390K bağlam, 8.192 çıktı token'ına kadar).
Çalışmazsa#
İlk çalıştırma hatalarının çoğu beş şeyden biridir. Ekranınıza uyanı seçin.
Durumunu seç
Ne görüyorsunuz?
Cevabı görmek için bir seçenek seçin
KeyError: key not found: "CHEAPTOKENS_API_KEY"
Değişken bu terminalde ayarlanmamış. export satırını yeniden çalıştırın veya yeni bir kabuk açıp echo $CHEAPTOKENS_ ile kontrol edin.
401 Unauthorized
Anahtar orada ama yanlış: kaçak bir boşluk veya tırnak, kesik bir yapıştırma ya da eski bir anahtar. Hesabınızdan yeniden kopyalayın.
404 Not Found
Önce base_url kontrol edin: /v1 ile bitiyor ve ardından ekstra bir yol yok. Sonra model kimliğini kontrol edin: deepseek-ai/ önekiyle tam kimlik olmalı.
cannot load such file -- openai
Gem bu Ruby için kurulu değil. bundle install çalıştırın ve betiği bundle exec ruby ask. ile başlatın.
Bundler can't find a version that works
ruby -v kontrol edin. 0.120.x serisi Ruby 3.3.0 veya daha yenisini gerektirir; 3.2'de bunun yerine 0.75.x serisini sabitleyin.
401 ve 404 durumları yalnızca Ruby'de değil her SDK'da ortaya çıkar; API 401 veya 404: yanlış anahtar, base URL veya model kimliği bunları sırayla ele alır.
Hızlı kontrol
finish_reason "length" size ne söyler?
Cevabı göster
Cevap: Yanıt bir uzunluk sınırı tarafından kesildi
stop normal bir bitiştir; length yanıtın model bitmeden bir sınıra takıldığı anlamına gelir.
Sırada ne var#
Artık en küçük kullanışlı döngünüz var: gönder, metni oku, token'ları kaydet. Buradan itibaren çağrıyı bir metoda sarın ve usage sayılarını logger'ınıza ekleyin. Yığınınız karışıksa aynı desen diğer dillerde de var: Go, Java ve C#. Modellerin ve fiyatların tam listesi modeller sayfasında, API referansı ise dokümanlarda.



