Поделиться через


Автоматизация задач с агентами

Большинство агентов ИИ сегодня просто извлекают данные и отвечают на запросы пользователей. Однако агенты ИИ могут достичь гораздо больше, используя подключаемые модули для автоматизации задач от имени пользователей. Это позволяет пользователям делегировать задачи агентам ИИ, освобождая время для более важной работы.

Однако после запуска действий агентов ИИ важно убедиться, что они действуют в интересах пользователя. Именно поэтому мы предоставляем перехватчики и фильтры, позволяющие управлять действиями агента ИИ.

Когда агент ИИ будет выполнять действие от имени пользователя, он должен сначала попросить согласие пользователя. Это особенно важно, если действие включает конфиденциальные данные или финансовые транзакции.

В семантическом ядре можно использовать фильтр вызова функции. Этот фильтр всегда вызывается при вызове функции из агента ИИ. Чтобы создать фильтр, необходимо реализовать IFunctionInvocationFilter интерфейс, а затем добавить его в ядро в качестве службы.

Ниже приведен пример фильтра вызова функции, требующего согласия пользователя:

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

Затем можно добавить фильтр как службу в ядро:

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 скоро появится.

Теперь, когда агент ИИ пытается создать заказ с помощью этого DynamicsPluginзапроса, пользователю будет предложено утвердить действие.

Совет

Каждый раз, когда функция отменена или завершается сбоем, необходимо предоставить агенту ИИ понятное сообщение об ошибке, чтобы оно соответствующих ответов. Например, если агент ИИ не знал, что создание заказа не было утверждено, предполагается, что заказ завершился ошибкой из-за технической проблемы и попытается создать заказ еще раз.

Следующие шаги

Теперь, когда вы узнали, как разрешить агентам автоматизировать задачи, вы можете узнать, как разрешить агентам автоматически создавать планы для решения потребностей пользователей.