에이전트로 태스크 자동화

에이전트로 태스크 자동화

오늘날 대부분의 AI 에이전트는 단순히 데이터를 가져와 사용자 질문에 응답할 뿐이에요. 하지만 AI 에이전트는 플러그인을 사용해 사용자를 대신해 태스크를 자동화함으로써 훨씬 더 많은 일을 할 수 있어요. 이를 통해 사용자는 AI 에이전트에게 태스크를 위임하고, 더 중요한 일에 시간을 쓸 수 있게 되죠.

그런데 AI 에이전트가 실제로 동작을 수행하기 시작하면, 에이전트가 사용자의 최선의 이익을 위해 행동하고 있는지 확인하는 것이 중요해져요. 그래서 Semantic Kernel은 AI 에이전트가 어떤 동작을 취할 수 있는지 제어할 수 있는 훅/필터를 제공해요.

사용자 동의 요구하기

AI 에이전트가 사용자를 대신해 동작을 수행하려 할 때는 먼저 사용자의 동의를 요청해야 해요. 특히 그 동작이 민감한 데이터나 금융 거래와 관련된 경우엔 더 중요하죠.

Semantic Kernel에서는 **함수 호출 필터(function invocation filter)**를 사용할 수 있어요. 이 필터는 AI 에이전트에서 함수가 호출될 때마다 항상 호출돼요. 필터를 만들려면 IFunctionInvocationFilter 인터페이스를 구현하고 커널에 서비스로 추가하면 돼요.

사용자 동의를 요구하는 함수 호출 필터의 예시는 다음과 같아요.

C#

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

Python

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으로 주문 생성하려 할 때마다 사용자에게 그 동작을 승인할지 묻는 메시지가 표시돼요.

[!TIP] 함수가 취소되거나 실패할 때마다 AI 에이전트가 적절히 대응할 수 있도록 의미 있는 오류 메시지를 제공해야 해요. 예를 들어 AI 에이전트에게 주문 생성이 승인되지 않았다는 걸 알려주지 않으면, 주문이 기술적 문제로 실패했다고 가정하고 또 다시 주문을 생성하려 할 거예요.

다음 단계

에이전트가 태스크를 자동화하도록 허용하는 법을 배웠으니, 이제 에이전트가 사용자 요구를 해결하기 위해 자동으로 계획을 만들도록 허용하는 법을 배울 수 있어요.

[!div class="nextstepaction"] 에이전트로 계획 자동화