다음을 통해 공유


필터란?

필터는 함수 실행 방법과 시기에 대한 제어 및 가시성을 제공하여 보안을 강화합니다. 이는 책임 있는 AI 원칙을 작업에 주입하여 솔루션이 엔터프라이즈 준비가 되었다고 확신할 수 있도록 하는 데 필요합니다.

예를 들어 승인 흐름이 시작되기 전에 필터를 활용하여 사용 권한의 유효성을 검사합니다. 승인을 IFunctionInvocationFilter 제출하려는 사용자의 사용 권한을 확인하기 위해 실행됩니다. 즉, 선택한 그룹만 프로세스를 시작할 수 있습니다.

필터의 좋은 예는 필터에 대한 자세한 의미 체계 커널 블로그 게시물에서 여기에 제공됩니다.   의미 체계 커널 필터

다음과 같은 세 가지 유형의 필터가 있습니다.

  • 함수 호출 필터 - 호출될 때마다 KernelFunction 실행됩니다. 실행될 함수에 대한 정보, 해당 인수, 함수 실행 중 예외 catch, 함수 결과 재정의, 실패 시 함수 실행 다시 시도(다른 AI 모델로 전환하는 데 사용할 수 있습니다)에 대한 정보를 가져올 수 있습니다.
  • 프롬프트 렌더링 필터 - 프롬프트 렌더링 작업 전에 실행됩니다. AI로 보낼 프롬프트를 확인하고, 프롬프트(예: RAG, PII 편집 시나리오)를 수정하고, 함수 결과 재정의를 사용하여 AI로 프롬프트가 전송되지 않도록 할 수 있습니다(의미 체계 캐싱사용할 수 있습니다).
  • 자동 함수 호출 필터 - 함수 호출 필터와 유사하지만 작업 범위 automatic function calling 에서 실행되므로 채팅 기록, 실행될 모든 함수 목록 및 반복 카운터를 요청하는 등 컨텍스트에서 사용할 수 있는 추가 정보가 있습니다. 또한 자동 함수 호출 프로세스를 종료할 수 있습니다(예: 실행할 함수가 3개 있지만 두 번째 함수에서 원하는 결과가 이미 있음).

각 필터에는 context 함수 실행 또는 프롬프트 렌더링과 관련된 모든 정보가 포함된 개체가 있습니다. 컨텍스트와 함께 파이프라인 또는 함수 자체에서 다음 필터를 실행하는 대리자/콜백도 next 있습니다. 이렇게 하면 더 많은 제어가 가능하며 함수 실행을 방지하는 몇 가지 이유(예: 악의적인 프롬프트 또는 함수 인수)가 있는 경우에 유용합니다. 각 필터에 서로 다른 책임이 있는 동일한 형식의 여러 필터를 등록할 수 있습니다.

함수 호출 전후에 로깅을 수행하는 함수 호출 필터의 예:

public sealed class LoggingFilter(ILogger logger) : IFunctionInvocationFilter
{
    public async Task OnFunctionInvocationAsync(FunctionInvocationContext context, Func<FunctionInvocationContext, Task> next)
    {
        logger.LogInformation("FunctionInvoking - {PluginName}.{FunctionName}", context.Function.PluginName, context.Function.Name);

        await next(context);

        logger.LogInformation("FunctionInvoked - {PluginName}.{FunctionName}", context.Function.PluginName, context.Function.Name);
    }
}

AI로 보내기 전에 렌더링된 프롬프트를 재정의하는 프롬프트 렌더링 필터의 예:

public class SafePromptFilter : IPromptRenderFilter
{
    public async Task OnPromptRenderAsync(PromptRenderContext context, Func<PromptRenderContext, Task> next)
    {
        // Example: get function information
        var functionName = context.Function.Name;

        await next(context);

        // Example: override rendered prompt before sending it to AI
        context.RenderedPrompt = "Safe prompt";
    }
}

원하는 결과가 있는 즉시 함수 호출 프로세스를 종료하는 자동 함수 호출 필터의 예:

public sealed class EarlyTerminationFilter : IAutoFunctionInvocationFilter
{
    public async Task OnAutoFunctionInvocationAsync(AutoFunctionInvocationContext context, Func<AutoFunctionInvocationContext, Task> next)
    {
        await next(context);

        var result = context.Result.GetValue<string>();

        if (result == "desired result")
        {
            context.Terminate = true;
        }
    }
}

자세한 정보

C#/.NET: