Bumalik sa blog

API at SDKGabay

Unang request sa Java gamit ang openai-java: base URL, key, usage

Isang runnable na Java 8+ program: openai-java na nakaturo sa CheapTokens, isang chat completion, at ang sagot, finish_reason at token usage na naka-print.

Ni CheapTokens TeamNai-publish noong 5 min na pagbabasa

Java code na nagtuturo sa openai-java sa CheapTokens API
Sa pahinang ito
  1. Idagdag ang dependency
  2. Itakda ang key at base URL sa labas ng code
  3. Ang program
  4. Itakda ang mga value nang tahasan gamit ang builder
  5. Tatlong error na una mong makikita
  6. Magkano ang isang request

Para tumawag sa CheapTokens mula sa Java, panatilihin ang opisyal na openai-java SDK at baguhin ang tatlong bagay: ang base URL (https://api.cheaptokens.dev/v1), ang API key, at ang model id, na ipinapasa bilang plain String. Ang program sa ibaba ay nagpapadala ng isang chat completion at nagpi-print ng sagot, ang finish_reason at ang token usage. Kailangan nito ng Java 8 o mas bago.

Kung mayroon nang Spring service ang team mo na nakikipag-usap sa OpenAI, ito na ang buong migration: walang bagong client, walang bagong request classes.

Idagdag ang dependency#

Ang README ng SDK (github.com/openai/openai-java, sinuri noong 4 Nobyembre 2026) ay nagpapakita ng version 4.99.0, group com.openai, artifact openai-java. Hindi nagpi-print ang README ng release date, kaya tingnan ang repository para sa pinakabagong version bago kopyahin ito.

Idagdag ang openai-java sa iyong build

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")

Ang framework-neutral artifacts ay tumatakbo sa Java 8+, kaya ang mas lumang corporate JDK ay hindi blocker.

Itakda ang key at base URL sa labas ng code#

Ang SDK ay nagbabasa ng dalawang environment variables: OPENAI_API_KEY at OPENAI_BASE_URL. Kinukuha ng OpenAIOkHttpClient.fromEnv() ang dalawa, kaya hindi kailanman napupunta ang key sa iyong source files. (Gumagana rin ang system properties na openai.apiKey at openai.baseUrl at nauuna sa mga variable.)

bash
export OPENAI_API_KEY="your-cheaptokens-key"
export OPENAI_BASE_URL="https://api.cheaptokens.dev/v1"

Ang default na base URL ng SDK ay https://api.openai.com/v1. Laktawan ang pangalawang linya at doon pupunta ang iyong request, kasama ang CheapTokens key na hindi nito kilala. Isa iyon sa mga paraan para makakuha ng 401 sa unang run. Para sa kung saan itatago ang key at paano ito ilayo sa git, tingnan ang store an API key safely.

Ang dalawang environment variables at isang run command sa terminal
Ang key at base URL ay galing sa environment, hindi sa source file

Ang program#

Gumawa ng FirstRequest.java:

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()));
  }
}

May ilang linya na dapat tingnan muli.

  • .model("deepseek-ai/DeepSeek-V4-Flash-0731"). Gumagamit ang mga halimbawa sa README ng SDK ng mga typed constant tulad ng ChatModel.GPT_5_2, pero mayroon ding model(String) overload ang builder, kaya gumagana ang anumang id. Gamitin ang buong id mula sa CheapTokens docs: ang maikling pangalan na deepseek-v4-flash-0731 ay kung paano nilalagyan ng label ang mga presyo sa site; kailangan ng API ang buong id na may deepseek-ai/ prefix. Hindi sigurado sa id? List models with GET /v1/models.
  • .maxCompletionTokens(300L). Isang ceiling sa haba ng sagot, bilang long. Ang DeepSeek-V4-Flash ay nagpapahintulot ng hanggang 32,768 output tokens bawat sagot, kaya ang 300 dito ay isang pagpipilian para mapanatiling maikli ang demo, hindi limitasyon ng modelo.
  • Ang content() ay isang Optional. Kaya may orElse ang program. Ang reply na puro tool calls lang ay walang text.
  • Ang usage() ay isang Optional din. Ini-print ito ng ifPresent kapag ipinadala ito ng server.

