필터란?
필터는 함수 실행 방법과 시기에 대한 제어 및 가시성을 제공하여 보안을 강화합니다. 이는 책임 있는 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: