APIとSDKガイド
openai-java で Java の最初のリクエスト: ベース URL、キー、使用量
実行可能な Java 8+ プログラム: CheapTokens を指す openai-java、1 回のチャット補完、そして回答、finish_reason、トークン使用量を出力します。

Java から CheapTokens を呼び出すには、公式の openai-java SDK を使い、3 つの点を変更します。ベース URL(https:/)、API キー、そしてモデル id です。モデル id はプレーンな String として渡します。以下のプログラムはチャット補完を 1 回送信し、回答、finish_reason、トークン使用量を出力します。Java 8 以降が必要です。
チームにすでに OpenAI と通信する Spring サービスがあるなら、移行はこれだけです。新しいクライアントも、新しいリクエストクラスも不要です。
依存関係を追加する#
SDK の README(github.com/openai/openai-java、2026 年 11 月 4 日確認)には、バージョン 4.99.0、グループ com.openai、アーティファクト openai-java と記載されています。README にはリリース日が書かれていないため、これをコピーする前にリポジトリで最新バージョンを確認してください。
ビルドに openai-java を追加する
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")フレームワーク非依存のアーティファクトは Java 8 以降で動作するため、古い企業の JDK でも問題ありません。
キーとベース URL をコードの外で設定する#
SDK は 2 つの環境変数 OPENAI_API_KEY と OPENAI_BASE_URL を読み取ります。OpenAIOkHttpClient. は両方を取得するため、キーがソースファイルに残ることはありません。(システムプロパティ openai.apiKey と openai.baseUrl も使用でき、環境変数より優先されます。)
export OPENAI_API_KEY="your-cheaptokens-key"
export OPENAI_BASE_URL="https://api.cheaptokens.dev/v1"SDK のデフォルトのベース URL は https:/ です。2 行目を省略すると、リクエストはそこへ送られ、CheapTokens のキーは認識されません。これが初回実行で 401 になる原因の 1 つです。キーの保管場所と git に含めない方法については、API キーを安全に保存する を参照してください。

プログラム#
FirstRequest. を作成します:
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()));
}
}いくつかの行はもう一度見る価値があります。
.。 SDK の README の例ではmodel("deepseek- ai/ DeepSeek- V4- Flash- 0731") ChatModel.のような型付き定数を使っていますが、ビルダーにはGPT_ 5_ 2 model(String)のオーバーロードもあるため、任意の id が使えます。CheapTokens のドキュメントにある完全な id を使用してください。短い名前deepseek-はサイト上で価格が表示される際の名前で、API はv4- flash- 0731 deepseek-ai/プレフィックス付きの完全な id を要求します。id がわからない場合は、GET /v1/models でモデルを一覧表示する を参照してください。.。 回答の長さの上限をmaxCompletionTokens(300L) longとして指定します。DeepSeek-V4-Flash は 1 回答あたり最大 32,768 出力トークンを許可しているため、ここでの 300 はデモを短く保つための選択であり、モデルの制限ではありません。content()はOptionalです。 そのためプログラムにはorElseがあります。ツール呼び出しのみで構成された応答にはテキストがありません。usage()もOptionalです。 サーバーが送信した場合、ifPresentがそれを出力します。
ビルドの方法でコンパイルして実行します(mvn compile exec:java -、または Gradle の JavaExec タスク)。トークンの説明が出力され、次に stop を含む finish_reason: … の行、そして入力トークン数と出力トークン数の行が出力されるはずです。finish_reason が length と表示する場合、回答が 300 トークンの上限に達して切り詰められています。数値を増やしてください(その理由)。
usage() はプロンプト、補完、合計のトークン数を返します(promptTokens()、completionTokens()、totalTokens())。
ビルダーで値を明示的に設定する#
テストや複数のクライアントを持つサービスでは、明示的な値が必要になることがあります。同じクライアントを手動で構築します:
OpenAIClient client = OpenAIOkHttpClient.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.baseUrl("https://api.cheaptokens.dev/v1")
.build();この行以降はすべて、パラメータと create 呼び出しを含め、上記とまったく同じままです。ここでもキーは環境から読み取ってください。.java ファイル内の文字列リテラルはリポジトリに残ってしまいます。

最初に出会う 3 つのエラー#
ペアを合わせる
症状と原因を照合する
左の項目をタップしてから、そのペアをタップ
- 401 Unauthorizedキーが空か間違っている、または
OPENAI_BASE_URLが設定されていないためリクエストが api.openai.com に送られた - 404 Not Foundベース URL に
/v1がない、またはモデル id が存在しない - finish_reason が length を示す
maxCompletionTokensが回答に必要な量より少ない
空の環境変数は IDE で見落としがちです。ツールバーから起動した実行構成は、ターミナルでエクスポートした変数を継承しない場合があります。キーが「設定されている」のに 401 になる場合は、実行構成に変数を追加してください。これらのコードの詳細: API 401 または 404: キー、ベース URL、モデル id。
1 リクエストのコスト#
usage を出力しているため、スケールする前にリクエストの価格を見積もれます。サービスが約 200 入力トークンを送信し、300 を受け取るとします。現在の価格では、そのリクエストは DeepSeek-V4-Flash で $0.000033 かかります。入力と出力はまとめて課金され、合計では OpenRouter より安くなります。次の表は、当社のモデル全体で 1,000 リクエストの場合を繰り返しています:
| モデル | 入力 $/1M | 出力 $/1M | リクエストあたり | 1,000 リクエスト | OpenRouter、1,000 リクエスト |
|---|---|---|---|---|---|
| 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 |
リクエストあたり 200 入力トークンと 300 出力トークン。100万トークンあたりの価格は現行のもので、当社の料金体系に合わせて変動します。OpenRouter 列は同じワークロードの参考価格を示しています。
次に、自分のトラフィックを当てはめてください。スライダーを最初に出力された usage 行の数値に合わせます:
コスト計算機
1 日 2,000 リクエストのサポートサービス
リクエストあたりの入力トークン数: 200 · リクエストあたりの出力トークン数: 300 · 1日あたりのリクエスト数: 2,000
| モデル | 1日あたり | 1か月あたり |
|---|---|---|
| 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 |
回答あたりの余裕を増やしたい場合や、異なる形のワークロードには、DeepSeek-V4-Flash は 380K のコンテキストウィンドウと、1 日のどの時間でも同じ価格を提供します。GLM-5.3-Flash(zai-)は同じプログラムでそのまま置き換えられます。id を変更するだけで、他は何も変わりません。すべてのモデルの現在の価格は 料金ページ にあり、ドキュメント では同じリクエストを他の言語で示しています。Go で行う場合は、openai-go 版 を参照してください。



