آموزش: با Gemini API تماس را انجام دهید


فراخوانی تابع، دریافت خروجی داده های ساختاریافته از مدل های تولیدی را برای شما آسان تر می کند. سپس می توانید از این خروجی ها برای فراخوانی API های دیگر و برگرداندن داده های پاسخ مربوطه به مدل استفاده کنید. به عبارت دیگر، فراخوانی تابع به شما کمک می کند تا مدل های تولیدی را به سیستم های خارجی متصل کنید تا محتوای تولید شده شامل به روزترین و دقیق ترین اطلاعات باشد.

می توانید مدل های Gemini را با توضیحاتی در مورد عملکردها ارائه دهید. اینها توابعی هستند که شما به زبان برنامه خود می نویسید (یعنی توابع Google Cloud نیستند). مدل ممکن است از شما بخواهد که یک تابع را فراخوانی کنید و نتیجه را برای کمک به مدل در رسیدگی به درخواست شما ارسال کنید.

اگر قبلاً این کار را نکرده‌اید، برای کسب اطلاعات بیشتر ، مقدمه فراخوانی تابع را بررسی کنید.

پروژه خود را تنظیم کنید

قبل از فراخوانی Gemini API، باید پروژه خود را راه‌اندازی کنید که شامل تنظیم کلید API، نصب بسته SDK و مقداردهی اولیه مدل است.

یک تماس تابع تنظیم کنید

برای این آموزش، مدل را با یک API مبادله ارز فرضی که از پارامترهای زیر پشتیبانی می‌کند تعامل خواهید داشت:

پارامتر تایپ کنید ضروری شرح
currencyFrom رشته آره ارز برای تبدیل
currencyTo رشته آره ارز برای تبدیل

نمونه درخواست API

{
  "currencyFrom": "USD",
  "currencyTo": "SEK"
}

نمونه پاسخ API

{
  "base": "USD",
  "rates": {"SEK": 0.091}
}

مرحله 1 : تابعی را ایجاد کنید که درخواست API را ایجاد می کند

اگر قبلاً این کار را نکرده‌اید، با ایجاد تابعی که درخواست API را ایجاد می‌کند، شروع کنید.

برای اهداف نمایشی در این آموزش، به جای ارسال یک درخواست API واقعی، مقادیر کدگذاری شده را با همان قالبی که یک API واقعی برمی گرداند، برمی گردانید.

async function makeApiRequest(currencyFrom, currencyTo) {
  // This hypothetical API returns a JSON such as:
  // {"base":"USD","rates":{"SEK": 0.091}}
  return {
    base: currencyFrom,
    rates: { [currencyTo]: 0.091 },
  };
}

مرحله 2 : یک اعلان تابع ایجاد کنید

اعلان تابعی را ایجاد کنید که به مدل مولد منتقل می کنید (مرحله بعدی این آموزش).

تا جایی که ممکن است جزئیات را در توضیحات تابع و پارامتر بگنجانید. مدل مولد از این اطلاعات برای تعیین اینکه کدام تابع را انتخاب کند و چگونه مقادیر پارامترهای فراخوانی تابع را ارائه کند، استفاده می کند.

// Function declaration, to pass to the model.
const getExchangeRateFunctionDeclaration = {
  name: "getExchangeRate",
  parameters: {
    type: "OBJECT",
    description: "Get the exchange rate for currencies between countries",
    properties: {
      currencyFrom: {
        type: "STRING",
        description: "The currency to convert from.",
      },
      currencyTo: {
        type: "STRING",
        description: "The currency to convert to.",
      },
    },
    required: ["currencyTo", "currencyFrom"],
  },
};

// Executable function code. Put it in a map keyed by the function name
// so that you can call it once you get the name string from the model.
const functions = {
  getExchangeRate: ({ currencyFrom, currencyTo }) => {
    return makeApiRequest( currencyFrom, currencyTo)
  }
};

مرحله 3 : اعلان تابع را در طول اولیه سازی مدل مشخص کنید

اعلان تابع را هنگام مقداردهی اولیه مدل مولد با تنظیم پارامتر tools مدل مشخص کنید:

const { GoogleGenerativeAI } = require("@google/generative-ai");

// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

// ...

const generativeModel = genAI.getGenerativeModel({
  // Use a model that supports function calling, like Gemini 1.0 Pro.
  // See "Supported models" in the "Introduction to function calling" page.
  model: "gemini-1.0-pro",

  // Specify the function declaration.
  tools: {
    functionDeclarations: [getExchangeRateFunctionDeclaration],
  },
});

مرحله 4 : یک فراخوانی تابع ایجاد کنید

اکنون می توانید مدل را با تابع تعریف شده درخواست کنید.

روش پیشنهادی برای استفاده از فراخوانی تابع از طریق رابط چت است، زیرا فراخوانی های تابع به خوبی در ساختار چند نوبتی چت قرار می گیرند.

const chat = generativeModel.startChat();
const prompt = "How much is 50 US dollars worth in Swedish krona?";

// Send the message to the model.
const result = await chat.sendMessage(prompt);

// For simplicity, this uses the first function call found.
const call = result.response.functionCalls()[0];

if (call) {
  // Call the executable function named in the function call
  // with the arguments specified in the function call and
  // let it call the hypothetical API.
  const apiResponse = await functions[call.name](call.args);

  // Send the API response back to the model so it can generate
  // a text response that can be displayed to the user.
  const result2 = await chat.sendMessage([{functionResponse: {
    name: 'getExchangeRate',
    response: apiResponse
  }}]);

  // Log the text response.
  console.log(result2.response.text());
}