Bloga dön

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ı.

Yazan: CheapTokens TeamYayınlanma tarihi: 4 dk okuma

openai-java'yı CheapTokens API'sine yönlendiren Java kodu
Bu sayfada
  1. Bağımlılığı ekleyin
  2. Anahtarı ve temel URL'yi kodun dışında ayarlayın
  3. Program
  4. Değerleri builder ile açıkça ayarlayın
  5. İlk karşılaşacağınız üç hata
  6. Bir isteğin maliyeti

CheapTokens'ı Java'dan çağırmak için resmi openai-java SDK'sını koruyun ve üç şeyi değiştirin: temel URL (https://api.cheaptokens.dev/v1), 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

xml
<dependency>
  <groupId>com.openai</groupId>
  <artifactId>openai-java</artifactId>
  <version>4.99.0</version>
</dependency>

Gradle

kotlin
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.fromEnv() 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.)

bash
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://api.openai.com/v1'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.

Terminalde iki ortam değişkeni ve bir çalıştırma komutu
Anahtar ve temel URL kaynak dosyadan değil, ortamdan gelir

Program#

FirstRequest.java oluşturun:

java
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.

  • .model("deepseek-ai/DeepSeek-V4-Flash-0731"). SDK'nın README örnekleri ChatModel.GPT_5_2 gibi tipli sabitler kullanır, ancak builder'ın bir model(String) aşırı yüklemesi de vardır, yani herhangi bir kimlik çalışır. CheapTokens belgelerindeki tam kimliği kullanın: kısa ad deepseek-v4-flash-0731 sitede fiyatların etiketlendiği biçimdir; API, deepseek-ai/ önekiyle tam kimliği ister. Bir kimlikten emin değil misiniz? GET /v1/models ile modelleri listeleyin.
  • .maxCompletionTokens(300L). Yanıt uzunluğuna bir üst sınır, bir long olarak. 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() bir Optional'dir. Programda orElse olmasının nedeni budur. Yalnızca araç çağrılarından oluşan bir yanıtın metni yoktur.
  • usage() de bir Optional'dir. Sunucu gönderdiğinde ifPresent bunu yazdırır.

Derlemenizin yaptığı gibi derleyip çalıştırın (mvn compile exec:java -Dexec.mainClass=FirstRequest 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:

java
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.

Java kodu, openai-java, CheapTokens uç noktası ve model
Kodunuz SDK ile konuşur; kimin yanıt vereceğine yalnızca temel URL karar verir

İlk karşılaşacağınız üç hata#

Eşleştir

Belirtiyi nedene eşleştirin

  • 401 Unauthorizedanahtar boş veya yanlış, ya da OPENAI_BASE_URL ayarlanmadığı için istek api.openai.com'a gitti
  • 404 Not Foundtemel URL'de /v1 eksik, ya da model kimliği mevcut değil
  • finish_reason length diyormaxCompletionTokens yanı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 İstek başına 1.000 istek OpenRouter, 1.000 istek
GLM-5.3-Flash $0.000016 $0.016 $0.0316
DeepSeek-V4-Flash $0.000033 $0.033 $0.056
MiniMax-M2.7 $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

ModelGünlükAylık
GLM-5.3-Flash$0.032$0.96
DeepSeek-V4-Flash$0.066$1.98
MiniMax-M2.7$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-org/GLM-5.3-Flash) 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.