মূল্যায়ন

মূল্যায়ন হল পরীক্ষার একটি ফর্ম যা আপনাকে আপনার LLM-এর প্রতিক্রিয়া যাচাই করতে এবং সেগুলি আপনার মানের বারের সাথে মিলছে তা নিশ্চিত করতে সহায়তা করে।

Firebase Genkit প্লাগইনগুলির মাধ্যমে তৃতীয় পক্ষের মূল্যায়ন সরঞ্জামগুলিকে সমর্থন করে, শক্তিশালী পর্যবেক্ষণ বৈশিষ্ট্যগুলির সাথে যুক্ত যা আপনার LLM-চালিত অ্যাপ্লিকেশনগুলির রানটাইম অবস্থার অন্তর্দৃষ্টি প্রদান করে৷ জেনকিট টুলিং আপনাকে স্বয়ংক্রিয়ভাবে ইনপুট, আউটপুট এবং LLM প্রতিক্রিয়াগুলির এন্ড-টু-এন্ড মানের মূল্যায়নের পাশাপাশি আপনার সিস্টেমের বিল্ডিং ব্লকগুলির কার্যকারিতা বোঝার জন্য মধ্যবর্তী পদক্ষেপগুলি থেকে তথ্য সহ ডেটা বের করতে সহায়তা করে।

মূল্যায়নের ধরন

Genkit দুই ধরনের মূল্যায়ন সমর্থন করে:

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

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

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

  • কাঁচা মূল্যায়ন : এই ধরনের মূল্যায়ন সরাসরি কোনো অনুমান ছাড়াই ইনপুটের গুণমানকে মূল্যায়ন করে। এই পদ্ধতিটি সাধারণত মেট্রিক্স ব্যবহার করে স্বয়ংক্রিয় মূল্যায়নের সাথে ব্যবহৃত হয়। মূল্যায়নের জন্য সমস্ত প্রয়োজনীয় ক্ষেত্র (যেমন, input , context , output এবং reference ) ইনপুট ডেটাসেটে উপস্থিত থাকতে হবে। এটি উপযোগী হয় যখন আপনার কাছে একটি বাহ্যিক উত্স থেকে ডেটা আসে (যেমন, আপনার উত্পাদন ট্রেস থেকে সংগৃহীত) এবং আপনি সংগ্রহ করা ডেটার গুণমানের একটি উদ্দেশ্যমূলক পরিমাপ করতে চান৷

    আরও তথ্যের জন্য, এই পৃষ্ঠার উন্নত ব্যবহার বিভাগটি দেখুন।

এই বিভাগটি ব্যাখ্যা করে কিভাবে Genkit ব্যবহার করে অনুমান-ভিত্তিক মূল্যায়ন করতে হয়।

দ্রুত শুরু

সেটআপ

  1. একটি বিদ্যমান Genkit অ্যাপ ব্যবহার করুন অথবা আমাদের [Get start](get-started.md) নির্দেশিকা অনুসরণ করে একটি নতুন অ্যাপ তৈরি করুন।
  2. মূল্যায়ন করার জন্য একটি সাধারণ RAG অ্যাপ্লিকেশন সংজ্ঞায়িত করতে নিম্নলিখিত কোড যোগ করুন। এই গাইডের জন্য, আমরা একটি ডামি রিট্রিভার ব্যবহার করি যা সবসময় একই নথি ফেরত দেয়।
    import { genkit, z, Document } from "genkit";
    import {
      googleAI,
      gemini15Flash,
    } from "@genkit-ai/googleai";
    
    // Initialize Genkit
    export const ai = genkit ({
      plugins: [
        googleAI(),
      ]
    });
    
    // Dummy retriever that always returns the same docs
    export const dummyRetriever = ai.defineRetriever(
      {
        name: "dummyRetriever",
      },
      async (i) => {
        const facts = [
          "Dog is man's best friend", 
          "Dogs have evolved and were domesticated from wolves",
        ];
        // Just return facts as documents.
        return { documents: facts.map((t) => Document.fromText(t)) };
      }
    );
    
    // A simple question-answering flow
    export const qaFlow = ai.defineFlow({
        name: 'qaFlow',
        inputSchema: z.string(),
        outputSchema: z.string(),
      },
      async (query) => {
        const factDocs = await ai.retrieve({
          retriever: dummyRetriever,
          query,
        });
    
        const llmResponse = await ai.generate({
          model: gemini15Flash,
          prompt: `Answer this question with the given context ${query}`,
          docs: factDocs,
        });
        return llmResponse.text;
      }
    );
  3. (ঐচ্ছিক) মূল্যায়ন করার সময় ব্যবহার করার জন্য আপনার অ্যাপ্লিকেশনে মূল্যায়ন মেট্রিক যোগ করুন। এই নির্দেশিকা genkitEval প্লাগইন থেকে MALICIOUSNESS মেট্রিক ব্যবহার করে।
    import { genkitEval, GenkitMetric } from "@genkit-ai/evaluator";
    import { gemini15Pro } from "@genkit-ai/googleai";
    
    export const ai = genkit ({
      plugins: [
        ...
        // Add this plugin to your Genkit initialization block
        genkitEval({
          judge: gemini15Pro,
          metrics: [GenkitMetric.MALICIOUSNESS],
        }),
      ]
    });
    দ্রষ্টব্য: উপরের কনফিগারেশনের জন্য @genkit-ai/evaluator প্যাকেজ ইনস্টল করা প্রয়োজন।
    npm install @genkit-ai/evaluator
  4. আপনার Genkit অ্যাপ্লিকেশন শুরু করুন.
    genkit start -- 

একটি ডেটাসেট তৈরি করুন

আমাদের প্রবাহের মূল্যায়নের জন্য আমরা যে উদাহরণগুলি ব্যবহার করতে চাই তা সংজ্ঞায়িত করতে একটি ডেটাসেট তৈরি করুন।

  1. http://localhost:4000 এ Dev UI-এ যান এবং Datasets পৃষ্ঠা খুলতে Datasets বোতামে ক্লিক করুন।

  2. ডেটাসেট তৈরি করুন ডায়ালগ খুলতে ডেটাসেট তৈরি করুন বোতামে ক্লিক করুন।

    ক আপনার নতুন ডেটাসেটের জন্য একটি datasetId প্রদান করুন। এই গাইড myFactsQaDataset ব্যবহার করে।

    খ. Flow ডেটাসেট টাইপ নির্বাচন করুন।

    গ. বৈধতা লক্ষ্য ক্ষেত্রটি খালি রাখুন এবং সংরক্ষণ করুন ক্লিক করুন

  3. আপনার নতুন ডেটাসেট পৃষ্ঠা প্রদর্শিত হবে, একটি খালি ডেটাসেট দেখাচ্ছে৷ এই পদক্ষেপগুলি অনুসরণ করে এটিতে উদাহরণ যুক্ত করুন:

    ক উদাহরণ সম্পাদক প্যানেল খুলতে উদাহরণ যোগ করুন বোতামে ক্লিক করুন।

    খ. শুধুমাত্র input ক্ষেত্র প্রয়োজন. লিখুন "Who is man's best friend?" input ক্ষেত্রে, এবং আপনার ডেটাসেটে উদাহরণ যোগ করতে সংরক্ষণ করুন ক্লিক করুন।

    গ. আরও উদাহরণ যোগ করতে ধাপগুলি (a) এবং (b) আরও কয়েকবার পুনরাবৃত্তি করুন। এই গাইড ডেটাসেটে নিম্নলিখিত উদাহরণ ইনপুট যোগ করে:

    "Can I give milk to my cats?"
    "From which animals did dogs evolve?"
    

    এই ধাপের শেষে, আপনার ডেটাসেটে উপরে উল্লিখিত মান সহ 3টি উদাহরণ থাকতে হবে।

মূল্যায়ন চালান এবং ফলাফল দেখুন

প্রবাহের মূল্যায়ন শুরু করতে, আপনার ডেটাসেট পৃষ্ঠায় নতুন মূল্যায়ন চালান বোতামে ক্লিক করুন। এছাড়াও আপনি মূল্যায়ন ট্যাব থেকে একটি নতুন মূল্যায়ন শুরু করতে পারেন।

  1. একটি প্রবাহ মূল্যায়ন করতে Flow রেডিও বোতামটি নির্বাচন করুন।

  2. মূল্যায়নের লক্ষ্য প্রবাহ হিসাবে qaFlow নির্বাচন করুন।

  3. মূল্যায়নের জন্য ব্যবহার করার জন্য লক্ষ্য ডেটাসেট হিসাবে myFactsQaDataset নির্বাচন করুন।

  4. (ঐচ্ছিক) যদি আপনি Genkit প্লাগইন ব্যবহার করে একটি মূল্যায়নকারী মেট্রিক ইনস্টল করে থাকেন, তাহলে আপনি এই পৃষ্ঠায় এই মেট্রিকগুলি দেখতে পারেন। এই মূল্যায়ন চালানোর সাথে আপনি যে মেট্রিকগুলি ব্যবহার করতে চান তা নির্বাচন করুন৷ এটি সম্পূর্ণরূপে ঐচ্ছিক: এই ধাপটি বাদ দিলেও মূল্যায়ন রানে ফলাফল ফিরে আসবে, কিন্তু কোনো সংশ্লিষ্ট মেট্রিক্স ছাড়াই।

  5. অবশেষে, মূল্যায়ন শুরু করতে মূল্যায়ন চালান ক্লিক করুন। আপনি যে প্রবাহ পরীক্ষা করছেন তার উপর নির্ভর করে, এটি কিছুটা সময় নিতে পারে। একবার মূল্যায়ন সম্পূর্ণ হলে, ফলাফল দেখার জন্য একটি লিঙ্ক সহ একটি সফল বার্তা প্রদর্শিত হবে। মূল্যায়ন বিবরণ পৃষ্ঠায় যেতে লিঙ্কে ক্লিক করুন.

আপনি এই পৃষ্ঠায় আপনার মূল্যায়নের বিশদ বিবরণ দেখতে পারেন, যার মধ্যে মূল ইনপুট, বের করা প্রসঙ্গ এবং মেট্রিক্স (যদি থাকে)।

মূল ধারণা

পরিভাষা

  • মূল্যায়ন : একটি মূল্যায়ন এমন একটি প্রক্রিয়া যা সিস্টেমের কর্মক্ষমতা মূল্যায়ন করে। জেনকিটে, এই ধরনের সিস্টেম সাধারণত একটি জেনকিট আদিম, যেমন একটি প্রবাহ বা একটি মডেল। একটি মূল্যায়ন স্বয়ংক্রিয় বা ম্যানুয়াল (মানব মূল্যায়ন) হতে পারে।

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

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

  • ডেটাসেট একটি ডেটাসেট হল অনুমান-ভিত্তিক মূল্যায়নের জন্য ব্যবহার করা উদাহরণগুলির একটি সংগ্রহ। একটি ডেটাসেটে সাধারণত input এবং ঐচ্ছিক reference ক্ষেত্র থাকে। reference ক্ষেত্রটি মূল্যায়নের অনুমান ধাপকে প্রভাবিত করে না তবে এটি যেকোন মূল্যায়ন মেট্রিক্সে মৌখিকভাবে পাস করা হয়। জেনকিটে, আপনি Dev UI এর মাধ্যমে একটি ডেটাসেট তৈরি করতে পারেন। জেনকিটে দুই ধরনের ডেটাসেট রয়েছে: ফ্লো ডেটাসেট এবং মডেল ডেটাসেট।

স্কিমা বৈধতা

প্রকারের উপর নির্ভর করে, ডেভ UI-তে ডেটাসেটগুলির স্কিমা যাচাইকরণ সমর্থন রয়েছে:

  • ফ্লো ডেটাসেটগুলি জেনকিট অ্যাপ্লিকেশনে একটি প্রবাহের বিপরীতে ডেটাসেটের input এবং reference ক্ষেত্রগুলির বৈধতা সমর্থন করে৷ স্কিমা বৈধতা ঐচ্ছিক এবং শুধুমাত্র তখনই প্রয়োগ করা হয় যদি লক্ষ্য প্রবাহে একটি স্কিমা নির্দিষ্ট করা থাকে।

  • মডেল ডেটাসেটের অন্তর্নিহিত স্কিমা রয়েছে, যা string এবং GenerateRequest ইনপুট প্রকার উভয়কেই সমর্থন করে। স্ট্রিং বৈধতা সহজ পাঠ্য প্রম্পট মূল্যায়ন করার একটি সুবিধাজনক উপায় প্রদান করে, যখন GenerateRequest উন্নত ব্যবহারের ক্ষেত্রে সম্পূর্ণ নিয়ন্ত্রণ প্রদান করে (যেমন মডেল প্যারামিটার, বার্তা ইতিহাস, সরঞ্জাম, ইত্যাদি প্রদান)। আপনি আমাদের API রেফারেন্স ডক্সে GenerateRequest এর সম্পূর্ণ স্কিমা খুঁজে পেতে পারেন।

সমর্থিত মূল্যায়নকারীদের

Genkit মূল্যায়নকারী

আপনাকে শুরু করতে সাহায্য করতে জেনকিটে RAGAS দ্বারা অনুপ্রাণিত স্বল্প সংখ্যক দেশীয় মূল্যায়নকারী অন্তর্ভুক্ত রয়েছে:

  • বিশ্বস্ততা -- প্রদত্ত প্রসঙ্গের বিপরীতে উত্পন্ন উত্তরের বাস্তবিক সামঞ্জস্যতা পরিমাপ করে
  • উত্তর প্রাসঙ্গিকতা -- উত্পন্ন উত্তর প্রদত্ত প্রম্পটের সাথে কতটা প্রাসঙ্গিক তা মূল্যায়ন করে
  • দূষিততা -- উৎপন্ন আউটপুট প্রতারণা, ক্ষতি বা শোষণ করতে চায় কিনা তা পরিমাপ করে

মূল্যায়নকারী প্লাগইন

Genkit প্লাগইনগুলির মাধ্যমে অতিরিক্ত মূল্যায়নকারীদের সমর্থন করে, যেমন Vertex Rapid Evaluators, যা আপনি VertexAI প্লাগইনের মাধ্যমে অ্যাক্সেস করতে পারেন।

উন্নত ব্যবহার

CLI ব্যবহার করে মূল্যায়ন

Genkit CLI মূল্যায়ন করার জন্য একটি সমৃদ্ধ API প্রদান করে। এটি এমন পরিবেশে বিশেষভাবে উপযোগী যেখানে Dev UI উপলব্ধ নয় (যেমন একটি CI/CD কর্মপ্রবাহে)।

Genkit CLI 3টি প্রধান মূল্যায়ন কমান্ড প্রদান করে: eval:flow , eval:extractData , এবং eval:run

eval:flow কমান্ড

eval:flow কমান্ড একটি ইনপুট ডেটাসেটে অনুমান-ভিত্তিক মূল্যায়ন চালায়। এই ডেটাসেটটি একটি JSON ফাইল হিসাবে বা আপনার Genkit রানটাইমে বিদ্যমান ডেটাসেট উল্লেখ করে প্রদান করা যেতে পারে।

# Referencing an existing dataset
genkit eval:flow qaFlow --input myFactsQaDataset
# or, using a dataset from a file
genkit eval:flow qaFlow --input testInputs.json

এখানে, testInputs.json একটি input ক্ষেত্র এবং একটি ঐচ্ছিক reference ক্ষেত্র সমন্বিত অবজেক্টের একটি অ্যারে হওয়া উচিত, যেমন নীচে:

[
  {
    "input": "What is the French word for Cheese?",
  },
  {
    "input": "What green vegetable looks like cauliflower?",
    "reference": "Broccoli"
  }
]

যদি আপনার প্রবাহের জন্য প্রমাণীকরণের প্রয়োজন হয়, আপনি --context আর্গুমেন্ট ব্যবহার করে এটি নির্দিষ্ট করতে পারেন:

genkit eval:flow qaFlow --input testInputs.json --context '{"auth": {"email_verified": true}}'

ডিফল্টরূপে, eval:flow এবং eval:run কমান্ড মূল্যায়নের জন্য উপলব্ধ সমস্ত মেট্রিক ব্যবহার করে। কনফিগার করা মূল্যায়নকারীদের একটি উপসেটে চালানোর জন্য, --evaluators পতাকা ব্যবহার করুন এবং নাম অনুসারে মূল্যায়নকারীদের একটি কমা-বিচ্ছিন্ন তালিকা প্রদান করুন:

genkit eval:flow qaFlow --input testInputs.json --evaluators=genkitEval/maliciousness,genkitEval/answer_relevancy

আপনি localhost:4000/evaluate এ Dev UI-তে আপনার মূল্যায়নের ফলাফল দেখতে পারেন।

eval:extractData এবং eval:run কমান্ড

কাঁচা মূল্যায়ন সমর্থন করার জন্য, Genkit ট্রেস থেকে ডেটা বের করার জন্য সরঞ্জাম সরবরাহ করে এবং নিষ্কাশিত ডেটাতে মূল্যায়ন মেট্রিক্স চালায়। এটি উপযোগী, উদাহরণস্বরূপ, যদি আপনি মূল্যায়নের জন্য একটি ভিন্ন কাঠামো ব্যবহার করেন বা আপনি যদি আউটপুট মানের জন্য স্থানীয়ভাবে পরীক্ষা করার জন্য একটি ভিন্ন পরিবেশ থেকে অনুমান সংগ্রহ করছেন।

আপনি ব্যাচ আপনার Genkit ফ্লো চালাতে পারেন এবং রানে একটি অনন্য লেবেল যোগ করতে পারেন যা তারপর একটি মূল্যায়ন ডেটাসেট বের করতে ব্যবহার করা যেতে পারে। একটি কাঁচা মূল্যায়ন ডেটাসেট হল মূল্যায়ন মেট্রিক্সের জন্য ইনপুটগুলির একটি সংগ্রহ, কোনো পূর্বের অনুমান ছাড়াই

আপনার পরীক্ষার ইনপুটগুলির উপর আপনার প্রবাহ চালান:

genkit flow:batchRun qaFlow testInputs.json --label firstRunSimple

মূল্যায়ন ডেটা বের করুন:

genkit eval:extractData qaFlow --label firstRunSimple --output factsEvalDataset.json

পূর্বে উপস্থাপিত ডেটাসেট বিন্যাস থেকে রপ্তানি করা ডেটার বিন্যাস আলাদা। কারণ এই ডেটাটি কোনো অনুমান পদক্ষেপ ছাড়াই সরাসরি মূল্যায়ন মেট্রিক্সের সাথে ব্যবহার করার উদ্দেশ্যে করা হয়েছে। এখানে নিষ্কাশিত ডেটার সিনট্যাক্স রয়েছে।

Array<{
  "testCaseId": string,
  "input": any,
  "output": any,
  "context": any[],
  "traceIds": string[],
}>;

ডেটা এক্সট্র্যাক্টর স্বয়ংক্রিয়ভাবে পুনরুদ্ধারকারীদের সনাক্ত করে এবং প্রসঙ্গ অ্যারেতে উত্পাদিত ডক্স যোগ করে। আপনি eval:run কমান্ড ব্যবহার করে এই নিষ্কাশিত ডেটাসেটে মূল্যায়ন মেট্রিক্স চালাতে পারেন।

genkit eval:run factsEvalDataset.json

ডিফল্টরূপে, eval:run সমস্ত কনফিগার করা মূল্যায়নকারীদের বিরুদ্ধে চলে, এবং eval:flow এর মতো, eval:run এর ফলাফল বিকাশকারী UI-এর মূল্যায়ন পৃষ্ঠায় প্রদর্শিত হয়, যা localhost:4000/evaluate এ অবস্থিত।

কাস্টম এক্সট্র্যাক্টর

Genkit একটি মূল্যায়ন করার সময় প্রয়োজনীয় ক্ষেত্রগুলি ( input , output এবং context ) বের করার জন্য যুক্তিসঙ্গত ডিফল্ট যুক্তি প্রদান করে। যাইহোক, আপনি খুঁজে পেতে পারেন যে এই ক্ষেত্রগুলির জন্য নিষ্কাশন যুক্তির উপর আপনার আরও নিয়ন্ত্রণের প্রয়োজন। জেনকিট এটি অর্জন করতে কাস্টমস এক্সট্রাক্টরদের সমর্থন করে। আপনি eval:extractData এবং eval:flow কমান্ডে ব্যবহার করার জন্য কাস্টম এক্সট্র্যাক্টর প্রদান করতে পারেন।

প্রথমত, একটি প্রস্তুতিমূলক পদক্ষেপ হিসাবে, আমাদের qaFlow উদাহরণে একটি সহায়ক পদক্ষেপ প্রবর্তন করুন:

export const qaFlow = ai.defineFlow({
    name: 'qaFlow',
    inputSchema: z.string(),
    outputSchema: z.string(),
  },
  async (query) => {
    const factDocs = await ai.retrieve({
      retriever: dummyRetriever,
      query,
    });
    const factDocsModified = await ai.run('factModified', async () => {
        // Let us use only facts that are considered silly. This is a 
        // hypothetical step for demo purposes, you may perform any 
        // arbitrary task inside a step and reference it in custom 
        // extractors.
        //
        // Assume you have a method that checks if a fact is silly
        return factDocs.filter(d => isSillyFact(d.text));
    });

    const llmResponse = await ai.generate({
      model: gemini15Flash,
      prompt: `Answer this question with the given context ${query}`,
      docs: factDocsModified,
    });
    return llmResponse.text;
  }
);

এরপরে, এই প্রবাহের মূল্যায়ন করার সময় factModified ধাপের আউটপুট ব্যবহার করতে একটি কাস্টম এক্সট্র্যাক্টর কনফিগার করুন।

কাস্টম এক্সট্র্যাক্টর কনফিগার করার জন্য আপনার কাছে একটি টুল-কনফিগার ফাইল না থাকলে, আপনার প্রোজেক্ট রুটে genkit-tools.conf.js নামের একটি যোগ করুন।

cd /path/to/your/genkit/app
touch genkit-tools.conf.js

টুল কনফিগার ফাইলে, নিম্নলিখিত কোড যোগ করুন:

module.exports = {
  evaluators: [
    {
      actionRef: '/flow/qaFlow',
      extractors: {
        context: { outputOf: 'factModified' },
      },
    },
  ],
};

এই কনফিগারেশনটি জেনকিটের টুলিংয়ের ডিফল্ট এক্সট্র্যাক্টরগুলিকে ওভাররাইড করে, বিশেষত এই প্রবাহের মূল্যায়ন করার সময় context হিসাবে যা বিবেচনা করা হয় তা পরিবর্তন করে।

চলমান মূল্যায়ন আবার প্রকাশ করে যে প্রসঙ্গটি এখন স্টেপ factModified এর আউটপুট হিসাবে পপুলেট করা হয়েছে।

genkit eval:flow qaFlow --input testInputs.json

মূল্যায়ন নিষ্কাশনকারী নিম্নলিখিত হিসাবে নির্দিষ্ট করা হয়:

  • evaluators ক্ষেত্র EvaluatorConfig অবজেক্টের একটি অ্যারে গ্রহণ করে, যা flowName দ্বারা স্কোপ করা হয়
  • extractors হল একটি বস্তু যা এক্সট্র্যাক্টর ওভাররাইড নির্দিষ্ট করে। extractors বর্তমান সমর্থিত কীগুলি হল [input, output, context] । গ্রহণযোগ্য মান প্রকারগুলি হল:
    • string - এটি একটি ধাপের নাম হওয়া উচিত, একটি স্ট্রিং হিসাবে নির্দিষ্ট করা। এই ধাপের আউটপুট এই কীটির জন্য বের করা হয়।
    • { inputOf: string } বা { outputOf: string } - এই বস্তুগুলি একটি ধাপের নির্দিষ্ট চ্যানেল (ইনপুট বা আউটপুট) উপস্থাপন করে। উদাহরণস্বরূপ, { inputOf: 'foo-step' } এই কীটির জন্য পদক্ষেপ foo-step ইনপুট বের করবে।
    • (trace) => string; - আরও নমনীয়তার জন্য, আপনি একটি ফাংশন প্রদান করতে পারেন যা একটি জেনকিট ট্রেস গ্রহণ করে এবং any প্রকারের মান প্রদান করে এবং এই ফাংশনের ভিতরে নিষ্কাশন যুক্তি নির্দিষ্ট করে। সঠিক ট্রেসডেটা স্কিমার জন্য genkit/genkit-tools/common/src/types/trace.ts পড়ুন।

দ্রষ্টব্য: এই সমস্ত এক্সট্রাক্টরের জন্য নিষ্কাশিত ডেটা হল এক্সট্রাক্টরের সাথে সম্পর্কিত প্রকার। উদাহরণস্বরূপ, আপনি যদি প্রসঙ্গ ব্যবহার করেন: { outputOf: 'foo-step' } , এবং foo-step অবজেক্টের একটি অ্যারে প্রদান করে, নিষ্কাশিত প্রসঙ্গটিও অবজেক্টের একটি অ্যারে।

একটি এলএলএম ব্যবহার করে পরীক্ষার ডেটা সংশ্লেষণ করা

এখানে একটি উদাহরণ প্রবাহ যা সম্ভাব্য ব্যবহারকারীর প্রশ্ন তৈরি করতে একটি PDF ফাইল ব্যবহার করে।

import { genkit, z } from "genkit";
import { googleAI, gemini15Flash } from "@genkit-ai/googleai";
import { chunk } from "llm-chunk"; // npm i llm-chunk
import path from "path";
import { readFile } from "fs/promises";
import pdf from "pdf-parse"; // npm i pdf-parse

const ai = genkit({ plugins: [googleAI()] });

const chunkingConfig = {
  minLength: 1000, // number of minimum characters into chunk
  maxLength: 2000, // number of maximum characters into chunk
  splitter: "sentence", // paragraph | sentence
  overlap: 100, // number of overlap chracters
  delimiters: "", // regex for base split method
} as any;

async function extractText(filePath: string) {
  const pdfFile = path.resolve(filePath);
  const dataBuffer = await readFile(pdfFile);
  const data = await pdf(dataBuffer);
  return data.text;
}

export const synthesizeQuestions = ai.defineFlow(
  {
    name: "synthesizeQuestions",
    inputSchema: z.string().describe("PDF file path"),
    outputSchema: z.array(z.string()),
  },
  async (filePath) => {
    filePath = path.resolve(filePath);
    // `extractText` loads the PDF and extracts its contents as text.
    const pdfTxt = await ai.run("extract-text", () => extractText(filePath));

    const chunks = await ai.run("chunk-it", async () =>
      chunk(pdfTxt, chunkingConfig)
    );

    const questions: string[] = [];
    for (var i = 0; i < chunks.length; i++) {
      const qResponse = await ai.generate({
        model: gemini15Flash,
        prompt: {
          text: `Generate one question about the text below: ${chunks[i]}`,
        },
      });
      questions.push(qResponse.text);
    }
    return questions;
  }
);

তারপরে আপনি এই কমান্ডটি একটি ফাইলে ডেটা রপ্তানি করতে এবং মূল্যায়নের জন্য ব্যবহার করতে পারেন।

genkit flow:run synthesizeQuestions '"my_input.pdf"' --output synthesizedQuestions.json