Go অ্যাপ্লিকেশনে Gemini API দিয়ে শুরু করুন

এই টিউটোরিয়ালটি Google AI Go SDK ব্যবহার করে কীভাবে আপনার Go অ্যাপ্লিকেশনের জন্য Gemini API অ্যাক্সেস করতে হয় তা প্রদর্শন করে।

এই টিউটোরিয়ালে, আপনি নিম্নলিখিতগুলি কীভাবে করবেন তা শিখবেন:

এছাড়াও, এই টিউটোরিয়ালটিতে উন্নত ব্যবহারের ক্ষেত্রে (যেমন এম্বেডিং এবং গণনা টোকেন ) এবং সেইসাথে বিষয়বস্তু তৈরি নিয়ন্ত্রণের বিকল্পগুলি রয়েছে।

পূর্বশর্ত

এই টিউটোরিয়ালটি অনুমান করে যে আপনি Go এর সাথে অ্যাপ্লিকেশন তৈরি করার সাথে পরিচিত।

এই টিউটোরিয়ালটি সম্পূর্ণ করতে, নিশ্চিত করুন যে আপনার উন্নয়ন পরিবেশ নিম্নলিখিত প্রয়োজনীয়তাগুলি পূরণ করে:

  • 1.20+ যান

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

Gemini API কল করার আগে, আপনাকে আপনার প্রকল্প সেট আপ করতে হবে, যার মধ্যে আপনার API কী সেট আপ করা, SDK প্যাকেজ ইনস্টল করা এবং মডেলটি শুরু করা অন্তর্ভুক্ত রয়েছে।

আপনার API কী সেট আপ করুন

Gemini API ব্যবহার করতে, আপনার একটি API কী প্রয়োজন। আপনার যদি ইতিমধ্যে একটি না থাকে তবে Google AI স্টুডিওতে একটি কী তৈরি করুন৷

একটি API কী পান

আপনার API কী সুরক্ষিত করুন

এটি দৃঢ়ভাবে সুপারিশ করা হয় যে আপনি আপনার সংস্করণ নিয়ন্ত্রণ সিস্টেমে একটি API কী চেক করবেন না ৷ পরিবর্তে, আপনার API কী এর জন্য একটি গোপন স্টোর ব্যবহার করা উচিত।

এই টিউটোরিয়ালের সমস্ত স্নিপেট অনুমান করে যে আপনি একটি পরিবেশ পরিবর্তনশীল হিসাবে আপনার API কী অ্যাক্সেস করছেন।

SDK প্যাকেজ ইনস্টল করুন

আপনার নিজের অ্যাপ্লিকেশনে Gemini API ব্যবহার করতে, আপনাকে আপনার মডিউল ডিরেক্টরিতে Go SDK প্যাকেজটি get হবে:

go get github.com/google/generative-ai-go

জেনারেটিভ মডেল শুরু করুন

আপনি যেকোন API কল করার আগে, আপনাকে জেনারেটিভ মডেলটি আমদানি এবং আরম্ভ করতে হবে।

import "github.com/google/generative-ai-go/genai"
import "google.golang.org/api/option"

ctx := context.Background()
// Access your API key as an environment variable (see "Set up your API key" above)
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

model := client.GenerativeModel("MODEL_NAME")

একটি মডেল নির্দিষ্ট করার সময়, নিম্নলিখিত নোট করুন:

  • আপনার ব্যবহারের ক্ষেত্রে নির্দিষ্ট একটি মডেল ব্যবহার করুন (উদাহরণস্বরূপ, gemini-pro-vision মাল্টিমোডাল ইনপুটের জন্য)। এই গাইডের মধ্যে, প্রতিটি বাস্তবায়নের নির্দেশাবলী প্রতিটি ব্যবহারের ক্ষেত্রে প্রস্তাবিত মডেলের তালিকা করে।

সাধারণ ব্যবহারের ক্ষেত্রে প্রয়োগ করুন

এখন আপনার প্রকল্প সেট আপ করা হয়েছে, আপনি বিভিন্ন ব্যবহারের ক্ষেত্রে প্রয়োগ করতে Gemini API ব্যবহার করে অন্বেষণ করতে পারেন:

উন্নত ব্যবহারের ক্ষেত্রে বিভাগে, আপনি Gemini API এবং এম্বেডিং সম্পর্কে তথ্য পেতে পারেন।

শুধুমাত্র পাঠ্য ইনপুট থেকে পাঠ্য তৈরি করুন

যখন প্রম্পট ইনপুট শুধুমাত্র টেক্সট অন্তর্ভুক্ত করে, টেক্সট আউটপুট তৈরি করতে GenerateContent পদ্ধতির সাথে gemini-pro মডেল ব্যবহার করুন:

ctx := context.Background()
// Access your API key as an environment variable (see "Set up your API key" above)
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

