API ve SDKKılavuz
openai-java ile Java'da ilk istek: temel URL, anahtar, kullanım
Çalıştırılabilir bir Java 8+ programı: CheapTokens'a yönlendirilmiş openai-java, bir sohbet tamamlama ve yazdırılan yanıt, finish_reason ve token kullanımı.

Bu sayfada
CheapTokens'ı Java'dan çağırmak için resmi openai-java SDK'sını koruyun ve üç şeyi değiştirin: temel URL (https:/), API anahtarı ve düz bir String olarak geçirilen model kimliği. Aşağıdaki program bir sohbet tamamlama isteği gönderir ve yanıtı, finish_reason değerini ve token kullanımını yazdırır. Java 8 veya üzeri gerektirir.
Ekibinizin OpenAI ile konuşan bir Spring servisi varsa, geçişin tamamı bundan ibarettir: yeni istemci yok, yeni istek sınıfı yok.
Bağımlılığı ekleyin#
SDK'nın README'si (github.com/openai/openai-java, 4 Kasım 2026'da kontrol edildi) 4.99.0 sürümünü, com.openai grubunu, openai-java artifact'ını gösterir. README bir yayın tarihi yazdırmıyor, bu yüzden bunu kopyalamadan önce en son sürüm için depoya bakın.
openai-java'yı derlemenize ekleyin
Maven
<dependency>
<groupId>com.openai</groupId>
<artifactId>openai-java</artifactId>
<version>4.99.0</version>
</dependency>Gradle
implementation("com.openai:openai-java:4.99.0")Çerçeveden bağımsız artifact'lar Java 8+ üzerinde çalışır, yani eski bir kurumsal JDK engel değildir.
Anahtarı ve temel URL'yi kodun dışında ayarlayın#
SDK iki ortam değişkeni okur: OPENAI_API_KEY ve OPENAI_BASE_URL. OpenAIOkHttpClient. ikisini de alır, böylece anahtar hiçbir zaman kaynak dosyalarınıza girmez. (openai.apiKey ve openai.baseUrl sistem özellikleri de çalışır ve değişkenlere göre önceliklidir.)
export OPENAI_API_KEY="your-cheaptokens-key"
export OPENAI_BASE_URL="https://api.cheaptokens.dev/v1"SDK'nın varsayılan temel URL'si https:/'dir. İkinci satırı atlarsanız isteğiniz oraya gider ve tanımadığı bir CheapTokens anahtarıyla karşılaşır. İlk çalıştırmada 401 almanın bir yolu budur. Anahtarın nerede tutulacağı ve git'in dışında nasıl tutulacağı için bir API anahtarını güvenle saklayın sayfasına bakın.

Program#
FirstRequest. oluşturun:
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.ChatCompletion;
import com.openai.models.chat.completions.ChatCompletionCreateParams;
public class FirstRequest {
public static void main(String[] args) {
OpenAIClient client = OpenAIOkHttpClient.fromEnv();
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.model("deepseek-ai/DeepSeek-V4-Flash-0731")
.addUserMessage("Explain in two sentences what a token is.")
.maxCompletionTokens(300L)
.build();
ChatCompletion completion = client.chat().completions().create(params);
ChatCompletion.Choice choice = completion.choices().get(0);
System.out.println(choice.message().content().orElse("(no text)"));
System.out.println("finish_reason: " + choice.finishReason());
completion.usage().ifPresent(u ->
System.out.println("input " + u.promptTokens()
+ ", output " + u.completionTokens()));
}
}Birkaç satır ikinci bir bakışı hak ediyor.
.. SDK'nın README örneklerimodel("deepseek- ai/ DeepSeek- V4- Flash- 0731") ChatModel.gibi tipli sabitler kullanır, ancak builder'ın birGPT_ 5_ 2 model(String)aşırı yüklemesi de vardır, yani herhangi bir kimlik çalışır. CheapTokens belgelerindeki tam kimliği kullanın: kısa addeepseek-sitede fiyatların etiketlendiği biçimdir; API,v4- flash- 0731 deepseek-ai/önekiyle tam kimliği ister. Bir kimlikten emin değil misiniz? GET /v1/models ile modelleri listeleyin... Yanıt uzunluğuna bir üst sınır, birmaxCompletionTokens(300L) longolarak. DeepSeek-V4-Flash yanıt başına 32.768 çıktı token'ına izin verir, yani buradaki 300 demo'yu kısa tutmak için bir tercihtir, modelin bir sınırı değildir.content()birOptional'dir. ProgramdaorElseolmasının nedeni budur. Yalnızca araç çağrılarından oluşan bir yanıtın metni yoktur.usage()de birOptional'dir. Sunucu gönderdiğindeifPresentbunu yazdırır.
Derlemenizin yaptığı gibi derleyip çalıştırın (mvn compile exec:java - veya Gradle'da bir JavaExec görevi). Bir token'ın açıklamasını, ardından içinde stop bulunan bir finish_reason: … satırını, ardından giriş ve çıktı token sayılarını içeren bir satırı almalısınız. finish_reason length diyorsa, yanıt 300 token'lık sınırınıza takıldı ve kesildi: sayıyı artırın (bunun neden olduğu).
usage() istem, tamamlama ve toplam token sayılarını döndürür (promptTokens(), completionTokens(), totalTokens()).
Değerleri builder ile açıkça ayarlayın#
Testler veya birden fazla istemcisi olan bir servis bazen açık değerlere ihtiyaç duyar. Elle oluşturulmuş aynı istemci:
OpenAIClient client = OpenAIOkHttpClient.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.baseUrl("https://api.cheaptokens.dev/v1")
.build();Bu satırdan sonraki her şey, params ve create çağrısı, yukarıdakiyle tamamen aynı kalır. Burada bile anahtarı ortamdan okumaya devam edin; bir .java dosyasındaki string literal deponuza girer.

İlk karşılaşacağınız üç hata#
Eşleştir
Belirtiyi nedene eşleştirin
Soldaki bir öğeye, ardından eşine dokun
- 401 Unauthorizedanahtar boş veya yanlış, ya da
OPENAI_BASE_URLayarlanmadığı için istek api.openai.com'a gitti - 404 Not Foundtemel URL'de
/v1eksik, ya da model kimliği mevcut değil - finish_reason length diyor
maxCompletionTokensyanıtın ihtiyacından düşük
Boş bir ortam değişkenini bir IDE'de gözden kaçırmak kolaydır: araç çubuğundan başlatılan bir çalıştırma yapılandırması, terminalde dışa aktardığınız değişkenleri devralmayabilir. Anahtar "ayarlı" ama hâlâ 401 alıyorsanız, değişkenleri çalıştırma yapılandırmasına ekleyin. Bu kodlar hakkında daha fazlası: API 401 veya 404: anahtar, temel URL, model kimliği.
Bir isteğin maliyeti#
usage yazdırdığınız için, isteği ölçeklendirmeden önce fiyatlandırabilirsiniz. Servisinizin yaklaşık 200 giriş token'ı gönderdiğini ve 300 geri aldığını varsayalım. Bugünkü fiyatlarla bu istek DeepSeek-V4-Flash üzerinde $0.000033 tutar. Giriş ve çıktı birlikte faturalandırılır ve toplamda bu OpenRouter'dan daha ucuzdur. Tablo, modellerimiz genelinde 1.000 istek için bunu tekrarlıyor:
| Model | Giriş $/1M | Çıkış $/1M | İstek başına | 1.000 istek | OpenRouter, 1.000 istek |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000016 | $0.016 | $0.0316 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000033 | $0.033 | $0.056 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.000055 | $0.055 | $0.66 |
İstek başına 200 giriş ve 300 çı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.
Şimdi kendi trafiğinizi yerleştirin. Kaydırıcıları ilk yazdırdığınız usage satırındaki sayılara çekin:
Maliyet hesaplayıcı
Günde 2.000 istek alan bir destek servisi
İstek başına giriş token'ı: 200 · İstek başına çıkış token'ı: 300 · Günlük istek sayısı: 2.000
| Model | Günlük | Aylık |
|---|---|---|
| GLM-5.3-Flash$0.02$0.04 | $0.032 | $0.96 |
| DeepSeek-V4-Flash$0.015$0.10 | $0.066 | $1.98 |
| MiniMax-M2.7$0.05$0.15 | $0.11 | $3.30 |
Yanıt başına daha fazla alan veya farklı bir iş yükü şekli için DeepSeek-V4-Flash size 380K bağlam penceresi ve günün her saatinde tek fiyat sunar; GLM-5.3-Flash (zai-) aynı programda birebir yedektir: kimliği değiştirin, başka hiçbir şeyi değil. Tüm modeller için güncel fiyatlar fiyatlandırma sayfasında ve belgeler aynı isteği diğer dillerde gösterir. Bunu Go'da mı yapıyorsunuz? openai-go sürümüne bakın.



