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

API ও SDKগাইড

openai-go দিয়ে Go-তে প্রথম অনুরোধ: base URL, কী, usage

একটি সম্পূর্ণ Go প্রোগ্রাম যা openai-go-এর মাধ্যমে একটি CheapTokens মডেল কল করে এবং উত্তর, finish_reason এবং টোকেন usage প্রিন্ট করে, পুনরায় চেষ্টা এবং টাইমআউট সহ।

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

কভার: openai-go SDK দিয়ে Go-তে প্রথম অনুরোধ, go run এবং উত্তর, finish_reason এবং usage সহ একটি টার্মিনাল
এই পৃষ্ঠায়
  1. শুরু করার আগে আপনার যা প্রয়োজন
  2. সম্পূর্ণ প্রোগ্রাম
  3. উত্তর, finish_reason এবং usage পড়ুন
  4. পুনরায় চেষ্টা এবং টাইমআউট: তিনটি ভিন্ন সীমা
  5. এই ধরনের এক হাজার কলের খরচ
  6. যদি এটি কাজ না করে

আপনার কাছে ইতিমধ্যেই OpenAI-স্টাইলের API-এর সাথে কথা বলে এমন Go কোড আছে, অথবা আপনি কিছু লিখতে চলেছেন। এটি CheapTokens-এ পাঠাতে আপনি ক্লায়েন্টে দুটি অপশন এবং একটি স্ট্রিং, মডেল আইডি পরিবর্তন করবেন। SDK একই থাকে: অফিসিয়াল openai-go প্যাকেজ, v3।

নিচে সম্পূর্ণ প্রোগ্রাম, তারপর প্রতিটি লাইন কী করে, উত্তর এবং টোকেন গণনা কীভাবে পড়বেন, এবং কীভাবে একটি আটকে থাকা অনুরোধ আপনার সার্ভিসকে ঝুলিয়ে রাখা থেকে বিরত রাখবেন। সংস্করণগুলি 3 নভেম্বর 2026-এ openai-go README-এর সাথে যাচাই করা হয়েছে: সেই পৃষ্ঠার সর্বশেষ ট্যাগ হল v3.91.1, এবং এটির জন্য Go 1.26 বা নতুনতর প্রয়োজন।

শুরু করার আগে আপনার যা প্রয়োজন#

  • Go 1.26 বা নতুনতর। Go 1.25-এ v3.74.0 পিন করুন; Go 1.22–1.24-এ v3.44.0 পিন করুন (README বলছে পুরোনো লাইনে কোনো নিশ্চিত ফিক্স পায় না)।
  • একটি CheapTokens API কী। এটি একটি এনভায়রনমেন্ট ভেরিয়েবলে রাখুন, সোর্স ফাইলে নয়।
  • API ঠিকানা: https://api.cheaptokens.dev/v1। এটি OpenAI Chat Completions ফরম্যাটে কথা বলে, তাই openai-go কোনো র্যাপার ছাড়াই কাজ করে। ডক্স-এ একই ঠিকানা এবং কী পৃষ্ঠা আছে।
  • একটি মডেল আইডি। আমরা deepseek-ai/DeepSeek-V4-Flash-0731 ব্যবহার করি: 380K কনটেক্সট এবং এক উত্তরে সর্বোচ্চ 32,768 টোকেন। সম্পূর্ণ আইডি ব্যবহার করুন; মূল্য সারণীর সংক্ষিপ্ত নাম API গ্রহণ করে না।

ধাপে ধাপে

প্রকল্প সেট আপ করুন

SDK ইনস্টল করুন

একটি খালি ফোল্ডারে:

bash
go mod init example.com/first-request
go get -u 'github.com/openai/openai-go/[email protected]'

ইমপোর্ট পাথ github.com/openai/openai-go/v3, প্যাকেজের নাম openai।

কী এনভায়রনমেন্টে রাখুন

