Gemini API দিয়ে কাঠামোগত আউটপুট তৈরি করুন


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

মডেল থেকে কাঠামোগত আউটপুট প্রয়োজন হতে পারে এমন কয়েকটি ব্যবহারের ক্ষেত্রে এখানে রয়েছে:

  • সংবাদপত্রের নিবন্ধগুলি থেকে কোম্পানির তথ্য টেনে কোম্পানিগুলির একটি ডাটাবেস তৈরি করুন।
  • জীবনবৃত্তান্ত থেকে প্রমিত তথ্য টেনে আনুন।
  • রেসিপি থেকে উপাদানগুলি বের করুন এবং প্রতিটি উপাদানের জন্য একটি মুদির ওয়েবসাইটের লিঙ্ক প্রদর্শন করুন।

আপনার প্রম্পটে, আপনি জেমিনিকে JSON-ফরম্যাট করা আউটপুট তৈরি করতে বলতে পারেন, কিন্তু মনে রাখবেন যে মডেলটি JSON তৈরির নিশ্চয়তা দেয় না এবং JSON ছাড়া কিছুই নয়। আরও নির্ধারক প্রতিক্রিয়ার জন্য, আপনি একটি responseSchema ফিল্ডে একটি নির্দিষ্ট JSON স্কিমা পাস করতে পারেন যাতে মিথুন সবসময় একটি প্রত্যাশিত কাঠামোর সাথে প্রতিক্রিয়া জানায়। স্কিমা নিয়ে কাজ করার বিষয়ে আরও জানতে, JSON স্কিমা সম্পর্কে আরও দেখুন।

আপনার পছন্দের SDK-এর মাধ্যমে বা সরাসরি REST API ব্যবহার করে generateContent পদ্ধতি ব্যবহার করে কীভাবে JSON তৈরি করবেন এই নির্দেশিকা আপনাকে দেখায়। উদাহরণগুলি কেবলমাত্র পাঠ্য ইনপুট দেখায়, যদিও জেমিনি ছবি , ভিডিও এবং অডিও অন্তর্ভুক্ত মাল্টিমোডাল অনুরোধগুলিতে JSON প্রতিক্রিয়াও তৈরি করতে পারে।

আপনি শুরু করার আগে: আপনার প্রকল্প এবং API কী সেট আপ করুন

Gemini API কল করার আগে, আপনাকে আপনার প্রকল্প সেট আপ করতে হবে এবং আপনার API কী কনফিগার করতে হবে।

JSON তৈরি করুন

যখন মডেলটিকে JSON আউটপুট করার জন্য কনফিগার করা হয়, তখন এটি JSON- ফরম্যাটেড আউটপুট সহ যেকোনো প্রম্পটে সাড়া দেয়।

আপনি একটি স্কিমা সরবরাহ করে JSON প্রতিক্রিয়ার গঠন নিয়ন্ত্রণ করতে পারেন। মডেলটিতে স্কিমা সরবরাহ করার দুটি উপায় রয়েছে:

  • প্রম্পটে পাঠ্য হিসাবে
  • একটি কাঠামোগত স্কিমা হিসাবে মডেল কনফিগারেশনের মাধ্যমে সরবরাহ করা হয়

প্রম্পটে পাঠ্য হিসাবে একটি স্কিমা সরবরাহ করুন

নিম্নলিখিত উদাহরণটি মডেলটিকে একটি নির্দিষ্ট JSON ফর্ম্যাটে কুকি রেসিপিগুলি ফেরত দেওয়ার জন্য অনুরোধ করে৷

যেহেতু মডেলটি প্রম্পটে টেক্সট থেকে ফরম্যাট স্পেসিফিকেশন পায়, তাই আপনি স্পেসিফিকেশনটি কীভাবে উপস্থাপন করেন তাতে আপনার কিছুটা নমনীয়তা থাকতে পারে। একটি JSON স্কিমা প্রতিনিধিত্ব করার জন্য যেকোনো যুক্তিসঙ্গত বিন্যাস কাজ করতে পারে।

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

const model = genAI.getGenerativeModel({
  model: "gemini-1.5-flash",
});

const prompt = `List a few popular cookie recipes using this JSON schema:

Recipe = {'recipeName': string}
Return: Array<Recipe>`;

const result = await model.generateContent(prompt);
console.log(result.response.text());

আউটপুট এই মত দেখতে পারে:

[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]

মডেল কনফিগারেশনের মাধ্যমে একটি স্কিমা সরবরাহ করুন

নিম্নলিখিত উদাহরণ নিম্নলিখিত কাজ করে:

  1. JSON এর সাথে প্রতিক্রিয়া জানাতে একটি স্কিমার মাধ্যমে কনফিগার করা একটি মডেলকে তাৎক্ষণিক করে।
  2. মডেলকে কুকি রেসিপি ফেরত দিতে অনুরোধ করে।

JSON স্কিমা ঘোষণা করার জন্য এই আরও আনুষ্ঠানিক পদ্ধতিটি আপনাকে কেবল প্রম্পটে পাঠ্যের উপর নির্ভর করার চেয়ে আরও সুনির্দিষ্ট নিয়ন্ত্রণ দেয়।

// Make sure to include these imports:
// import { GoogleGenerativeAI, SchemaType } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

