使用代理的任务自动化

大多数 AI 代理现在只需检索数据并响应用户查询。 但是,AI 代理可以通过使用插件代表用户自动执行任务来实现更多目标。 这样,用户就可以将任务委托给 AI 代理,为更重要的工作腾出时间。

但是,一旦 AI 代理开始执行操作,请务必确保它们符合用户的最佳利益。 这就是为什么我们提供挂钩/筛选器,使你能够控制 AI 代理可以执行的操作。

当 AI 代理即将代表用户执行操作时,应首先请求用户同意。 当操作涉及敏感数据或财务交易时,这一点尤其重要。

在语义内核中,可以使用函数调用筛选器。 每当从 AI 代理调用函数时,始终调用此筛选器。 若要创建筛选器,需要实现 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 示例。

现在,每当 AI 代理尝试使用该 DynamicsPlugin订单时,系统会提示用户批准该操作。

提示

每当函数被取消或失败时,都应向 AI 代理提供有意义的错误消息,以便它可以做出适当的响应。 例如,如果我们没有让 AI 代理知道订单创建未获得批准,则假定订单由于技术问题而失败,并会尝试再次创建订单。

后续步骤

了解如何允许代理自动执行任务后,可以了解如何允许代理自动创建满足用户需求的计划。