bash
export CHEAPTOKENS_API_KEY="paste-your-key-here"

Windows PowerShell-এ: $env:CHEAPTOKENS_API_KEY = "paste-your-key-here"। প্লেসহোল্ডারটি আসল কী নয়।

main.go তৈরি করুন এবং চালান

পরবর্তী বিভাগের প্রোগ্রামটি main.go-এ পেস্ট করুন, তারপর go run . চালান।

সম্পূর্ণ প্রোগ্রাম#

go
package main

import (
	"context"
	"fmt"
	"log"
	"os"
	"time"

	"github.com/openai/openai-go/v3"
	"github.com/openai/openai-go/v3/option"
)

func main() {
	client := openai.NewClient(
		option.WithBaseURL("https://api.cheaptokens.dev/v1"),
		option.WithAPIKey(os.Getenv("CHEAPTOKENS_API_KEY")),
		option.WithMaxRetries(2),
		option.WithRequestTimeout(30*time.Second),
	)

	ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
	defer cancel()

	resp, err := client.Chat.Completions.New(ctx, openai.ChatCompletionNewParams{
		Model: "deepseek-ai/DeepSeek-V4-Flash-0731",
		Messages: []openai.ChatCompletionMessageParamUnion{
			openai.UserMessage("Explain in two sentences what a token is."),
		},
	})
	if err != nil {
		log.Fatal(err)
	}
	if len(resp.Choices) == 0 {
		log.Fatal("no choices in the response")
	}

	fmt.Println(resp.Choices[0].Message.Content)
	fmt.Println("finish_reason:", resp.Choices[0].FinishReason)
	fmt.Println("input tokens:", resp.Usage.PromptTokens)
	fmt.Println("output tokens:", resp.Usage.CompletionTokens)
	fmt.Println("total tokens:", resp.Usage.TotalTokens)
}
একটি অনুরোধের পথ: এনভায়রনমেন্ট থেকে কী, openai-go ক্লায়েন্ট, চ্যাট কমপ্লিশন, তারপর content, finish_reason এবং usage
প্রোগ্রামটি কী করে, ক্রমানুসারে

যে অংশগুলি গুরুত্বপূর্ণ:

  • option.WithBaseURL(...) হল একমাত্র লাইন যা SDK-কে OpenAI থেকে CheapTokens-এ সরায়। ডক্সে যেমন আছে ঠিক তেমন ঠিকানা ব্যবহার করুন।
  • option.WithAPIKey(os.Getenv(...)) স্পষ্টভাবে কী পাস করে। এটি ছাড়া ক্লায়েন্ট OPENAI_API_KEY পড়ে, যা বিদ্যমান কোড পোর্ট করার সময় সুবিধাজনক: সেই ভেরিয়েবলটি একটি CheapTokens কী-তে সেট করুন এবং কোডে কী পরিবর্তনের প্রয়োজন নেই। OPENAI_BASE_URL-এর ক্ষেত্রেও একই কথা, কিন্তু একটি স্পষ্ট WithBaseURL এটিকে ওভাররাইড করে, তাই উভয়ই থাকলে কোনো আশ্চর্য নেই।
  • Model SDK-তে একটি সাধারণ স্ট্রিং (ChatModel হল string-এর একটি উপনাম), তাই যেকোনো মডেল আইডি কাজ করে, শুধু README-তে দেখানো ধ্রুবকগুলি নয়।
  • openai.UserMessage(...) একটি ব্যবহারকারী টার্ন। README উদাহরণ DeveloperMessage এবং একটি GPT ধ্রুবক ব্যবহার করে; এখানে একটি ব্যবহারকারী বার্তা এবং একটি স্ট্রিং আইডি যথেষ্ট।

উত্তর, finish_reason এবং usage পড়ুন#

