Что такое фильтры?
Фильтры повышают безопасность, обеспечивая контроль и видимость того, как выполняются функции. Это необходимо, чтобы приступить к работе ответственных принципов ИИ, чтобы вы чувствовали, что ваше решение готово к работе.
Например, фильтры используются для проверки разрешений перед началом потока утверждения. Выполняется IFunctionInvocationFilter
проверка разрешений пользователя, который хочет отправить утверждение. Это означает, что только выбранная группа людей сможет начать процесс.
Хороший пример фильтров представлен здесь в нашем подробном блоге блога о семантике ядра на фильтрах.
Существует 3 типа фильтров:
- Фильтр вызова функции — он выполняется каждый раз при
KernelFunction
вызове. Позволяет получать сведения о функции, которая будет выполняться, его аргументы, перехватывать исключение во время выполнения функции, переопределять результат функции, повторить выполнение функции в случае сбоя (можно использовать для переключения на другую модель ИИ). - Фильтр отрисовки запроса — он выполняется перед операцией отрисовки запроса. Позволяет узнать, какие запросы будут отправляться в ИИ, изменять запрос (например, RAG, сценарии редактирования PII) и предотвращать отправку запроса в ИИ с переопределением результатов функции (можно использовать для кэширования семантики).
- Фильтр автоматического вызова функции , аналогичный фильтру вызова функции, но он выполняется в области операции, поэтому он содержит дополнительные сведения в контексте, включая журнал чата
automatic function calling
, список всех функций, которые будут выполняться и запрашивать счетчики итерации. Он также позволяет завершить процесс вызова автоматической функции (например, есть 3 функции для выполнения, но уже есть нужный результат из второй функции).
Каждый фильтр содержит context
объект, содержащий все сведения, связанные с выполнением функции или отрисовкой запроса. Вместе с контекстом также существует делегат или обратный next
вызов, который выполняет следующий фильтр в конвейере или функции. Это обеспечивает больший контроль, и это полезно в случае, если есть некоторые причины, чтобы избежать выполнения функции (например, вредоносных аргументов запроса или функции). Можно зарегистрировать несколько фильтров одного типа, где каждый фильтр будет отвечать по-разному.
Пример фильтра вызова функции для выполнения ведения журнала до и после вызова функции:
public sealed class LoggingFilter(ILogger logger) : IFunctionInvocationFilter
{
public async Task OnFunctionInvocationAsync(FunctionInvocationContext context, Func<FunctionInvocationContext, Task> next)
{
logger.LogInformation("FunctionInvoking - {PluginName}.{FunctionName}", context.Function.PluginName, context.Function.Name);
await next(context);
logger.LogInformation("FunctionInvoked - {PluginName}.{FunctionName}", context.Function.PluginName, context.Function.Name);
}
}
Пример фильтра отрисовки запроса, который переопределяет отрисованный запрос перед отправкой в ИИ:
public class SafePromptFilter : IPromptRenderFilter
{
public async Task OnPromptRenderAsync(PromptRenderContext context, Func<PromptRenderContext, Task> next)
{
// Example: get function information
var functionName = context.Function.Name;
await next(context);
// Example: override rendered prompt before sending it to AI
context.RenderedPrompt = "Safe prompt";
}
}
Пример фильтра вызова автоматической функции, который завершает процесс вызова функции, как только у нас есть нужный результат:
public sealed class EarlyTerminationFilter : IAutoFunctionInvocationFilter
{
public async Task OnAutoFunctionInvocationAsync(AutoFunctionInvocationContext context, Func<AutoFunctionInvocationContext, Task> next)
{
await next(context);
var result = context.Result.GetValue<string>();
if (result == "desired result")
{
context.Terminate = true;
}
}
}
Дополнительные сведения
C#/.NET:
- Примеры фильтров вызовов функций
- Примеры фильтра отрисовки запроса
- Примеры фильтров автоматического вызова функции
- Обнаружение и редактирование piI с фильтрами
- Семантическое кэширование с помощью фильтров
- Безопасность содержимого с фильтрами
- Сводка текста и проверка качества перевода с помощью фильтров