Cvičení – přidání služby filtru do jádra
V tomto cvičení přidáte funkci filtru, která požádá uživatele o schválení, než agentovi umožní rezervovat let za něj. Pojďme začít!
Otevřete Program.cs ve složce M04-Project.
Vytvořte nový soubor s názvem PermissionFilter.cs.
Do nového souboru zadejte následující kód:
#pragma warning disable SKEXP0001 using Microsoft.SemanticKernel; public class PermissionFilter : IFunctionInvocationFilter { public async Task OnFunctionInvocationAsync(FunctionInvocationContext context, Func<FunctionInvocationContext, Task> next) { } }
Poznámka
Ve verzi 1.30.0 sady SDK sémantického jádra se filtry funkcí můžou změnit a vyžadují potlačení upozornění.
V tomto kódu implementujete rozhraní
IFunctionInvocationFilter
. MetodaOnFunctionInvocationAsync
je vždy volána při každém vyvolání funkce z agenta AI.Přidejte následující kód, který zjistí, kdy je vyvolána
book_flight
funkce:if (context.Function.PluginName == "FlightBooking" && context.Function.Name == "book_flight") { } await next(context);
Tento kód používá
FunctionInvocationContext
k určení, který plugin a funkce byly vyvolány.Přidejte následující logiku pro vyžádání povolení uživatele k rezervaci letu.
if (context.Function.PluginName == "FlightBooking" && context.Function.Name == "book_flight") { Console.WriteLine("System Message: The agent requires an approval to complete this operation. Do you approve (Y/N)"); Console.Write("User: "); string shouldProceed = Console.ReadLine()!; if (shouldProceed != "Y") { context.Result = new FunctionResult(context.Result, "The operation was not approved by the user"); return; } } await next(context);
Přejděte do souboru Program.cs.
Přidejte do jádra filtr oprávnění pomocí následujícího kódu:
// Build the kernel Kernel kernel = builder.Build(); kernel.FunctionInvocationFilters.Add(new PermissionFilter());
Nahraďte funkční volání
await SyncPreviousChat();
následujícím kódem pro aktualizaci toku:AddUserMessage("Find me a flight to Tokyo on the 19"); await GetReply(); GetInput(); await GetReply();
Zadáním
dotnet run
v terminálu otestujte nový filtr.Zkuste žádost o schválení zamítnout. Měla by se zobrazit odpověď podobná následujícímu výstupu:
User: Find me a flight to Tokyo on the 19 Assistant: I found a flight to Tokyo on the 19th of January. The flight is with Air Japan and the price is $1200. User: Y System Message: The agent requires an approval to complete this operation. Do you approve (Y/N) User: N Assistant: I'm sorry, but I am unable to book the flight for you.
Teď jste do jádra úspěšně přidali službu filtru funkcí. Skvělá práce!