দক্ষতার মাধ্যমে RMI ADK এজেন্টদের ডোমেইন বিশেষজ্ঞতায় ভিত্তি স্থাপন করা

সংক্ষিপ্ত বিবরণ

বৃহৎ ল্যাঙ্গুয়েজ মডেলগুলোর ব্যাপক সাধারণ জ্ঞান থাকে, কিন্তু তারা আপনার ডোমেইনের নির্দিষ্ট মেট্রিক্স, ডাটাবেস স্কিমা বা গণনার সূত্রগুলো জানে না। এই প্রেক্ষাপট ছাড়া, মডেলটি অনুমান করে, যার ফলে ভুল SQL এবং ত্রুটিপূর্ণ বিশ্লেষণ তৈরি হয়।

RMI ADK এজেন্ট তার দক্ষতার মাধ্যমে এই সীমাবদ্ধতাটি দূর করে। ধরা যাক, একজন ব্যবহারকারী জিজ্ঞাসা করছেন , "গতকাল স্টোরো ড্রাইভে যানজট কেমন ছিল?" । এর উত্তর দেওয়ার জন্য, এজেন্টকে জানতে হবে যে RMI যানজটকে ট্র্যাভেল টাইম ইনডেক্স (TTI) হিসাবে প্রকাশ করে, যা হলো historical_travel_time টেবিলের live duration_in_seconds এবং free-flow static_duration_in_seconds এর অনুপাত। দক্ষতা ছাড়া কোনো এজেন্ট এর পরিবর্তে একটি average_speed কলাম তৈরি করতে পারে (RMI শুধুমাত্র ক্যাটাগরিক্যাল গতি রিপোর্ট করে, কখনও কিমি/ঘণ্টা নয়) অথবা ভুল ফর্মুলা প্রয়োগ করতে পারে, যার ফলে একটি আত্মবিশ্বাসী কিন্তু ভুল উত্তর পাওয়া যাবে।

যদিও এজেন্টের এই ডোমেইন জ্ঞানের প্রয়োজন আছে, প্রতিটি মেট্রিক সংজ্ঞা, টেবিল স্কিমা এবং SQL সতর্কতাকে একটিমাত্র সিস্টেম প্রম্পটে রাখা অদক্ষতার পরিচায়ক।

বৃহৎ সিস্টেম প্রম্পটের সীমাবদ্ধতা

সমস্ত ডোমেইন নিয়ম এবং স্কিমা একটিমাত্র সিস্টেম প্রম্পটে রাখলে বেশ কিছু সমস্যা দেখা দেয়:

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

দক্ষতা

এজেন্ট স্কিলস ডোমেইন জ্ঞানকে মডিউলার ফোল্ডারে সাজিয়ে রাখে, যা এজেন্ট শুধুমাত্র প্রয়োজনের সময় লোড করে। প্রতিটি স্কিল হলো একটি ডিরেক্টরি, যার মধ্যে মার্কডাউন নির্দেশাবলী এবং একটি YAML হেডার সহ একটি SKILL.md ফাইল থাকে।

শুরুতেই সবকিছু লোড করার পরিবর্তে, এজেন্ট প্রতিটি দক্ষতার সংক্ষিপ্ত description শুধু তার মূল প্রম্পটে রাখে। যখন কোনো ব্যবহারকারী কোনো দক্ষতা-সম্পর্কিত প্রশ্ন জিজ্ঞাসা করে, তখন এজেন্ট সেই টার্নের জন্য সম্পূর্ণ নির্দেশাবলী লোড করে। এর ফলে প্রম্পটগুলো ছোট থাকে এবং প্রকৃত কথোপকথনের ইতিহাসের জন্য কনটেক্সট স্পেস সাশ্রয় হয়।

স্কিলগুলো কাজের একটি সুস্পষ্ট বিভাজনও প্রদান করে: আপনি সম্পর্কহীন ডোমেইনগুলোতে অনাকাঙ্ক্ষিত পার্শ্বপ্রতিক্রিয়ার ঝুঁকি ছাড়াই স্বতন্ত্র সক্ষমতাগুলোকে আলাদাভাবে লিখতে, পরীক্ষা করতে এবং আপডেট করতে পারেন। একজন প্রোডাকশন এজেন্ট সাধারণত একটি বিশাল প্রম্পটের পরিবর্তে একাধিক সুনির্দিষ্ট স্কিল ব্যবহার করে।

একটি দক্ষতার গঠন

একটি SKILL.md ফাইলের দুটি অংশ থাকে: রাউটিংয়ের জন্য একটি YAML হেডার এবং নির্দেশাবলীর জন্য একটি Markdown বডি।

১. YAML হেডার

