Cvičení – přidání služby filtru do jádra

Dokončeno

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!

  1. Otevřete Program.cs ve složce M04-Project.

  2. Vytvořte nový soubor s názvem PermissionFilter.cs.

  3. 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. Metoda OnFunctionInvocationAsync je vždy volána při každém vyvolání funkce z agenta AI.

  4. 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.

  5. 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);
    
  6. Přejděte do souboru Program.cs.

  7. 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());
    
  8. 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();
    
  9. 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!