Плагины AI Kernel
Навигация по созданию инструментов AiKernelPlugin, retrieval-плагинов и AI-расширений с учетом подтверждений.
Карта по AiKernelPlugin и discovery плагинов AI Kernel
AiKernelPlugin — это основная точка расширения, через которую возможности хоста становятся доступными для AI-сессий в виде вызываемых инструментов.
Для чего это используют
- Создать свой AI tool plugin.
- Дать модели безопасный доступ к просмотру или изменению состояния хоста.
- Добавить инструкции для сессии под конкретный набор инструментов.
- Подключить локальный retrieval к сессии.
- Требовать подтверждение перед рискованными вызовами инструментов.
- Переиспользовать один и тот же plugin и в чате, и в MCP.
Как это устроено
- Плагин — это обычный .NET-объект, унаследованный от
AiKernelPlugin. - Публичные instance-методы с атрибутом
[KernelFunction("tool_name")]после регистрации плагина становятся инструментами. [Description]у методов и параметров превращается в метаданные инструмента и подсказки для схемы.IAiSession.AddOrUpdatePlugin("plugin_name", plugin)подключает плагин к сессии чата, MCP или coding-agent.IAiPluginHostхранит регистрации и собирает плоский каталог инструментов.- У инструмента есть два уровня идентичности:
- имя регистрации плагина, например
docs; - явное имя функции, например
doc_search.
- имя регистрации плагина, например
- Внешние имена инструментов могут содержать только буквы, цифры,
_и-. - Имена функций инструментов должны быть уникальны среди всех зарегистрированных плагинов внутри одного plugin host.
- Параметры привязываются по имени из
KernelArguments; поддерживаются строки, числа, enum, GUID, URI, JSON elements, nullable-типы и простая сериализация объектов. - Параметры
CancellationTokenподставляются рантаймом автоматически и не показываются модели как аргументы.
Контексты хоста и рантайма
- Сервисы приложения и Razor view model обычно создают экземпляры плагинов через constructor injection или локальную композицию.
- AI в редакторе скриптов использует configurator-ы вроде
IScriptAiChatSessionConfigurator, чтобы подключать к сессии плагины с доступом к workspace. - Обычные helper-классы должны явно получать plugin, session или сервисы host-а. Не рассчитывайте на top-level удобства, доступные в скриптах.
- В MCP-hosting используются те же методы
AiKernelPlugin, но инструкции берутся изGetMcpServerInstructions.
Минимальная форма плагина
using System.ComponentModel;
using EyeAuras.AI.SemanticKernel;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
public sealed class WorkspaceSummaryPlugin : AiKernelPlugin
{
private readonly IWorkspaceIndex workspaceIndex;
public WorkspaceSummaryPlugin(IWorkspaceIndex workspaceIndex)
{
this.workspaceIndex = workspaceIndex;
}
public override void InitializeChatHistory(in ChatHistory chatHistory)
{
chatHistory.AddSystemMessage(
"Use workspace_summary_get before making claims about workspace state.");
}
[KernelFunction("workspace_summary_get")]
[Description("Return a concise summary of the current workspace state.")]
public WorkspaceSummary GetSummary(
[Description("Maximum number of items to include.")] int maxItems = 20,
CancellationToken cancellationToken = default)
{
cancellationToken.ThrowIfCancellationRequested();
return workspaceIndex.GetSummary(maxItems);
}
}
Регистрация:
session.AddOrUpdatePlugin("workspace", new WorkspaceSummaryPlugin(index));
Детали API
AiKernelPlugin.InitializeKernel— настройка session-scoped Semantic Kernel после регистрации плагина.AiKernelPlugin.InitializeChatHistory— добавляет стартовые system message вChatHistory.AiKernelPlugin.GetChatHistoryBootstrapSystemMessages— извлекает уникальные system message изInitializeChatHistory.AiKernelPlugin.GetMcpServerInstructions— экспортирует инструкции при работе через MCP; по умолчанию использует те же system message.AiKernelPlugin.GetRetrievalServices— возвращает экземплярыIAiRetrievalService, которые могут добавлять контекст в запросы модели.AiKernelPlugin.AiFunctionApprovalCallback— plugin-level hook для подтверждения рискованных вызовов инструментов.AiKernelPluginRegistration— имя плагина плюс его экземпляр.IAiPluginHost.AddOrUpdatePlugin— валидирует и сохраняет плагин.IAiPluginHost.ListTools— отражает методы с[KernelFunction]в значенияAiToolDescriptor.IAiPluginHost.InvokeToolAsync— вызывает зарегистрированный инструмент по имени plugin/tool.AiToolDescriptorиAiToolParameterDescriptor— нормализованные записи каталога инструментов.AiFunctionInvocationPolicy— session-level allowlist, denylist, режим подтверждения по умолчанию и approval callback.AiToolCallFilter— runtime enforcement и telemetry для вызовов инструментов Semantic Kernel.
Retrieval-плагины
Используйте retrieval, когда модели нужен локальный контекст до того, как она решит, вызывать ли инструменты.
- Реализуйте или переиспользуйте
IAiRetrievalService. - Верните его из
AiKernelPlugin.GetRetrievalServices. - Сессия объединяет retrieval-сервисы в
CompositeAiRetrievalService. - Retrieval payload-ы добавляются в контекст запроса через
AiConversationEngine. AiDocsKnowledgeBasePlugin— встроенный пример для markdown-документов:IBm25KnowledgeBase,Bm25Document,Bm25SearchQueryиBm25SearchHit.
Подтверждение вызова инструментов
- Используйте
AiFunctionInvocationPolicy, если в сессии есть инструменты, которые могут менять состояние, работать с файлами, отправлять input, вызывать внешние сервисы или запускать дорогие операции. - Правила сопоставления принимают либо короткие имена инструментов, либо имена в формате
plugin.tool. - Инструменты из whitelist запускаются без подтверждения.
- Инструменты из blacklist требуют подтверждения, даже если режим по умолчанию разрешает вызовы.
- При
AiFunctionInvocationDefaultMode.RequireApprovalвсе инструменты вне whitelist требуют approval callback. AiFunctionApprovalResult.Allowвыполняет инструмент.AiFunctionApprovalResult.Denyблокирует его и может вернуть synthetic result.AiFunctionApprovalResult.Handledпропускает реальный вызов и возвращает результат callback-а.
Типовые сценарии
Добавить простой инструмент
- Создайте класс, унаследованный от
AiKernelPlugin. - Добавьте публичные методы с
[KernelFunction("stable_tool_name")]. - Добавьте
[Description]к методу и каждому пользовательскому параметру. - Добавьте
CancellationTokenв инструменты, которые могут работать долго. - Зарегистрируйте плагин через
session.AddOrUpdatePlugin. - Проверьте результат через
session.PluginHost.ListTools.
Добавить инструмент с инструкциями
- Переопределите
InitializeChatHistory. - Добавьте короткие system-инструкции, которые объясняют модели, когда и как использовать инструменты.
- По возможности делайте инструкции независимыми от конкретного host-а.
- Зарегистрируйте плагин до первого сообщения пользователя.
- Если тот же плагин используется через MCP, переопределяйте
GetMcpServerInstructionsтолько если для MCP нужны отдельные инструкции.
Добавить поиск по документации
- Создайте
AiDocsKnowledgeBasePlugin. - Добавьте markdown-документы через
AddOrUpdateDocumentили directory helper-ы. - Пометьте постоянные инструкции как pinned через
Bm25Document.IsPinned. - Вызовите
ReindexAsyncдо того, как откроете chat UI пользователю. - Зарегистрируйте плагин под стабильным именем, например
docs.
Рекомендуется
- Использовать стабильные имена инструментов в формате snake_case.
- Делать небольшие плагины под конкретную задачу вместо одного большого смешанного плагина.
- Возвращать структурированные records вместо обычного текста, если результат должен быть машиночитаемым.
- Явно передавать зависимости в конструктор плагина.
- Добавлять
CancellationTokenв инструменты, которые читают файлы, сканируют данные, вызывают сервисы или ждут внешнее состояние. - Использовать approval policy для изменяющих или потенциально опасных инструментов.
- Использовать pinned docs для постоянных правил поведения.
Не рекомендуется
- Дублировать имена инструментов в зарегистрированных плагинах.
- Полагаться на имена методов C# как на публичные имена инструментов; используйте явный
[KernelFunction("...")]. - Возвращать огромные строки там, где безопаснее paged/list/read workflow.
- Писать промпты, которые говорят модели использовать недоступные сервисы.
- Делать инструменты, которые молча меняют состояние без понятного имени и описания.
- Блокироваться навсегда внутри инструмента; учитывайте cancellation.
Опорные сущности для изучения
AiKernelPluginKernelFunctionAttributeDescriptionAttributeAiKernelPluginRegistrationIAiPluginHostAiPluginHostAiToolDescriptorAiToolInvocationResultAiFunctionInvocationPolicyAiFunctionApprovalRequestAiFunctionApprovalResultAiToolCallFilterIAiRetrievalServiceAiDocsKnowledgeBasePluginAiArtifactStorePluginAiScriptingToolsPluginAiScriptingInMemoryToolsPluginAiScriptingOnDiskToolsPluginReToolsPluginEyeAurasBlazorWindowPlugin
Синонимы для поиска
- AI tool
- tool calling
- function calling
- kernel function
- kernel plugin
- Semantic Kernel plugin
- plugin host
- tool schema
- tool catalog
- approval callback
- allowlist
- denylist
- retrieval plugin
- RAG plugin
- docs plugin
- MCP tools
Связанные карты
ml/ai-runtime.mdml/ai.mdscripting/runtime.mdreverse-engineering/reprocess.mdrecipes/script-ai-editor-assistant.md