Dela via


Uppgiftsautomatisering med agenter

De flesta AI-agenter hämtar i dag bara data och svarar på användarfrågor. AI-agenter kan dock uppnå mycket mer genom att använda plugin-program för att automatisera uppgifter åt användarna. På så sätt kan användare delegera uppgifter till AI-agenter, vilket frigör tid för viktigare arbete.

När AI-agenter börjar utföra åtgärder är det dock viktigt att se till att de agerar i användarens bästa intresse. Därför tillhandahåller vi krokar/filter så att du kan kontrollera vilka åtgärder AI-agenten kan vidta.

När en AI-agent är på väg att utföra en åtgärd för en användares räkning bör den först be om användarens medgivande. Detta är särskilt viktigt när åtgärden omfattar känsliga data eller finansiella transaktioner.

I Semantisk kernel kan du använda funktionsanropsfiltret. Det här filtret anropas alltid när en funktion anropas från en AI-agent. För att skapa ett filter måste du implementera IFunctionInvocationFilter gränssnittet och sedan lägga till det som en tjänst i kerneln.

Här är ett exempel på ett funktionsanropsfilter som kräver användarmedgivande:

public class ApprovalFilterExample() : IFunctionInvocationFilter
{
    public async Task OnFunctionInvocationAsync(FunctionInvocationContext context, Func<FunctionInvocationContext, Task> next)
    {
        if (context.Function.PluginName == "DynamicsPlugin" && context.Function.Name == "create_order")
        {
            Console.WriteLine("System > The agent wants to create an approval, do you want to proceed? (Y/N)");
            string shouldProceed = Console.ReadLine()!;

            if (shouldProceed != "Y")
            {
                context.Result = new FunctionResult(context.Result, "The order creation was not approved by the user");
                return;
            }
        }

        await next(context);
    }
}

Du kan sedan lägga till filtret som en tjänst i kerneln:

IKernelBuilder builder = Kernel.CreateBuilder();
builder.Services.AddSingleton<IFunctionInvocationFilter, ApprovalFilterExample>();
Kernel kernel = builder.Build();
from typing import Any, Coroutine
from semantic_kernel.filters.filter_types import FilterTypes
from semantic_kernel.filters.functions.function_invocation_context import FunctionInvocationContext
from semantic_kernel.functions.function_result import FunctionResult

# The `filter` decorator within kernel, creates and adds the filter in one go.
@kernel.filter(filter_type=FilterTypes.FUNCTION_INVOCATION)
async def approval_filter_example(
    context: FunctionInvocationContext, next: Coroutine[FunctionInvocationContext, Any, None]
):
    if context.function.plugin_name == "DynamicsPlugin" and context.function.name == "create_order":
        should_proceed = input("System > The agent wants to create an approval, do you want to proceed? (Y/N)")
        if should_proceed.lower() != "y":
            context.result = FunctionResult(
                function=context.function.metadata, value="The order creation was not approved by the user"
            )
            return

    await next(context)

Java-exemplet kommer snart.

När AI-agenten nu försöker skapa en order med hjälp av DynamicsPluginuppmanas användaren att godkänna åtgärden.

Dricks

När en funktion avbryts eller misslyckas bör du ge AI-agenten ett meningsfullt felmeddelande så att den kan svara korrekt. Om vi till exempel inte lät AI-agenten veta att orderskapandet inte godkändes förutsätter det att ordern misslyckades på grund av ett tekniskt problem och skulle försöka skapa ordern igen.

Nästa steg

Nu när du har lärt dig hur du tillåter agenter att automatisera uppgifter kan du lära dig hur du tillåter agenter att automatiskt skapa planer för att tillgodose användarnas behov.