ব্লগে ফিরে যান

API ও SDKগাইড

openai-java দিয়ে Java-তে প্রথম রিকোয়েস্ট: বেস URL, কী, ব্যবহার

একটি রানযোগ্য Java 8+ প্রোগ্রাম: CheapTokens-এ নির্দেশিত openai-java, একটি চ্যাট কমপ্লিশন, এবং উত্তর, finish_reason এবং টোকেন ব্যবহার প্রিন্ট করা।

CheapTokens Team দ্বারাপ্রকাশিত হয়েছে 8 মিনিট পড়ার সময়

Java কোড যা openai-java-কে CheapTokens API-তে নির্দেশ করে
এই পৃষ্ঠায়
  1. ডিপেন্ডেন্সি যোগ করুন
  2. কোডের বাইরে কী এবং বেস URL সেট করুন
  3. প্রোগ্রাম
  4. বিল্ডার দিয়ে মানগুলি স্পষ্টভাবে সেট করুন
  5. প্রথমে আপনি যে তিনটি ত্রুটি পাবেন
  6. একটি রিকোয়েস্টের খরচ

Java থেকে CheapTokens কল করতে, অফিসিয়াল openai-java SDK রাখুন এবং তিনটি জিনিস পরিবর্তন করুন: বেস URL (https://api.cheaptokens.dev/v1), API কী, এবং মডেল আইডি, যা একটি সাধারণ String হিসেবে পাস করা হয়। নিচের প্রোগ্রামটি একটি চ্যাট কমপ্লিশন পাঠায় এবং উত্তর, finish_reason এবং টোকেন ব্যবহার প্রিন্ট করে। এটির জন্য Java 8 বা তার পরবর্তী সংস্করণ প্রয়োজন।

যদি আপনার দল ইতিমধ্যে একটি Spring সার্ভিস রাখে যা OpenAI-এর সাথে কথা বলে, তাহলে এটাই সম্পূর্ণ মাইগ্রেশন: কোনো নতুন ক্লায়েন্ট নেই, কোনো নতুন রিকোয়েস্ট ক্লাস নেই।

ডিপেন্ডেন্সি যোগ করুন#

SDK-এর README (github.com/openai/openai-java, ৪ নভেম্বর ২০২৬-এ যাচাইকৃত) সংস্করণ 4.99.0, গ্রুপ com.openai, আর্টিফ্যাক্ট openai-java দেখায়। README কোনো রিলিজ তারিখ প্রিন্ট করে না, তাই এটি কপি করার আগে সর্বশেষ সংস্করণের জন্য রিপোজিটরি দেখুন।

আপনার বিল্ডে openai-java যোগ করুন

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

ফ্রেমওয়ার্ক-নিরপেক্ষ আর্টিফ্যাক্টগুলি Java 8+ এ চলে, তাই একটি পুরনো কর্পোরেট JDK বাধা নয়।

কোডের বাইরে কী এবং বেস URL সেট করুন#

SDK দুটি এনভায়রনমেন্ট ভেরিয়েবল পড়ে: OPENAI_API_KEY এবং OPENAI_BASE_URL। OpenAIOkHttpClient.fromEnv() উভয়ই তুলে নেয়, তাই কী কখনো আপনার সোর্স ফাইলে পৌঁছায় না। (সিস্টেম প্রপার্টি openai.apiKey এবং openai.baseUrlও কাজ করে এবং ভেরিয়েবলগুলির উপর অগ্রাধিকার পায়।)

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

SDK-এর ডিফল্ট বেস URL হল https://api.openai.com/v1। দ্বিতীয় লাইনটি এড়িয়ে যান এবং আপনার রিকোয়েস্ট সেখানে যায়, একটি CheapTokens কী দিয়ে যা এটি জানে না। এটি প্রথম রানে 401 পাওয়ার একটি উপায়। কী কোথায় রাখবেন এবং কীভাবে এটি git থেকে দূরে রাখবেন, দেখুন একটি API কী নিরাপদে সংরক্ষণ করুন।

টার্মিনালে দুটি এনভায়রনমেন্ট ভেরিয়েবল এবং একটি রান কমান্ড
কী এবং বেস URL পরিবেশ থেকে আসে, সোর্স ফাইল থেকে নয়

প্রোগ্রাম#

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

কয়েকটি লাইন দ্বিতীয়বার দেখার যোগ্য।

  • .model("deepseek-ai/DeepSeek-V4-Flash-0731")। SDK-এর README উদাহরণগুলি ChatModel.GPT_5_2 এর মতো টাইপড কনস্ট্যান্ট ব্যবহার করে, কিন্তু বিল্ডারের একটি model(String) ওভারলোডও আছে, তাই যেকোনো আইডি কাজ করে। CheapTokens ডক্স থেকে সম্পূর্ণ আইডি ব্যবহার করুন: সংক্ষিপ্ত নাম deepseek-v4-flash-0731 হল সাইটে দাম কীভাবে লেবেল করা হয়; API deepseek-ai/ প্রিফিক্স সহ সম্পূর্ণ আইডি চায়। একটি আইডি সম্পর্কে নিশ্চিত নন? GET /v1/models দিয়ে মডেল তালিকা করুন।
  • .maxCompletionTokens(300L)। উত্তর দৈর্ঘ্যের একটি সীমা, একটি long হিসেবে। DeepSeek-V4-Flash প্রতি উত্তরে 32,768 আউটপুট টোকেন পর্যন্ত অনুমতি দেয়, তাই এখানে 300 ডেমো সংক্ষিপ্ত রাখার একটি পছন্দ, মডেলের সীমা নয়।
  • content() একটি Optional। এজন্যই প্রোগ্রামে orElse আছে। শুধুমাত্র টুল কল দিয়ে তৈরি একটি উত্তর কোনো টেক্সট নেই।
  • usage()ও একটি Optional। সার্ভার এটি পাঠালে ifPresent এটি প্রিন্ট করে।

আপনার বিল্ড যেভাবে করে সেভাবে কম্পাইল এবং রান করুন (mvn compile exec:java -Dexec.mainClass=FirstRequest, বা Gradle-এ একটি JavaExec টাস্ক)। আপনার একটি টোকেনের ব্যাখ্যা পাওয়া উচিত, তারপর finish_reason: … সহ একটি লাইন যাতে stop আছে, তারপর ইনপুট এবং আউটপুট টোকেন গণনা সহ একটি লাইন। যদি finish_reason বলে length, উত্তরটি আপনার 300-টোকেন ক্যাপে পৌঁছেছে এবং কাটা হয়েছে: সংখ্যাটি বাড়ান (কেন এটি ঘটে)।

usage() প্রম্পট, কমপ্লিশন এবং মোট টোকেন গণনা ফেরত দেয় (promptTokens(), completionTokens(), totalTokens())।

বিল্ডার দিয়ে মানগুলি স্পষ্টভাবে সেট করুন#

পরীক্ষা, বা একাধিক ক্লায়েন্ট সহ একটি সার্ভিস, কখনও কখনও স্পষ্ট মান প্রয়োজন। একই ক্লায়েন্ট, হাতে তৈরি:

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

এই লাইনের পরে সবকিছু, প্যারামস এবং create কল, উপরের মতোই থাকে। এমনকি এখানেও পরিবেশ থেকে কী পড়া চালিয়ে যান; একটি .java ফাইলে একটি স্ট্রিং লিটারেল আপনার রিপোজিটরিতে শেষ হয়।

Java কোড, openai-java, CheapTokens এন্ডপয়েন্ট এবং মডেল
আপনার কোড SDK-এর সাথে কথা বলে; শুধুমাত্র বেস URL সিদ্ধান্ত নেয় কে উত্তর দেবে

প্রথমে আপনি যে তিনটি ত্রুটি পাবেন#

জোড়া মেলান

লক্ষণটি কারণের সাথে মেলান

  • 401 Unauthorizedকী খালি বা ভুল, অথবা OPENAI_BASE_URL সেট না থাকায় রিকোয়েস্টটি api.openai.com-এ গেছে
  • 404 Not Foundবেস URL-এ /v1 নেই, অথবা মডেল আইডি বিদ্যমান নেই
  • finish_reason বলে lengthmaxCompletionTokens উত্তরের প্রয়োজনের চেয়ে কম

একটি IDE-তে একটি খালি এনভায়রনমেন্ট ভেরিয়েবল মিস করা সহজ: টুলবার থেকে শুরু করা একটি রান কনফিগারেশন টার্মিনালে আপনি যে ভেরিয়েবলগুলি এক্সপোর্ট করেছেন তা উত্তরাধিকারসূত্রে নাও পেতে পারে। যদি কী "সেট করা থাকে" কিন্তু আপনি এখনও 401 পান, রান কনফিগারেশনে ভেরিয়েবলগুলি যোগ করুন। এই কোডগুলি সম্পর্কে আরও: API 401 বা 404: কী, বেস URL, মডেল আইডি।

একটি রিকোয়েস্টের খরচ#

যেহেতু আপনি usage প্রিন্ট করেন, আপনি স্কেল করার আগে রিকোয়েস্টের দাম নির্ধারণ করতে পারেন। ধরুন আপনার সার্ভিস প্রায় 200 ইনপুট টোকেন পাঠায় এবং 300 ফেরত পায়। আজকের দামে সেই রিকোয়েস্টের খরচ DeepSeek-V4-Flash-এ $0.000033। ইনপুট এবং আউটপুট একসাথে বিল করা হয়, এবং মোটে এটি OpenRouter-এর চেয়ে সস্তা। টেবিলটি আমাদের মডেল জুড়ে 1,000 রিকোয়েস্টের জন্য এটি পুনরাবৃত্তি করে:

মডেল প্রতি অনুরোধে ১,০০০টি অনুরোধ OpenRouter, ১,০০০টি অনুরোধ
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

প্রতি অনুরোধে ২০০ ইনপুট এবং ৩০০ আউটপুট টোকেন। প্রতি 1M টোকেনের দাম বর্তমান এবং আমাদের ট্যারিফের সাথে পরিবর্তিত হয়; OpenRouter কলামটি একই ওয়ার্কলোডের জন্য রেফারেন্স মূল্য দেখায়।

এখন আপনার নিজের ট্রাফিক প্লাগ ইন করুন। স্লাইডারগুলিকে আপনার প্রথম প্রিন্ট করা usage লাইনের সংখ্যাগুলিতে টানুন:

খরচ ক্যালকুলেটর

প্রতিদিন 2,000 রিকোয়েস্ট সহ একটি সাপোর্ট সার্ভিস

প্রতি অনুরোধে ইনপুট টোকেন: ২০০ · প্রতি অনুরোধে আউটপুট টোকেন: ৩০০ · প্রতিদিন অনুরোধ: ২,০০০

মডেলপ্রতিদিনপ্রতি মাসে
GLM-5.3-Flash$0.032$0.96
DeepSeek-V4-Flash$0.066$1.98
MiniMax-M2.7$0.11$3.30

প্রতি উত্তরে আরও জায়গা বা ভিন্ন ধরনের ওয়ার্কলোডের জন্য, DeepSeek-V4-Flash আপনাকে 380K কনটেক্সট উইন্ডো এবং দিনের যেকোনো সময়ে একই দাম দেয়; GLM-5.3-Flash (zai-org/GLM-5.3-Flash) একই প্রোগ্রামে একটি ড্রপ-ইন প্রতিস্থাপন: আইডি পরিবর্তন করুন, আর কিছু নয়। সমস্ত মডেলের বর্তমান দাম প্রাইসিং পেজে, এবং ডক্স অন্যান্য ভাষায় একই রিকোয়েস্ট দেখায়। এটি Go-তে করছেন? দেখুন openai-go সংস্করণ।