টুল কলিং

টুল কলিং , যা ফাংশন কলিং নামেও পরিচিত, এটি একটি কাঠামোগত উপায় যা এলএলএম-কে এটিকে কল করা অ্যাপ্লিকেশনটিতে অনুরোধ করার ক্ষমতা প্রদান করে। আপনি মডেলের জন্য উপলব্ধ করতে চান এমন সরঞ্জামগুলিকে সংজ্ঞায়িত করুন এবং আপনি যে প্রম্পটগুলি দেবেন তা পূরণ করার জন্য মডেলটি আপনার অ্যাপে প্রয়োজনীয় টুল অনুরোধ করবে৷

টুল কলিং ব্যবহারের ক্ষেত্রে সাধারণত কয়েকটি থিমের মধ্যে পড়ে:

একটি LLM-কে তথ্যের অ্যাক্সেস দেওয়া যা এটির সাথে প্রশিক্ষিত ছিল না

  • ঘন ঘন তথ্য পরিবর্তন করা, যেমন একটি স্টক মূল্য বা বর্তমান আবহাওয়া।
  • আপনার অ্যাপ ডোমেনের জন্য নির্দিষ্ট তথ্য, যেমন পণ্যের তথ্য বা ব্যবহারকারীর প্রোফাইল।

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

একটি LLM কর্মপ্রবাহের মধ্যে একটি ডিটারমিনিজমের পরিচয়

  • LLM নির্ভরযোগ্যভাবে নিজেকে সম্পূর্ণ করতে পারে না এমন গণনা সম্পাদন করা।
  • একটি LLM কে কিছু নির্দিষ্ট পরিস্থিতিতে শব্দার্থে পাঠ্য তৈরি করতে বাধ্য করা, যেমন একটি অ্যাপের পরিষেবার শর্তাবলী সম্পর্কে একটি প্রশ্নের উত্তর দেওয়ার সময়।

LLM দ্বারা সূচনা করার সময় একটি কর্ম সম্পাদন করা

  • এলএলএম-চালিত হোম অ্যাসিস্ট্যান্টে লাইট অন এবং অফ করা
  • এলএলএম-চালিত রেস্তোরাঁর এজেন্টে টেবিল রিজার্ভেশন

আপনি শুরু করার আগে

আপনি যদি এই পৃষ্ঠায় কোডের উদাহরণগুলি চালাতে চান, তাহলে প্রথমে শুরু করা গাইডের ধাপগুলি সম্পূর্ণ করুন৷ সমস্ত উদাহরণ অনুমান করে যে আপনি ইতিমধ্যে Genkit নির্ভরতা ইনস্টল সহ একটি প্রকল্প সেট আপ করেছেন।

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

টুল কলিং এর ওভারভিউ

একটি উচ্চ স্তরে, একটি LLM-এর সাথে একটি সাধারণ টুল-কলিং মিথস্ক্রিয়া এইরকম দেখায়:

  1. কলিং অ্যাপ্লিকেশনটি একটি অনুরোধের সাথে LLM কে অনুরোধ করে এবং প্রম্পটে এমন সরঞ্জামগুলির একটি তালিকা অন্তর্ভুক্ত করে যা LLM একটি প্রতিক্রিয়া তৈরি করতে ব্যবহার করতে পারে।
  2. এলএলএম হয় একটি সম্পূর্ণ প্রতিক্রিয়া তৈরি করে বা একটি নির্দিষ্ট বিন্যাসে একটি টুল কল অনুরোধ তৈরি করে।
  3. যদি কলকারী একটি সম্পূর্ণ প্রতিক্রিয়া পায়, অনুরোধটি পূর্ণ হয় এবং মিথস্ক্রিয়া শেষ হয়; কিন্তু যদি কলকারী একটি টুল কল গ্রহণ করে, তবে এটি যুক্তিযুক্ত যাই হোক না কেন তা সঞ্চালন করে এবং LLM-কে একটি নতুন অনুরোধ পাঠায় যাতে মূল প্রম্পট বা এর কিছু ভিন্নতা এবং সেইসাথে টুল কলের ফলাফল থাকে।
  4. LLM ধাপ 2-এর মতো নতুন প্রম্পট পরিচালনা করে।

এটি কাজ করার জন্য, বেশ কয়েকটি প্রয়োজনীয়তা পূরণ করতে হবে:

  • মডেলটিকে অবশ্যই প্রম্পট সম্পূর্ণ করার প্রয়োজন হলে টুল অনুরোধ করার জন্য প্রশিক্ষিত হতে হবে। জেমিনি এবং ক্লডের মতো ওয়েব API-এর মাধ্যমে সরবরাহ করা বেশিরভাগ বড় মডেলগুলি এটি করতে পারে, তবে ছোট এবং আরও বিশেষায়িত মডেলগুলি প্রায়শই করতে পারে না। Genkit একটি ত্রুটি নিক্ষেপ করবে যদি আপনি এমন একটি মডেলকে সরঞ্জাম সরবরাহ করার চেষ্টা করেন যা এটি সমর্থন করে না।
  • কলিং অ্যাপ্লিকেশানটিকে অবশ্যই মডেলটিকে টুলের সংজ্ঞা প্রদান করতে হবে যা এটি প্রত্যাশা করে৷
  • কলিং অ্যাপ্লিকেশানটি অবশ্যই মডেলটিকে অনুরোধ করবে যে ফর্ম্যাটে অ্যাপ্লিকেশনটি প্রত্যাশা করে টুল কলিং অনুরোধগুলি তৈরি করতে৷

Genkit সঙ্গে টুল কলিং

