使用代理的任务自动化
大多数 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 代理知道订单创建未获得批准,则假定订单由于技术问题而失败,并会尝试再次创建订单。
后续步骤
了解如何允许代理自动执行任务后,可以了解如何允许代理自动创建满足用户需求的计划。