// For text-only input, use the gemini-pro model
model := client.GenerativeModel("gemini-pro")
resp, err := model.GenerateContent(ctx, genai.Text("Write a story about a magic backpack."))
if err != nil {
  log.Fatal(err)
}

টেক্সট-এবং-ইমেজ ইনপুট (মাল্টিমোডাল) থেকে পাঠ্য তৈরি করুন

মিথুন একটি মাল্টিমডাল মডেল ( gemini-pro-vision ) প্রদান করে, যাতে আপনি পাঠ্য এবং ছবি উভয়ই ইনপুট করতে পারেন। প্রম্পটের জন্য চিত্রের প্রয়োজনীয়তাগুলি পর্যালোচনা করতে ভুলবেন না।

যখন প্রম্পট ইনপুটে পাঠ্য এবং চিত্র উভয়ই অন্তর্ভুক্ত থাকে, তখন পাঠ্য আউটপুট তৈরি করতে GenerateContent পদ্ধতির সাথে gemini-pro-vision মডেলটি ব্যবহার করুন:

ctx := context.Background()
// Access your API key as an environment variable (see "Set up your API key" above)
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

// For text-and-image input (multimodal), use the gemini-pro-vision model
model := client.GenerativeModel("gemini-pro-vision")

imgData1, err := os.ReadFile(pathToImage1)
if err != nil {
  log.Fatal(err)
}

imgData2, err := os.ReadFile(pathToImage1)
if err != nil {
  log.Fatal(err)
}

prompt := []genai.Part{
  genai.ImageData("jpeg", imgData1),
  genai.ImageData("jpeg", imgData2),
  genai.Text("What's different between these two pictures?"),
}
resp, err := model.GenerateContent(ctx, prompt...)

if err != nil {
  log.Fatal(err)
}

মাল্টি-টার্ন কথোপকথন তৈরি করুন (চ্যাট)

মিথুন ব্যবহার করে, আপনি একাধিক বাঁক জুড়ে ফ্রিফর্ম কথোপকথন তৈরি করতে পারেন। SDK কথোপকথনের অবস্থা পরিচালনা করে প্রক্রিয়াটিকে সরল করে, তাই GenerateContent এর বিপরীতে, আপনাকে কথোপকথনের ইতিহাস নিজেকে সংরক্ষণ করতে হবে না।

একটি মাল্টি-টার্ন কথোপকথন তৈরি করতে (যেমন চ্যাট), gemini-pro মডেলটি ব্যবহার করুন এবং StartChat() কল করে চ্যাট শুরু করুন। তারপরে একটি নতুন ব্যবহারকারীর বার্তা পাঠাতে SendMessage() ব্যবহার করুন, যা চ্যাট ইতিহাসে বার্তা এবং প্রতিক্রিয়া যুক্ত করবে।

কথোপকথনে বিষয়বস্তুর সাথে যুক্ত role জন্য দুটি সম্ভাব্য বিকল্প রয়েছে:

  • user : ভূমিকা যা প্রম্পট প্রদান করে। এই মানটি SendMessage কলের জন্য ডিফল্ট।

  • model : ভূমিকা যা প্রতিক্রিয়া প্রদান করে। বিদ্যমান history সহ StartChat() কল করার সময় এই ভূমিকাটি ব্যবহার করা যেতে পারে।

ctx := context.Background()
// Access your API key as an environment variable (see "Set up your API key" above)
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

// For text-only input, use the gemini-pro model
model := client.GenerativeModel("gemini-pro")
// Initialize the chat
cs := model.StartChat()
cs.History = []*genai.Content{
  &genai.Content{
    Parts: []genai.Part{
      genai.Text("Hello, I have 2 dogs in my house."),
    },
    Role: "user",
  },
  &genai.Content{
    Parts: []genai.Part{
      genai.Text("Great to meet you. What would you like to know?"),
    },
    Role: "model",
  },
}

resp, err := cs.SendMessage(ctx, genai.Text("How many paws are in my house?"))
if err != nil {
  log.Fatal(err)
}

দ্রুত মিথস্ক্রিয়া জন্য স্ট্রিমিং ব্যবহার করুন

ডিফল্টরূপে, মডেল পুরো প্রজন্মের প্রক্রিয়া শেষ করার পরে একটি প্রতিক্রিয়া প্রদান করে। আপনি সম্পূর্ণ ফলাফলের জন্য অপেক্ষা না করে দ্রুত মিথস্ক্রিয়া অর্জন করতে পারেন এবং পরিবর্তে আংশিক ফলাফলগুলি পরিচালনা করতে স্ট্রিমিং ব্যবহার করতে পারেন।

