Automação de tarefas com agentes

A maioria dos agentes de IA hoje simplesmente recupera dados e responde às consultas dos usuários. Os agentes de IA, no entanto, podem conseguir muito mais usando plug-ins para automatizar tarefas em nome dos usuários. Isso permite que os usuários deleguem tarefas a agentes de IA, liberando tempo para trabalhos mais importantes.

No entanto, depois que os agentes de IA começam a executar ações, é importante garantir que eles estejam agindo no melhor interesse do usuário. É por isso que fornecemos ganchos/filtros para permitir que você controle quais ações o agente de IA pode executar.

Quando um agente de IA está prestes a executar uma ação em nome de um usuário, ele deve primeiro solicitar o consentimento do usuário. Isso é especialmente importante quando a ação envolve dados confidenciais ou transações financeiras.

No Kernel Semântico, você pode usar o filtro de invocação de função. Esse filtro é sempre chamado sempre que uma função é invocada de um agente de IA. Para criar um filtro, você precisa implementar a IFunctionInvocationFilter interface e adicioná-la como um serviço ao kernel.

Aqui está um exemplo de um filtro de invocação de função que requer o consentimento do usuário:

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);
    }
}

Em seguida, você pode adicionar o filtro como um serviço ao kernel:

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)

A amostra Java estará disponível em breve.

Agora, sempre que o agente de IA tentar criar um pedido usando o DynamicsPlugin, o usuário será solicitado a aprovar a ação.

Dica

Sempre que uma função for cancelada ou falhar, você deverá fornecer ao agente de IA uma mensagem de erro significativa para que ele possa responder adequadamente. Por exemplo, se não informássemos ao agente de IA que a criação do pedido não foi aprovada, ele presumiria que o pedido falhou devido a um problema técnico e tentaria criar o pedido novamente.

Próximas etapas

Agora que você aprendeu como permitir que os agentes automatizem tarefas, saiba como permitir que os agentes criem planos automaticamente para atender às necessidades do usuário.