---
name: rmi-traffic-metrics-grounding
description: >
  Standard traffic performance metrics computable from RMI BigQuery
  tables. Covers congestion severity (TTI), delay, travel time
  reliability (LOTTR, BTI, PTI, CoV), congestion frequency, speed
  breakdowns, and network-wide congestion rates. Use when the user asks
  about traffic conditions, congestion, reliability, delay, or network
  health.
---

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

২. মার্কডাউন বডি

বডিটি সেই ডোমেইন-নির্দিষ্ট নির্দেশনা প্রদান করে যা মডেলটি লোড হওয়ার পর অনুসরণ করে। RMI মেট্রিক্স স্কিল বডিতে সঠিক TTI ফর্মুলা ( duration_in_seconds / static_duration_in_seconds ), প্রতিটি মেট্রিক্সের জন্য একটি যাচাইকৃত BigQuery SQL টেমপ্লেট এবং ট্রিগার ফ্রেজ অন্তর্ভুক্ত থাকে, যা ব্যবহারকারীর উদ্দেশ্যকে সঠিক মেট্রিক্সের সাথে সংযুক্ত করে। কাঠামোগত ও যাচাইকৃত নির্দেশনা প্রদান মডেলটিকে বাস্তবসম্মত রাখে এবং এটিকে স্কিমা বা ফর্মুলার খুঁটিনাটি অনুমান করা থেকে বিরত রাখে।

ADK-এর সাথে দক্ষতা নিবন্ধন করুন

দক্ষতাগুলোকে একটি SkillToolset এ একত্রিত করুন এবং এজেন্টের টুল তালিকায় যোগ করুন:

from google.adk import skills
from google.adk.tools import skill_toolset

rmi_skill_toolset = skill_toolset.SkillToolset(
    skills=[
        # TRAFFIC_METRICS_SKILL_DIR points to the skill's SKILL.md folder.
        skills.load_skill_from_dir(TRAFFIC_METRICS_SKILL_DIR),
    ],
)

# root_agent = llm_agent.Agent(..., tools=[*bq_tools, rmi_skill_toolset])

এখানে, TRAFFIC_METRICS_SKILL_DIR সেই ডিরেক্টরিকে নির্দেশ করে যেখানে ট্র্যাফিক মেট্রিক্স গ্রাউন্ডিং স্কিলটি রয়েছে।

দক্ষতার সাথে সরঞ্জাম একত্রিত করুন

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

টুলগুলোকে একসাথে যুক্ত করার ফলে গ্লোবাল কনটেক্সট ব্লটও এড়ানো যায়। প্রতিটি বিশেষায়িত টুলকে শুরুতেই উন্মুক্ত করার পরিবর্তে, টুলগুলোকে এমনভাবে স্কোপ করা হয় যাতে সেগুলো কেবল তখনই লোড হয় যখন তাদের সংশ্লিষ্ট ডোমেইন স্কিলটি সক্রিয় থাকে।

আপনি কোনো স্কিলের YAML হেডারে সরাসরি নির্দিষ্ট টুল সংযুক্ত করতে পারেন:

metadata:
  adk_additional_tools:
    - calculate_custom_metric

এর ফলে মডেলটি ঠিক সময়ে টুল স্কিমা এবং এর ব্যবহারের নির্দেশাবলী উভয়ই একসাথে পেয়ে যায়, যা মূল টুলসেটটিকে সংক্ষিপ্ত রাখে।

উদাহরণ: একটি কনজেশন কোয়েরি গ্রাউন্ডিং করা

  1. ব্যবহারকারী জিজ্ঞাসা করেছেন , "সন্ধ্যার ব্যস্ত সময়ে স্টোরো ড্রাইভে কতটা যানজট থাকে?"
  2. বেস সিস্টেম প্রম্পট প্রতিটি স্কিলের শুধু নাম এবং বিবরণ প্রদর্শন করে, তাই এজেন্ট দেখে যে rmi-traffic-metrics-grounding 'congestion' বিষয়টিকে অন্তর্ভুক্ত করে এবং এই কোয়েরির জন্য এর সম্পূর্ণ নির্দেশাবলী সংগ্রহ করতে load_skill কল করে।
  3. স্কিলটি লোড হয়ে গেলে, এজেন্ট কোনো ফর্মুলা অনুমান করার পরিবর্তে TTI-এর সংজ্ঞা এবং এর দেওয়া যাচাইকৃত SQL টেমপ্লেটটি প্রয়োগ করে historical_travel_time সাথে অনুপাতটি গণনা করে।

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

মূল বিষয়বস্তু

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

পরবর্তী পদক্ষেপ

অবদানকারীরা

নাথানিয়েল থমাস | সফটওয়্যার ইঞ্জিনিয়ারিং ইন্টার্ন, গুগল ম্যাপস প্ল্যাটফর্ম