Filtrovat vyvolané funkce
Filtry v sémantickém jádru umožňují vývojářům spravovat a zabezpečit spouštění funkcí tím, že umožňují jemně odstupňované řízení a viditelnost. Slouží k vytváření zodpovědných řešení AI, která splňují podnikové standardy. Filtry ověřují akce, jako jsou uživatelská oprávnění nebo úpravy interakcí s modely AI, aby se zajistilo dodržování předpisů a spolehlivost.
Typy filtrů
Sémantické jádro nabízí tři typy filtrů, které zlepšují kontrolu a přizpůsobení: Filtry volání funkcí pro správu provádění funkcí, filtry vykreslování výzvy pro úpravy výzev před odesláním a filtry automatického vyvolání funkcí pro směrování vícekrokových pracovních postupů. Každý typ filtru řeší konkrétní potřeby, což vývojářům umožňuje vytvářet zabezpečená a přizpůsobitelná řešení AI.
Filtr vyvolání funkce
Tento filtr se spustí při každém spuštění funkce, ať už pochází z výzvy nebo je implementovaný v jazyce C#. Mezi její možnosti patří:
- Přístup k metadatům o funkci a jejích argumentech
- Protokolování nebo ověřování akcí před a po spuštění
- Přepsat výsledky nebo opakovat operace s využitím alternativních modelů umělé inteligence.
Tady je příklad filtru vyvolání funkce, který protokoluje vyvolánou funkci modulu plug-in:
public sealed class LoggingFilter(ILogger logger) : IFunctionInvocationFilter
{
public async Task OnFunctionInvocationAsync(FunctionInvocationContext context, Func<FunctionInvocationContext, Task> next)
{
logger.LogInformation("Invoking: {PluginName}.{FunctionName}", context.Function.PluginName, context.Function.Name);
await next(context);
logger.LogInformation("Executed: {PluginName}.{FunctionName}", context.Function.PluginName, context.Function.Name);
}
}
Filtr vykreslování podnětů
Tento filtr se aktivuje při vykreslování výzvy, který poskytuje kontrolu nad formátováním a odesláním výzev do AI. Je ideální pro úlohy, jako je úprava výzev k citlivým informacím (např. redakce PII) nebo povolení sémantického ukládání do mezipaměti.
Tady je příklad filtru vykreslování promptu:
public class SafePromptFilter : IPromptRenderFilter
{
public async Task OnPromptRenderAsync(PromptRenderContext context, Func<PromptRenderContext, Task> next)
{
await next(context);
// Modify prompt before submission
context.RenderedPrompt = "Safe and sanitized prompt.";
}
}
Filtr automatického vyvolání funkce
Tento filtr se vyvolá pouze během procesu automatického volání funkce. Může upravit nebo dokonce ukončit pracovní postupy na základě průběžných výsledků.
Tady je příklad filtru volání funkce, který ukončuje proces volání funkce:
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;
}
}
}
Integrace filtrů funkcí
K integraci některého z filtrů funkcí můžete použít následující metody:
Vkládání závislostí:
Přidejte funkci do služeb KernelBuilder:
builder.Services.AddSingleton<IFunctionInvocationFilter, LoggingFilter>();
vlastnosti jádra :
Přidejte funkci do seznamu
FunctionInvocationFilters
jádra:kernel.FunctionInvocationFilters.Add(new LoggingFilter(logger));
Vždy vyvolejte delegáta next
ve vašem filtru funkce, aby následné filtry nebo primární operace mohly být provedeny. Přeskočení tohoto kroku zablokuje operaci.
Díky promyšlené integraci těchto filtrů můžete vylepšit funkčnost i zabezpečení implementací sémantických jader v souladu s osvědčenými postupy pro zodpovědný vývoj umělé inteligence.