I-compile at i-run ito sa paraan ng iyong build (mvn compile exec:java -Dexec.mainClass=FirstRequest, o isang JavaExec task sa Gradle). Dapat makuha mo ang paliwanag ng isang token, pagkatapos ay isang linya na finish_reason: … na may stop sa loob, pagkatapos ay isang linya na may input at output token counts. Kung ang finish_reason ay nagsasabing length, naabot ng sagot ang iyong 300-token cap at naputol: taasan ang numero (bakit nangyayari iyon).

Ang usage() ay nagbabalik ng prompt, completion at total token counts (promptTokens(), completionTokens(), totalTokens()).

Itakda ang mga value nang tahasan gamit ang builder#

Ang mga test, o isang service na may maraming client, ay minsang nangangailangan ng tahasang values. Ang parehong client, na ginawa nang manu-mano:

java
OpenAIClient client = OpenAIOkHttpClient.builder()
    .apiKey(System.getenv("OPENAI_API_KEY"))
    .baseUrl("https://api.cheaptokens.dev/v1")
    .build();

Lahat ng sumusunod sa linyang ito, ang params at ang create call, ay mananatiling eksaktong tulad ng nasa itaas. Patuloy na basahin ang key mula sa environment kahit dito; ang string literal sa isang .java file ay napupunta sa iyong repository.

Java code, openai-java, ang CheapTokens endpoint at ang modelo
Nakikipag-usap ang iyong code sa SDK; ang base URL lang ang nagtatakda kung sino ang sasagot

Tatlong error na una mong makikita#

Itugma ang mga pares

Itugma ang sintomas sa sanhi

  • 401 Unauthorizedwalang laman o mali ang key, o napunta ang request sa api.openai.com dahil hindi nakatakda ang OPENAI_BASE_URL
  • 404 Not Foundkulang ang base URL ng /v1, o wala ang model id
  • finish_reason says lengthmas mababa ang maxCompletionTokens kaysa sa kailangan ng sagot

Madaling makaligtaan ang walang laman na environment variable sa isang IDE: ang run configuration na sinimulan mula sa toolbar ay maaaring hindi magmana ng mga variable na in-export mo sa terminal. Kung "nakatakda" ang key pero nakakakuha ka pa rin ng 401, idagdag ang mga variable sa run configuration. Higit pa sa mga code na ito: API 401 or 404: key, base URL, model id.

Magkano ang isang request#

Dahil ini-print mo ang usage, maaari mong presyuhan ang request bago mo ito palakihin. Sabihin nating nagpapadala ang iyong service ng mga 200 input tokens at nakakakuha ng 300 pabalik. Sa mga presyo ngayon, ang request na iyon ay nagkakahalaga ng $0.000033 sa DeepSeek-V4-Flash. Sabay na sinisingil ang input at output, at sa kabuuan mas mura ito kaysa sa OpenRouter. Inuulit ito ng table para sa 1,000 requests sa aming mga modelo:

Modelo Bawat kahilingan 1,000 mga kahilingan OpenRouter, 1,000 mga kahilingan
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

200 input at 300 output na token bawat kahilingan. Ang mga presyo kada 1M token ay kasalukuyan at nagbabago kasabay ng aming mga taripa; ang column ng OpenRouter ay nagpapakita ng reference na presyo para sa parehong workload.

Ngayon ilagay ang sarili mong traffic. Hilahin ang mga slider sa mga numero mula sa iyong unang na-print na usage line:

Calculator ng gastos

Isang support service na may 2,000 requests kada araw

Mga input token bawat kahilingan: 200 · Mga output token bawat kahilingan: 300 · Mga kahilingan bawat araw: 2,000

ModeloBawat arawBawat buwan
GLM-5.3-Flash$0.032$0.96
DeepSeek-V4-Flash$0.066$1.98
MiniMax-M2.7$0.11$3.30

Para sa mas maraming espasyo bawat sagot o ibang hugis ng workload, binibigyan ka ng DeepSeek-V4-Flash ng 380K context window at isang presyo sa anumang oras ng araw; ang GLM-5.3-Flash (zai-org/GLM-5.3-Flash) ay drop-in replacement sa parehong program: palitan ang id, wala nang iba. Ang kasalukuyang presyo para sa lahat ng modelo ay nasa pricing page, at ang docs ay nagpapakita ng parehong request sa ibang mga wika. Ginagawa ito sa Go? Tingnan ang the openai-go version.