টিউটোরিয়াল: Gemini API এর সাথে ফাংশন কলিং


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

আপনি ফাংশন বর্ণনা সহ মিথুন মডেল প্রদান করতে পারেন. এগুলি এমন ফাংশন যা আপনি আপনার অ্যাপের ভাষায় লেখেন (অর্থাৎ, এগুলি Google ক্লাউড ফাংশন নয়)৷ মডেলটি আপনাকে একটি ফাংশন কল করতে এবং মডেলটিকে আপনার প্রশ্ন পরিচালনা করতে সহায়তা করার জন্য ফলাফলটি ফেরত পাঠাতে বলতে পারে।

আপনি যদি ইতিমধ্যে না করে থাকেন, আরও জানতে ফাংশন কলিংয়ের ভূমিকা দেখুন।

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

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

একটি ফাংশন কল সেট আপ করুন

এই টিউটোরিয়ালটির জন্য, আপনার কাছে মডেলটি একটি অনুমানমূলক মুদ্রা বিনিময় API এর সাথে ইন্টারঅ্যাক্ট করতে হবে যা নিম্নলিখিত পরামিতিগুলিকে সমর্থন করে:

প্যারামিটার টাইপ প্রয়োজন বর্ণনা
currencyDate স্ট্রিং হ্যাঁ বিনিময় হার আনার তারিখ
(যেটি সর্বদা YYYY-MM-DD ফর্ম্যাটে বা একটি সময়কাল নির্দিষ্ট না থাকলে latest মান হতে হবে)
currencyFrom স্ট্রিং হ্যাঁ থেকে রূপান্তরিত মুদ্রা
currencyTo স্ট্রিং না কারেন্সিতে রূপান্তর করতে হবে

উদাহরণ API অনুরোধ

{
  "currencyDate": "2024-04-17",
  "currencyFrom": "USD",
  "currencyTo": "SEK"
}

উদাহরণ API প্রতিক্রিয়া

{
  "base": "USD",
  "date": "2024-04-17",
  "rates": {"SEK": 0.091}
}

ধাপ 1 : API অনুরোধ করে এমন ফাংশন তৈরি করুন

যদি আপনি ইতিমধ্যেই না করে থাকেন তবে একটি API অনুরোধ করে এমন ফাংশন তৈরি করে শুরু করুন।

এই টিউটোরিয়ালে প্রদর্শনের উদ্দেশ্যে, একটি প্রকৃত API অনুরোধ পাঠানোর পরিবর্তে, আপনি একই বিন্যাসে হার্ডকোড করা মানগুলি ফিরিয়ে দেবেন যা একটি প্রকৃত API ফেরত দেবে।

func exchangeRate(currencyDate string,
    currencyFrom string, currencyTo string) map[string]any {
    // This hypothetical API returns a JSON such as:
    // {"base":"USD","date":"2024-04-17","rates":{"SEK": 0.091}}
    return map[string]any{
        "base":  currencyFrom,
        "date":  currencyDate,
        "rates": map[string]any{currencyTo: 0.091}}
}

ধাপ 2 : একটি ফাংশন ঘোষণা তৈরি করুন

ফাংশন ঘোষণা তৈরি করুন যা আপনি জেনারেটিভ মডেলে পাস করবেন (এই টিউটোরিয়ালের পরবর্তী ধাপ)।

ফাংশন এবং প্যারামিটারের বিবরণে যতটা সম্ভব বিস্তারিত অন্তর্ভুক্ত করুন। কোন ফাংশন নির্বাচন করতে হবে এবং ফাংশন কলের পরামিতিগুলির জন্য কীভাবে মান প্রদান করতে হবে তা নির্ধারণ করতে জেনারেটিভ মডেল এই তথ্য ব্যবহার করে।

currencyExchangeTool := &genai.Tool{
    FunctionDeclarations: []*genai.FunctionDeclaration{{
        Name:        "exchangeRate",
        Description: "Lookup currency exchange rates by date",
        Parameters: &genai.Schema{
            Type: genai.TypeObject,
            Properties: map[string]*genai.Schema{
                "currencyDate": {
                    Type:        genai.TypeString,
                    Description: "A date that must always be in YYYY-MM-DD format" +
                        " or the value 'latest' if a time period is not specified",
                },
                "currencyFrom": {
                    Type:        genai.TypeString,
                    Description: "Currency to convert from",
                },
                "currencyTo": {
                    Type:        genai.TypeString,
                    Description: "Currency to convert to",
                },
            },
            Required: []string{"currencyDate", "currencyFrom"},
        },
    }},
}

ধাপ 3 : মডেল ইনিশিয়ালাইজেশনের সময় ফাংশন ঘোষণা নির্দিষ্ট করুন

মডেলের Tools প্যারামিটারে পাস করে জেনারেটিভ মডেলটি আরম্ভ করার সময় ফাংশন ঘোষণাটি নির্দিষ্ট করুন:

// ...

currencyExchangeTool := &genai.Tool{
  // ...
}

// Use a model that supports function calling, like Gemini 1.0 Pro.
// See "Supported models" in the "Introduction to function calling" page.
model := client.GenerativeModel("gemini-1.0-pro")

// Specify the function declaration.
model.Tools = []*genai.Tool{currencyExchangeTool}

ধাপ 4 : একটি ফাংশন কল জেনারেট করুন

এখন আপনি সংজ্ঞায়িত ফাংশন সহ মডেলটি প্রম্পট করতে পারেন।

ফাংশন কলিং ব্যবহার করার প্রস্তাবিত উপায় হল চ্যাট ইন্টারফেসের মাধ্যমে, যেহেতু ফাংশন কলগুলি চ্যাটের মাল্টি-টার্ন স্ট্রাকচারে সুন্দরভাবে ফিট করে।

// Start new chat session.
session := model.StartChat()

prompt := "How much is 50 US dollars worth in Swedish krona?"

// Send the message to the generative model.
resp, err := session.SendMessage(ctx, genai.Text(prompt))
if err != nil {
    log.Fatalf("Error sending message: %v\n", err)
}

// Check that you got the expected function call back.
part := resp.Candidates[0].Content.Parts[0]
funcall, ok := part.(genai.FunctionCall)
if !ok {
    log.Fatalf("Expected type FunctionCall, got %T", part)
}
if g, e := funcall.Name, currencyExchangeTool.FunctionDeclarations[0].Name; g != e {
    log.Fatalf("Expected FunctionCall.Name %q, got %q", e, g)
}
fmt.Printf("Received function call response:\n%q\n\n", part)

apiResult := map[string]any{
    "base":  "USD",
    "date":  "2024-04-17",
    "rates": map[string]any{"SEK": 0.091}}

// Send the hypothetical API result back to the generative model.
fmt.Printf("Sending API result:\n%q\n\n", apiResult)
resp, err = session.SendMessage(ctx, genai.FunctionResponse{
    Name:     currencyExchangeTool.FunctionDeclarations[0].Name,
    Response: apiResult,
})
if err != nil {
    log.Fatalf("Error sending message: %v\n", err)
}

// Show the model's response, which is expected to be text.
for _, part := range resp.Candidates[0].Content.Parts {
    fmt.Printf("%v\n", part)
}