Automatyzacja zadań przy użyciu agentów
Większość agentów sztucznej inteligencji obecnie po prostu pobiera dane i odpowiada na zapytania użytkowników. Agenci sztucznej inteligencji mogą jednak osiągnąć znacznie więcej, używając wtyczek do automatyzowania zadań w imieniu użytkowników. Dzięki temu użytkownicy mogą delegować zadania do agentów sztucznej inteligencji, zwalniając czas na ważniejszą pracę.
Po rozpoczęciu wykonywania akcji przez agentów sztucznej inteligencji ważne jest, aby upewnić się, że działają w najlepszym interesie użytkownika. Dlatego udostępniamy haki/filtry, aby umożliwić kontrolowanie akcji, które może wykonać agent sztucznej inteligencji.
Wymaganie zgody użytkownika
Gdy agent sztucznej inteligencji ma wykonać akcję w imieniu użytkownika, powinien najpierw poprosić o zgodę użytkownika. Jest to szczególnie ważne, gdy działanie obejmuje poufne dane lub transakcje finansowe.
W jądrze semantycznym można użyć filtru wywołania funkcji. Ten filtr jest zawsze wywoływany za każdym razem, gdy funkcja jest wywoływana z agenta sztucznej inteligencji. Aby utworzyć filtr, należy zaimplementować IFunctionInvocationFilter
interfejs, a następnie dodać go jako usługę do jądra.
Oto przykład filtru wywołania funkcji, który wymaga zgody użytkownika:
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);
}
}
Następnie możesz dodać filtr jako usługę do jądra:
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)
Przykład w języku Java będzie już wkrótce.
Teraz za każdym razem, gdy agent sztucznej inteligencji spróbuje utworzyć zamówienie przy użyciu DynamicsPlugin
elementu , użytkownik zostanie poproszony o zatwierdzenie akcji.
Napiwek
Za każdym razem, gdy funkcja zostanie anulowana lub zakończy się niepowodzeniem, należy podać agentowi sztucznej inteligencji znaczący komunikat o błędzie, aby mógł odpowiednio odpowiedzieć. Jeśli na przykład nie poinformowaliśmy agenta sztucznej inteligencji, że tworzenie zamówienia nie zostało zatwierdzone, zakłada się, że zamówienie nie powiodło się z powodu problemu technicznego i spróbuje ponownie utworzyć zamówienie.
Następne kroki
Teraz, gdy wiesz już, jak umożliwić agentom automatyzowanie zadań, możesz dowiedzieć się, jak zezwolić agentom na automatyczne tworzenie planów na potrzeby użytkowników.