Genkit এটি সমর্থন করে এমন মডেলগুলির সাথে টুল কল করার জন্য একটি একক ইন্টারফেস প্রদান করে। প্রতিটি মডেল প্লাগইন নিশ্চিত করে যে উপরের মানদণ্ডের শেষ দুটি পূরণ হয়েছে এবং Genkit ইনস্ট্যান্সের generate() ফাংশন স্বয়ংক্রিয়ভাবে পূর্বে বর্ণিত টুল কলিং লুপটি বহন করে।

মডেল সমর্থন

টুল কলিং সমর্থন মডেল, মডেল API, এবং Genkit প্লাগইনের উপর নির্ভর করে। টুল কলিং সমর্থিত হতে পারে কিনা তা নির্ধারণ করতে প্রাসঙ্গিক ডকুমেন্টেশনের সাথে পরামর্শ করুন। উপরন্তু:

  • Genkit একটি ত্রুটি নিক্ষেপ করবে যদি আপনি এমন একটি মডেলকে সরঞ্জাম সরবরাহ করার চেষ্টা করেন যা এটি সমর্থন করে না।
  • যদি প্লাগইন মডেলের রেফারেন্স রপ্তানি করে, তাহলে info.supports.tools প্রপার্টি নির্দেশ করবে যে এটি টুল কলিং সমর্থন করে কিনা।

সংজ্ঞায়িত সরঞ্জাম

টুল সংজ্ঞা লিখতে Genkit উদাহরণ এর defineTool() ফাংশন ব্যবহার করুন:

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/google-ai';

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

const getWeather = ai.defineTool(
  {
    name: 'getWeather',
    description: 'Gets the current weather in a given location',
    inputSchema: z.object({ 
      location: z.string().describe('The location to get the current weather for')
    }),
    outputSchema: z.string(),
  },
  async (input) => {
    // Here, we would typically make an API call or database query. For this
    // example, we just return a fixed value.
    return 'The current weather in ${input.location} is 63°F and sunny.';
  }
);

এখানে সিনট্যাক্স দেখতে ঠিক defineFlow() সিনট্যাক্সের মতো; যাইহোক, name , description , inputSchema , এবং outputSchema পরামিতির চারটিই প্রয়োজন৷ একটি টুলের সংজ্ঞা লেখার সময়, এই পরামিতিগুলির শব্দ এবং বর্ণনার সাথে বিশেষ যত্ন নিন, কারণ এগুলি এলএলএম-এর জন্য উপলব্ধ সরঞ্জামগুলি কার্যকরভাবে ব্যবহার করার জন্য অত্যাবশ্যক।

টুল ব্যবহার করে

বিষয়বস্তু তৈরি করতে আপনার প্রম্পটে সংজ্ঞায়িত সরঞ্জামগুলি অন্তর্ভুক্ত করুন।

তৈরি করুন

const response = await ai.generate({
  prompt: 'What is the weather in Baltimore?',
  tools: [getWeather],
});

সংজ্ঞায়িত প্রম্পট

const weatherPrompt = ai.definePrompt(
  {
    name: 'weatherPrompt',
    tools: [getWeather],
  },
  'What is the weather in {{location}}?'
);

const response = await weatherPrompt({ location: 'Baltimore' });

প্রম্পট ফাইল

---
system: "Answer questions using the tools you have."
tools: [getWeather]
input:
  schema:
    location: string
---

What is the weather in {{location}}?

তারপর আপনি নিম্নলিখিত হিসাবে আপনার কোডে প্রম্পট চালাতে পারেন:

// assuming prompt file is named weatherPrompt.prompt
const weatherPrompt = ai.prompt('weatherPrompt');

const response = await weatherPrompt({ location: 'Baltimore' });

চ্যাট

const chat = ai.chat({
  system: 'Answer questions using the tools you have.',
  tools: [getWeather],
});

const response = await chat.send('What is the weather in Baltimore?');

// Or, specify tools that are message-specific 
const response = await chat.send({
  prompt: 'What is the weather in Baltimore?',
  tools: [getWeather],
});

প্রম্পটের উত্তর দেওয়ার জন্য LLM-কে getWeather টুল ব্যবহার করতে হলে Genkit স্বয়ংক্রিয়ভাবে টুল কলটি পরিচালনা করবে।

স্পষ্টভাবে টুল কল পরিচালনা

ডিফল্টরূপে, প্রতিটি টুল কলের সমাধান না হওয়া পর্যন্ত Genkit বারবার LLM-কে কল করে। আপনি যদি এই টুল কলিং লুপের উপর আরও নিয়ন্ত্রণ চান, উদাহরণস্বরূপ আরও জটিল যুক্তি প্রয়োগ করতে, returnToolRequests প্যারামিটারটিকে true সেট করুন। এখন সমস্ত টুল অনুরোধ পূর্ণ হয়েছে তা নিশ্চিত করার দায়িত্ব আপনার:

const getWeather = ai.defineTool(
  {
    // ... tool definition ...
  },
  async ({ location }) => {
    // ... tool implementation ...
  },
);

const generateOptions: GenerateOptions = {
  prompt: "What's the weather like in Baltimore?",
  tools: [getWeather],
  returnToolRequests: true,
};

let llmResponse;
while (true) {
  llmResponse = await ai.generate(generateOptions);
  const toolRequests = llmResponse.toolRequests;
  if (toolRequests.length < 1) {
    break;
  }
  const toolResponses: ToolResponsePart[] = await Promise.all(
    toolRequests.map(async (part) => {
      switch (part.toolRequest.name) {
        case 'specialTool':
          return {
            toolResponse: {
              name: part.toolRequest.name,
              ref: part.toolRequest.ref,
              output: await getWeather(part.toolRequest.input),
            },
          };
        default:
          throw Error('Tool not found');
      }
    })
  );
  generateOptions.messages = llmResponse.messages;
  generateOptions.prompt = toolResponses;
}