CodeShot

Plugins در مقابل Planners

Plugin در Semantic Kernel یک مجموعه از توابع مشخص (کد C#/Python یا پرامپت) است که مدل می‌تواند مستقیماً فراخوانی کند، در حالی که Planner جزئی از Kernel است که بر اساس یک هدف کلی، خودش تصمیم می‌گیرد چه ترتیبی از Plugin ها را برای رسیدن به آن هدف فراخوانی کند.

ویژگیPluginsPlanners
نقشارائه یک قابلیت مشخصتعیین ترتیب اجرای Plugin ها
فراخوانیمستقیم توسط مدلخودکار بر اساس هدف کلی
وابستگیمستقلبه کیفیت توضیح Plugin ها

کِی از Plugins استفاده کنیم؟

وقتی می‌خواهید یک قابلیت مشخص و مستقل (مثل گرفتن آب‌وهوا یا محاسبه) را در اختیار مدل قرار دهید.

کِی از Planners استفاده کنیم؟

وقتی هدف پیچیده است و نیاز دارید Kernel خودش مسیر رسیدن به هدف را از میان چند Plugin موجود کشف و اجرا کند.

مثال Plugins

kernel.Plugins.AddFromType<WeatherPlugin>();
kernel.Plugins.AddFromType<EmailPlugin>();
// هر دو Plugin به‌صورت مستقیم قابل فراخوانی‌اند

مثال Planners

var planner = new FunctionCallingStepwisePlanner();
var result = await planner.ExecuteAsync(kernel,
    "هوای تهران را بگیر و برای من ایمیل کن");
// Planner خودش ترتیب فراخوانی Plugin ها را تعیین می‌کند

اشتباه رایج

اشتباه رایج تعریف Plugin های بسیار مبهم یا با توضیحات ضعیف است؛ چون Planner برای تصمیم‌گیری درباره ترتیب فراخوانی کاملاً به توضیح (Description) هر Plugin وابسته است، توضیح ناقص باعث انتخاب نادرست یا شکست برنامه‌ریزی می‌شود.

جمع‌بندی

برای فراخوانی مستقیم و مشخص یک قابلیت از Plugin و برای رسیدن خودکار به یک هدف کلی از میان چند Plugin از Planner استفاده کنید.