API وSDKدليل
أول طلب في Java باستخدام openai-java: عنوان URL الأساسي، المفتاح، الاستهلاك
برنامج Java 8+ قابل للتشغيل: openai-java موجّه إلى CheapTokens، إكمال محادثة واحد، وطباعة الإجابة وfinish_reason واستهلاك الرموز.

في هذه الصفحة
لاستدعاء CheapTokens من Java، احتفظ بحزمة SDK الرسمية openai-java وغيّر ثلاثة أشياء: عنوان URL الأساسي (https:/)، ومفتاح API، ومعرّف النموذج، الذي يُمرَّر كـ String عادي. يرسل البرنامج أدناه إكمال محادثة واحدًا ويطبع الإجابة وfinish_reason واستهلاك الرموز. يحتاج إلى Java 8 أو أحدث.
إذا كان فريقك يملك بالفعل خدمة Spring تتحدث إلى OpenAI، فهذا هو الترحيل بأكمله: لا عميل جديد، ولا أصناف طلب جديدة.
أضف التبعية#
يعرض README الخاص بحزمة SDK (github.com/openai/openai-java، تم التحقق منه في 4 نوفمبر 2026) الإصدار 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 متغيرَي بيئة: 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"عنوان URL الأساسي الافتراضي لحزمة SDK هو https:/. تجاهل السطر الثاني وسيذهب طلبك إلى هناك، بمفتاح CheapTokens لا يعرفه. هذه إحدى طرق الحصول على 401 عند التشغيل الأول. لمعرفة أين تحتفظ بالمفتاح وكيف تُبقيه خارج 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()));
}
}تستحق بضعة أسطر نظرة ثانية.
.. تستخدم أمثلة README الخاصة بحزمة SDK ثوابت مُنمّطة مثلmodel("deepseek- ai/ DeepSeek- V4- Flash- 0731") ChatModel.، لكن المُنشئ يملك أيضًا تحميلًا زائدًاGPT_ 5_ 2 model(String)، لذا يعمل أي معرّف. استخدم المعرّف الكامل من وثائق CheapTokens: الاسم المختصرdeepseek-هو كيفية وسم الأسعار على الموقع؛ أما API فيريد المعرّف الكامل مع بادئةv4- flash- 0731 deepseek-ai/. لست متأكدًا من معرّف؟ اعرض النماذج باستخدام GET /v1/models... حدّ أعلى لطول الإجابة، كـmaxCompletionTokens(300L) long. يسمح DeepSeek-V4-Flash بما يصل إلى 32,768 رمز إخراج لكل إجابة، لذا فإن 300 هنا خيار لإبقاء العرض التوضيحي قصيرًا، وليس حدًّا للنموذج.content()هوOptional. لهذا يملك البرنامجorElse. الرد المكوّن من استدعاءات أدوات فقط لا يحتوي على نص.usage()هوOptionalأيضًا. يطبعهifPresentعندما يرسله الخادم.
قم بتجميعه وتشغيله بالطريقة التي يفعلها بناؤك (mvn compile exec:java -، أو مهمة JavaExec في Gradle). يجب أن تحصل على شرح لرمز، ثم سطر finish_reason: … يحتوي على stop، ثم سطر يحتوي على عدد رموز الإدخال والإخراج. إذا قال 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 ينتهي به المطاف في مستودعك.

ثلاثة أخطاء ستواجهها أولًا#
طابق الأزواج
طابق العَرَض مع السبب
اضغط على عنصر من اليسار، ثم على زوجه
- 401 Unauthorizedالمفتاح فارغ أو خاطئ، أو ذهب الطلب إلى api.openai.com لأن
OPENAI_BASE_URLغير معيّن - 404 Not Foundعنوان URL الأساسي يفتقد
/v1، أو معرّف النموذج غير موجود - finish_reason يقول length
maxCompletionTokensأقل مما تحتاجه الإجابة
من السهل تفويت متغير بيئة فارغ في IDE: قد لا يرث تكوين تشغيل بدأ من شريط الأدوات المتغيرات التي صدّرتها في الطرفية. إذا كان المفتاح "معيَّنًا" لكنك ما زلت تحصل على 401، فأضف المتغيرات إلى تكوين التشغيل. المزيد عن هذه الرموز: API 401 أو 404: المفتاح، عنوان URL الأساسي، معرّف النموذج.
تكلفة طلب واحد#
لأنك تطبع usage، يمكنك تسعير الطلب قبل توسيعه. لنفترض أن خدمتك ترسل نحو 200 رمز إدخال وتحصل على 300 في المقابل. بأسعار اليوم يكلّف ذلك الطلب $0.000033 على DeepSeek-V4-Flash. يُحتسب الإدخال والإخراج معًا، وإجمالًا هذا أرخص من 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 رمز إخراج لكل طلب. الأسعار لكل مليون رمز حالية وتتغير مع تعريفاتنا؛ يعرض عمود OpenRouter أسعارًا مرجعية لنفس حجم العمل.
الآن أدخل حركة المرور الخاصة بك. اسحب المنزلقات إلى الأرقام من أول سطر usage طبعته:
حاسبة التكلفة
خدمة دعم بـ 2,000 طلب يوميًا
رموز الإدخال لكل طلب: 200 · رموز الإخراج لكل طلب: 300 · الطلبات يوميًا: 2,000
| النموذج | يوميًا | شهريًا |
|---|---|---|
| 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 وسعرًا واحدًا في أي ساعة من اليوم؛ GLM-5.3-Flash (zai-) بديل مباشر في نفس البرنامج: غيّر المعرّف، لا شيء آخر. الأسعار الحالية لجميع النماذج على صفحة الأسعار، وتُظهر الوثائق نفس الطلب بلغات أخرى. هل تفعل هذا في Go؟ راجع نسخة openai-go.