নিচের উদাহরণে দেখানো হয়েছে কিভাবে GenerateContentStream পদ্ধতির মাধ্যমে একটি টেক্সট-এবং-ইমেজ ইনপুট প্রম্পট থেকে টেক্সট জেনারেট করতে হয়।

ctx := context.Background()
// Access your API key as an environment variable (see "Set up your API key" above)
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()

// For text-and-image input (multimodal), use the gemini-pro-vision model
model := client.GenerativeModel("gemini-pro-vision")

imageBytes, err := os.ReadFile(pathToImage)

img := genai.ImageData("jpeg", imageBytes)
prompt := genai.Text("Tell me a story about this animal")
iter := model.GenerateContentStream(ctx, img, prompt)

for {
  resp, err := iter.Next()
  if err == iterator.Done {
    break
  }
  if err != nil {
    log.Fatal(err)
  }

  // ... print resp
}

আপনি শুধুমাত্র পাঠ্য ইনপুট এবং চ্যাট ব্যবহারের ক্ষেত্রে একটি অনুরূপ পদ্ধতি ব্যবহার করতে পারেন।

prompt := genai.Text("Tell me a story about a lumberjack and his giant ox")
iter := model.GenerateContentStream(ctx, prompt)
prompt := genai.Text("And how do you feel about that?")
iter := cs.SendMessageStream(ctx, prompt)

উন্নত ব্যবহারের ক্ষেত্রে প্রয়োগ করুন

এই টিউটোরিয়ালের পূর্ববর্তী বিভাগে বর্ণিত সাধারণ ব্যবহারের ক্ষেত্রে আপনাকে Gemini API ব্যবহারে স্বাচ্ছন্দ্য বোধ করতে সাহায্য করে। এই বিভাগে কিছু ব্যবহারের ক্ষেত্রে বর্ণনা করা হয়েছে যেগুলি আরও উন্নত বলে বিবেচিত হতে পারে।

এম্বেডিং ব্যবহার করুন

এমবেডিং হল একটি কৌশল যা তথ্যকে একটি অ্যারেতে ভাসমান পয়েন্ট সংখ্যার তালিকা হিসাবে উপস্থাপন করতে ব্যবহৃত হয়। মিথুনের সাথে, আপনি একটি ভেক্টরাইজড আকারে পাঠ্য (শব্দ, বাক্য এবং পাঠ্যের ব্লক) উপস্থাপন করতে পারেন, এটি তুলনা করা এবং এম্বেডিংগুলিকে বৈসাদৃশ্য করা সহজ করে তোলে। উদাহরণ স্বরূপ, যে দুটি পাঠ্য একই বিষয়বস্তু বা অনুভূতি ভাগ করে তাদের অনুরূপ এম্বেডিং থাকা উচিত, যা গাণিতিক তুলনা কৌশল যেমন কোসাইন সাদৃশ্যের মাধ্যমে চিহ্নিত করা যেতে পারে।

এমবেডিং তৈরি করতে EmbedContent পদ্ধতি (বা BatchEmbedContent পদ্ধতি) সহ embedding-001 মডেল ব্যবহার করুন। নিম্নলিখিত উদাহরণটি একটি একক স্ট্রিংয়ের জন্য একটি এম্বেডিং তৈরি করে:

ctx := context.Background()
// Access your API key as an environment variable (see "Set up your API key" above)
client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("API_KEY")))
if err != nil {
  log.Fatal(err)
}
defer client.Close()
em := client.EmbeddingModel("embedding-001")
res, err := em.EmbedContent(ctx, genai.Text("The quick brown fox jumps over the lazy dog."))

if err != nil {
  panic(err)
}
fmt.Println(res.Embedding.Values)

ফাংশন কলিং

ফাংশন কলিং আপনার জন্য জেনারেটিভ মডেল থেকে স্ট্রাকচার্ড ডেটা আউটপুট পেতে সহজ করে তোলে। তারপরে আপনি এই আউটপুটগুলি ব্যবহার করে অন্যান্য API কল করতে এবং মডেলে প্রাসঙ্গিক প্রতিক্রিয়া ডেটা ফেরত দিতে পারেন। অন্য কথায়, ফাংশন কলিং আপনাকে জেনারেটিভ মডেলগুলিকে বাহ্যিক সিস্টেমের সাথে সংযুক্ত করতে সাহায্য করে যাতে তৈরি করা সামগ্রীতে সর্বাধিক আপ-টু-ডেট এবং সঠিক তথ্য অন্তর্ভুক্ত থাকে। ফাংশন কলিং টিউটোরিয়ালে আরও জানুন।

টোকেন গণনা করুন

দীর্ঘ প্রম্পট ব্যবহার করার সময়, মডেলে কোনো সামগ্রী পাঠানোর আগে টোকেন গণনা করা কার্যকর হতে পারে। নিম্নলিখিত উদাহরণগুলি বিভিন্ন ব্যবহারের ক্ষেত্রে CountTokens() কীভাবে ব্যবহার করতে হয় তা দেখায়:

// For text-only input
text := "Parrots can be green and live a long time."
resp, err := model.CountTokens(ctx, genai.Text(text))
if err != nil {
  log.Fatal(err)
}
fmt.Println(resp.TotalTokens)
// For text-and-image input (multimodal)
text := "Parrots can be green and live a long time."
imageBytes, err := os.ReadFile(pathToImage)
if err != nil {
  log.Fatal(err)
}

resp, err := model.CountTokens(
    ctx,
    genai.Text(text),
    genai.ImageData("png", imageBytes))
  if err != nil {
    log.Fatal(err)
}
fmt.Println(resp.TotalTokens)

বিষয়বস্তু তৈরি নিয়ন্ত্রণ করার বিকল্প

আপনি মডেল প্যারামিটার কনফিগার করে এবং নিরাপত্তা সেটিংস ব্যবহার করে সামগ্রী তৈরি নিয়ন্ত্রণ করতে পারেন।

মডেল প্যারামিটার কনফিগার করুন

আপনি মডেলে পাঠানো প্রতিটি প্রম্পটে প্যারামিটার মান অন্তর্ভুক্ত করে যা নিয়ন্ত্রণ করে কিভাবে মডেলটি একটি প্রতিক্রিয়া তৈরি করে। মডেল বিভিন্ন পরামিতি মান জন্য বিভিন্ন ফলাফল তৈরি করতে পারে. মডেল প্যারামিটার সম্পর্কে আরও জানুন। কনফিগারেশন আপনার মডেল উদাহরণের জীবনকালের জন্য বজায় রাখা হয়।

// ...

model := client.GenerativeModel("MODEL_NAME")

// Configure model parameters by invoking Set* methods on the model.
model.SetTemperature(0.9)
model.SetTopK(1)

// ...

নিরাপত্তা সেটিংস ব্যবহার করুন

ক্ষতিকারক বলে বিবেচিত প্রতিক্রিয়া পাওয়ার সম্ভাবনা সামঞ্জস্য করতে আপনি নিরাপত্তা সেটিংস ব্যবহার করতে পারেন। ডিফল্টরূপে, নিরাপত্তা সেটিংস মাঝারি এবং/অথবা সমস্ত মাত্রা জুড়ে অনিরাপদ বিষয়বস্তু হওয়ার উচ্চ সম্ভাবনা সহ সামগ্রীকে ব্লক করে। নিরাপত্তা সেটিংস সম্পর্কে আরও জানুন।

এখানে কিভাবে একটি নিরাপত্তা সেটিং সেট করতে হয়:

// ...

model := client.GenerativeModel("MODEL_NAME")

model.SafetySettings = []*genai.SafetySetting{
  {
    Category:  genai.HarmCategoryHarassment,
    Threshold: genai.HarmBlockOnlyHigh,
  },
}

// ...

এছাড়াও আপনি একাধিক নিরাপত্তা সেটিং সেট করতে পারেন:

// ...

model := client.GenerativeModel("MODEL_NAME")

model.SafetySettings = []*genai.SafetySetting{
  {
    Category:  genai.HarmCategoryHarassment,
    Threshold: genai.HarmBlockOnlyHigh,
  },
  {
    Category:  genai.HarmCategoryHateSpeech,
    Threshold: genai.HarmBlockMediumAndAbove,
  },
}

// ...

এরপর কি

  • প্রম্পট ডিজাইন হল প্রম্পট তৈরি করার প্রক্রিয়া যা ভাষার মডেলগুলি থেকে পছন্দসই প্রতিক্রিয়া প্রকাশ করে। একটি ভাষা মডেল থেকে সঠিক, উচ্চ মানের প্রতিক্রিয়া নিশ্চিত করার জন্য ভাল কাঠামোগত প্রম্পট লেখা একটি অপরিহার্য অংশ। প্রম্পট লেখার জন্য সর্বোত্তম অনুশীলন সম্পর্কে জানুন।

  • মিথুন বিভিন্ন ব্যবহারের ক্ষেত্রে যেমন ইনপুট প্রকার এবং জটিলতা, চ্যাট বা অন্যান্য ডায়ালগ ভাষার কাজের জন্য বাস্তবায়ন এবং আকারের সীমাবদ্ধতাগুলির প্রয়োজন মেটাতে বিভিন্ন মডেলের বৈচিত্র অফার করে। উপলব্ধ মিথুন মডেল সম্পর্কে জানুন।

  • মিথুন হারের সীমা বৃদ্ধির অনুরোধ করার জন্য বিকল্পগুলি অফার করে৷ Gemini Pro মডেলের জন্য রেট সীমা প্রতি মিনিটে 60টি অনুরোধ (RPM)।