তিনটিই SDK ইতিমধ্যে আপনার জন্য পার্স করা ফিল্ড থেকে আসে:

  • resp.Choices[0].Message.Content হল টেক্সট (একটি string)।
  • resp.Choices[0].FinishReason-ও একটি string। stop মানে মডেল নিজে থেকে শেষ করেছে; length মানে উত্তর টোকেন সীমায় পৌঁছে কাটা পড়েছে। যদি আপনি length দেখেন, কেন একটি উত্তর মাঝবাক্যে থামে পড়ুন।
  • resp.Usage-এ PromptTokens (আপনি যা পাঠিয়েছেন), CompletionTokens (মডেল যা লিখেছে) এবং TotalTokens, সব int64।

আউটপুটটি এরকম দেখাবে: উত্তর, তারপর একটি মান সহ finish_reason:, তারপর তিনটি টোকেন গণনা। সংখ্যাগুলি প্রতিটি রানে ভিন্ন হয়, তাই সেগুলি লগ করুন। এগুলিই আপনি যা জন্য অর্থ প্রদান করেন, এবং আউটপুট টোকেন বেশি ব্যয়বহুল দিক।

নিজে চেষ্টা করুনচেষ্টা করুন: মডেল বদলালে কী পরিবর্তন হয়?উত্তর দেখান

Model স্ট্রিংটি zai-org/GLM-5.3-Flash-এ পরিবর্তন করুন এবং আবার চালান। প্রোগ্রামে আর কিছুই নড়ে না। উত্তর টেক্সট এবং তিনটি usage সংখ্যা ভিন্ন হবে, যা আপনার নিজের প্রম্পটে দুটি মডেল তুলনা করার দ্রুততম উপায়। GLM-5.3-Flash-এর 390K কনটেক্সট এবং এক উত্তরে সর্বোচ্চ 8,192 টোকেন আছে।

পুনরায় চেষ্টা এবং টাইমআউট: তিনটি ভিন্ন সীমা#

এখানেই Go সার্ভিসগুলি সাধারণত ক্ষতিগ্রস্ত হয়: ডিফল্টভাবে SDK-তে কোনো টাইমআউট নেই, তাই একটি আটকে থাকা সংযোগ চিরকাল অপেক্ষা করতে পারে। তিনটি সেটিং এটি ঠিক করে, এবং তারা বিভিন্ন স্তরে কাজ করে:

  • option.WithMaxRetries(2): SDK সংযোগ ত্রুটি, 408, 409, 429 এবং 5xx একটি সংক্ষিপ্ত সূচকীয় অপেক্ষার সাথে পুনরায় চেষ্টা করে। দুটি পুনরায় চেষ্টা ইতিমধ্যে ডিফল্ট; 0 পুনরায় চেষ্টা বন্ধ করে। আপনি এটি ক্লায়েন্টে বা একটি একক কলে সেট করতে পারেন।
  • option.WithRequestTimeout(30*time.Second): একটি প্রচেষ্টার সীমা।
  • context ডেডলাইন: পুনরায় চেষ্টা এবং অপেক্ষা সহ সম্পূর্ণ কলের সীমা।

তাই 2টি পুনরায় চেষ্টা সহ সর্বোচ্চ 3টি প্রচেষ্টা হতে পারে: 3 × 30 = 90 সেকেন্ড অপেক্ষা সবচেয়ে খারাপ ক্ষেত্রে, প্লাস প্রচেষ্টার মধ্যে সংক্ষিপ্ত বিরতি। দুই মিনিটের কনটেক্সট তা কভার করে। যদি আপনি একটি ওয়েব হ্যান্ডলারের জন্য 20 সেকেন্ডের মধ্যে কঠোর উত্তর নিয়ম চান, কনটেক্সট ছোট করুন, শুধু প্রতি-প্রচেষ্টা টাইমআউট নয়।

