টিউটোরিয়াল: 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 ব্যবহার করে অন্বেষণ করতে পারেন:

অ্যাডভান্সড ইউজ কেস বিভাগে, আপনি জেমিনি এপিআই এবং এম্বেডিং সম্পর্কে তথ্য পেতে পারেন।

কেবল পাঠ্য-ইনপুট থেকে পাঠ্য তৈরি করুন

যখন প্রম্পট ইনপুটটিতে কেবল পাঠ্য অন্তর্ভুক্ত থাকে, তখন পাঠ্য আউটপুট উত্পন্ন করতে 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)
}

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

জেমিনি ব্যবহার করে আপনি একাধিক টার্ন জুড়ে ফ্রিফর্ম কথোপকথন তৈরি করতে পারেন। এসডিকে কথোপকথনের অবস্থা পরিচালনা করে প্রক্রিয়াটিকে সহজতর করে, তাই 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)

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

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

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

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

এম্বেডিংগুলি তৈরি করতে 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)

ফাংশন কলিং

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

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

দীর্ঘ প্রম্পটগুলি ব্যবহার করার সময়, মডেলটিতে কোনও সামগ্রী প্রেরণের আগে টোকেনগুলি গণনা করা কার্যকর হতে পারে। নিম্নলিখিত উদাহরণগুলি বিভিন্ন ব্যবহারের ক্ষেত্রে কীভাবে 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,
  },
}

// ...

এরপর কি

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

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

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