const schema = {
  description: "List of recipes",
  type: SchemaType.ARRAY,
  items: {
    type: SchemaType.OBJECT,
    properties: {
      recipeName: {
        type: SchemaType.STRING,
        description: "Name of the recipe",
        nullable: false,
      },
    },
    required: ["recipeName"],
  },
};

const model = genAI.getGenerativeModel({
  model: "gemini-1.5-pro",
  generationConfig: {
    responseMimeType: "application/json",
    responseSchema: schema,
  },
});

const result = await model.generateContent(
  "List a few popular cookie recipes.",
);
console.log(result.response.text());

আউটপুট এই মত দেখতে পারে:

[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]

JSON স্কিমা সম্পর্কে আরও

আপনি যখন JSON প্রতিক্রিয়া ফেরাতে মডেলটি কনফিগার করেন, তখন আপনি JSON ডেটার আকৃতি নির্ধারণ করতে একটি Schema অবজেক্ট ব্যবহার করতে পারেন। Schema OpenAPI 3.0 স্কিমা অবজেক্টের একটি নির্বাচিত উপসেট উপস্থাপন করে।

এখানে সমস্ত Schema ক্ষেত্রগুলির একটি ছদ্ম-JSON উপস্থাপনা রয়েছে:

{
  "type": enum (Type),
  "format": string,
  "description": string,
  "nullable": boolean,
  "enum": [
    string
  ],
  "maxItems": string,
  "minItems": string,
  "properties": {
    string: {
      object (Schema)
    },
    ...
  },
  "required": [
    string
  ],
  "propertyOrdering": [
    string
  ],
  "items": {
    object (Schema)
  }
}

স্কিমার Type অবশ্যই OpenAPI ডেটা টাইপের একটি হতে হবে। প্রতিটি Type জন্য শুধুমাত্র ক্ষেত্রগুলির একটি উপসেট বৈধ। নিম্নলিখিত তালিকা প্রতিটি Type সেই ধরণের জন্য বৈধ ক্ষেত্রের মানচিত্র করে:

  • string -> enum, বিন্যাস
  • integer -> বিন্যাস
  • number -> বিন্যাস
  • bool
  • array -> মিনি আইটেম, সর্বোচ্চ আইটেম, আইটেম
  • object -> বৈশিষ্ট্য, প্রয়োজনীয়, সম্পত্তি অর্ডার, বাতিলযোগ্য

এখানে বৈধ টাইপ-এবং-ক্ষেত্র সমন্বয় দেখানো কিছু উদাহরণ স্কিমা রয়েছে:

{ "type": "string", "enum": ["a", "b", "c"] }

{ "type": "string", "format": "date-time" }

{ "type": "integer", "format": "int64" }

{ "type": "number", "format": "double" }

{ "type": "bool" }

{ "type": "array", "minItems": 3, "maxItems": 3, "items": { "type": ... } }

{ "type": "object",
  "properties": {
    "a": { "type": ... },
    "b": { "type": ... },
    "c": { "type": ... }
  },
  "nullable": true,
  "required": ["c"],
  "propertyOrdering": ["c", "b", "a"]
}

স্কিমা ক্ষেত্রগুলির সম্পূর্ণ ডকুমেন্টেশনের জন্য যেমন সেগুলি Gemini API-এ ব্যবহৃত হয়, স্কিমা রেফারেন্স দেখুন।

সম্পত্তি আদেশ

আপনি যখন জেমিনি API-তে JSON স্কিমাগুলির সাথে কাজ করছেন, তখন বৈশিষ্ট্যের ক্রম গুরুত্বপূর্ণ। ডিফল্টরূপে, API বৈশিষ্ট্যগুলিকে বর্ণানুক্রমিকভাবে অর্ডার করে এবং যে ক্রমে বৈশিষ্ট্যগুলিকে সংজ্ঞায়িত করা হয়েছে তা সংরক্ষণ করে না (যদিও Google Gen AI SDKগুলি এই ক্রমটি সংরক্ষণ করতে পারে)৷ আপনি যদি একটি স্কিমা কনফিগার করা মডেলের সাথে উদাহরণ প্রদান করেন এবং উদাহরণগুলির সম্পত্তির ক্রম স্কিমার সম্পত্তি ক্রমানুসারের সাথে সামঞ্জস্যপূর্ণ না হয়, তাহলে আউটপুট র‍্যাম্বলিং বা অপ্রত্যাশিত হতে পারে।

বৈশিষ্ট্যগুলির একটি সামঞ্জস্যপূর্ণ, অনুমানযোগ্য ক্রম নিশ্চিত করতে, আপনি ঐচ্ছিক propertyOrdering[] ক্ষেত্রটি ব্যবহার করতে পারেন।

"propertyOrdering": ["recipe_name", "ingredients"]

propertyOrdering[] - OpenAPI স্পেসিফিকেশনে একটি আদর্শ ক্ষেত্র নয় - প্রতিক্রিয়ায় বৈশিষ্ট্যের ক্রম নির্ধারণ করতে ব্যবহৃত স্ট্রিংগুলির একটি অ্যারে। বৈশিষ্ট্যের ক্রম নির্দিষ্ট করে এবং তারপর একই ক্রমে বৈশিষ্ট্য সহ উদাহরণ প্রদান করে, আপনি সম্ভাব্য ফলাফলের গুণমান উন্নত করতে পারেন।