প্রোগ্রামের সেটিংসের সাথে ডিফল্ট তুলনা: উভয়েই দুটি পুনরায় চেষ্টা, ডিফল্টভাবে কোনো টাইমআউট নেই বনাম 30 সেকেন্ডের প্রচেষ্টা টাইমআউট
ডিফল্ট বনাম উপরের প্রোগ্রাম

এই সংখ্যাগুলি বাছাই করার দীর্ঘ পটভূমির জন্য, একই পরামর্শের Python সংস্করণ OpenAI Python SDK টাইমআউট এবং পুনরায় চেষ্টা-এ আছে। যুক্তিটি Go-তে প্রযোজ্য।

এই ধরনের এক হাজার কলের খরচ#

ধরুন আপনি একটি ছোট সার্ভিস চালান যা দিনে 1,000টি অনুরোধ করে, প্রতিটিতে প্রায় 800 ইনপুট টোকেন এবং 300 আউটপুট টোকেন। deepseek-ai/DeepSeek-V4-Flash-0731-এ সেই দিনের খরচ $0.042 (1,000 × 800 ইনপুট টোকেন, 1,000 × 300 আউটপুট টোকেন)। সারণীটি আমাদের মডেলগুলিতে একই লোড দেখায়; মোট হিসাবে, ইনপুট এবং আউটপুট একসাথে, এটি OpenRouter-এর চেয়ে সস্তা।

মডেল প্রতি অনুরোধে ১,০০০টি অনুরোধ OpenRouter, ১,০০০টি অনুরোধ
GLM-5.3-Flash $0.000028 $0.028 $0.0517
DeepSeek-V4-Flash $0.000042 $0.042 $0.098
MiniMax-M2.7 $0.000085 $0.085 $1.02

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

আপনার নিজের সংখ্যা যোগ করুন। আপনার প্রথম রান আসল PromptTokens এবং CompletionTokens প্রিন্ট করে, তাই আপনাকে গড় অনুমান করতে হবে না:

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

একটি ছোট Go সার্ভিসের এক দিন

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

মডেলপ্রতিদিনপ্রতি মাসে
GLM-5.3-Flash$0.028$0.84
DeepSeek-V4-Flash$0.042$1.26
MiniMax-M2.7$0.085$2.55

মূল্য পৃষ্ঠা এবং মডেল পৃষ্ঠা-এ মূল্য লাইভ এবং প্রতি মডেলে একটি নির্দিষ্ট মূল্য ব্যবহার করে, কোনো পিক আওয়ার নেই।

যদি এটি কাজ না করে#

  • ত্রুটিতে 401 উল্লেখ আছে: কী খালি বা ভুল। os.Getenv একটি আনসেট ভেরিয়েবলের জন্য খালি স্ট্রিং ফেরত দেয়, তাই echo $CHEAPTOKENS_API_KEY পরীক্ষা করুন একই টার্মিনালে যেখানে আপনি go run . চালান।
  • ত্রুটিতে 404 বা অজানা মডেল উল্লেখ আছে: আইডি। এটি সম্পূর্ণ কপি করুন, deepseek-ai/ উপসর্গ সহ। আপনি মডেল তালিকা কল-এ আইডি তালিকাভুক্ত করতে পারেন।
  • go: module requires Go 1.26: আপনার টুলচেইন পুরোনো। উপরে দেখানো হিসাবে একটি পুরোনো SDK ট্যাগ পিন করুন।
  • কল আটকে যায় এবং তারপর ব্যর্থ হয়: এটি টাইমআউট তার কাজ করছে। প্রথমে নেটওয়ার্ক পথ পরীক্ষা করুন, তারপর WithRequestTimeout বাড়ান যদি মডেলের সত্যিই দীর্ঘ উত্তরের জন্য আরও সময় প্রয়োজন হয়।

যদি base URL ধারণাটি আপনার কাছে নতুন হয়, base_url কী এবং কীভাবে স্যুইচ করবেন কোনো কোড ছাড়াই এটি ব্যাখ্যা করে।