다음을 통해 공유


함수 선택 동작

함수 선택 동작은 개발자가 구성할 수 있는 구성 비트입니다.

  1. AI 모델에 보급되는 함수입니다.
  2. 모델에서 호출을 위해 모델을 선택하는 방법.
  3. 의미 체계 커널이 이러한 함수를 호출하는 방법

현재 함수 선택 동작은 클래스의 FunctionChoiceBehavior 세 가지 정적 메서드로 표시됩니다.

  • 자동: AI 모델에서 제공된 함수 중 0개 이상에서 호출을 선택할 수 있습니다.
  • 필수: AI 모델이 제공된 함수를 선택하도록 합니다.
  • 없음: AI 모델에 함수를 선택하지 않도록 지시합니다.

Warning

함수 호출 기능은 실험적이며 변경될 수 있습니다. 2024년 11월 중순까지 GA(일반 공급)에 도달할 것으로 예상됩니다. 최신 함수 호출 기능으로 코드를 마이그레이션하려면 마이그레이션 가이드를 참조하세요.

참고 항목

함수 호출 기능은 지금까지 몇 가지 AI 커넥터에서만 지원됩니다. 자세한 내용은 아래의 지원되는 AI 커넥터 섹션을 참조하세요.

함수 광고

함수 광고는 추가 호출 및 호출을 위해 AI 모델에 함수를 제공하는 프로세스입니다. 세 가지 함수 선택 동작은 모두 매개 변수로 functions 보급할 함수 목록을 허용합니다. 기본적으로 Null입니다. 즉, 커널에 등록된 플러그 인의 모든 함수가 AI 모델에 제공됩니다.

using Microsoft.SemanticKernel;

IKernelBuilder builder = Kernel.CreateBuilder(); 
builder.AddOpenAIChatCompletion("<model-id>", "<api-key>");
builder.Plugins.AddFromType<WeatherForecastUtils>();
builder.Plugins.AddFromType<DateTimeUtils>(); 

Kernel kernel = builder.Build();

// All functions from the DateTimeUtils and WeatherForecastUtils plugins will be sent to AI model together with the prompt.
PromptExecutionSettings settings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() }; 

await kernel.InvokePromptAsync("Given the current time of day and weather, what is the likely color of the sky in Boston?", new(settings));

함수 목록이 제공되면 해당 함수만 AI 모델로 전송됩니다.

using Microsoft.SemanticKernel;

IKernelBuilder builder = Kernel.CreateBuilder(); 
builder.AddOpenAIChatCompletion("<model-id>", "<api-key>");
builder.Plugins.AddFromType<WeatherForecastUtils>();
builder.Plugins.AddFromType<DateTimeUtils>(); 

Kernel kernel = builder.Build();

KernelFunction getWeatherForCity = kernel.Plugins.GetFunction("WeatherForecastUtils", "GetWeatherForCity");
KernelFunction getCurrentTime = kernel.Plugins.GetFunction("DateTimeUtils", "GetCurrentUtcDateTime");

// Only the specified getWeatherForCity and getCurrentTime functions will be sent to AI model alongside the prompt.
PromptExecutionSettings settings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(functions: [getWeatherForCity, getCurrentTime]) }; 

await kernel.InvokePromptAsync("Given the current time of day and weather, what is the likely color of the sky in Boston?", new(settings));

함수의 빈 목록은 함수 호출을 사용하지 않도록 설정하는 것과 동일한 AI 모델에 함수가 제공되지 않음을 의미합니다.

using Microsoft.SemanticKernel;

IKernelBuilder builder = Kernel.CreateBuilder(); 
builder.AddOpenAIChatCompletion("<model-id>", "<api-key>");
builder.Plugins.AddFromType<WeatherForecastUtils>();
builder.Plugins.AddFromType<DateTimeUtils>(); 

Kernel kernel = builder.Build();

// Disables function calling. Equivalent to var settings = new() { FunctionChoiceBehavior = null } or var settings = new() { }.
PromptExecutionSettings settings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(functions: []) }; 

await kernel.InvokePromptAsync("Given the current time of day and weather, what is the likely color of the sky in Boston?", new(settings));

자동 함수 선택 동작 사용

함수 선택 동작은 Auto AI 모델에게 제공된 함수 중 0개 이상에서 호출을 선택하도록 결정하도록 지시합니다.

이 예제에서는 프롬프트와 함께 플러그 인 및 WeatherForecastUtils 플러그 인의 모든 함수 DateTimeUtils 가 AI 모델에 제공됩니다. 이 정보는 함수에 대한 입력으로 필요하므로 모델은 먼저 호출을 위한 GetWeatherForCity 함수를 선택하여 GetCurrentTime 현재 날짜와 시간을 가져옵니다. 다음으로, 구한 날짜와 시간을 사용하여 보스턴 시의 일기 예보를 가져오기 위한 호출 함수를 선택합니다 GetWeatherForCity . 이 정보를 통해 모델은 보스턴에서 하늘의 가능성이 있는 색을 확인할 수 있습니다.

using Microsoft.SemanticKernel;

IKernelBuilder builder = Kernel.CreateBuilder(); 
builder.AddOpenAIChatCompletion("<model-id>", "<api-key>");
builder.Plugins.AddFromType<WeatherForecastUtils>();
builder.Plugins.AddFromType<DateTimeUtils>(); 

Kernel kernel = builder.Build();

// All functions from the DateTimeUtils and WeatherForecastUtils plugins will be provided to AI model alongside the prompt.
PromptExecutionSettings settings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() }; 

await kernel.InvokePromptAsync("Given the current time of day and weather, what is the likely color of the sky in Boston?", new(settings));

YAML 프롬프트 템플릿 구성에서 동일한 예제를 쉽게 모델링할 수 있습니다.

using Microsoft.SemanticKernel;

IKernelBuilder builder = Kernel.CreateBuilder(); 
builder.AddOpenAIChatCompletion("<model-id>", "<api-key>");
builder.Plugins.AddFromType<WeatherForecastUtils>();
builder.Plugins.AddFromType<DateTimeUtils>(); 

Kernel kernel = builder.Build();

string promptTemplateConfig = """
    template_format: semantic-kernel
    template: Given the current time of day and weather, what is the likely color of the sky in Boston?
    execution_settings:
      default:
        function_choice_behavior:
          type: auto
    """;

KernelFunction promptFunction = KernelFunctionYaml.FromPromptYaml(promptTemplateConfig);

Console.WriteLine(await kernel.InvokeAsync(promptFunction));

필수 함수 선택 동작 사용

이 동작은 Required 모델이 호출을 위해 제공된 함수를 선택하도록 강제합니다. 이는 AI 모델이 자체 지식이 아닌 지정된 함수에서 필요한 정보를 가져와야 하는 시나리오에 유용합니다.

참고 항목

동작은 AI 모델에 대한 첫 번째 요청의 함수만 보급하고 후속 요청에서 함수 전송을 중지하여 모델이 호출을 위해 동일한 함수를 계속 선택하는 무한 루프를 방지합니다.

여기서는 AI 모델이 자체 지식에 따라 추측하는 대신 보스턴 시의 일기 예보를 얻기 위해 호출 함수를 선택 GetWeatherForCity 해야 한다고 지정합니다. 모델은 먼저 호출 함수를 GetWeatherForCity 선택하여 일기 예보를 검색합니다. 이 정보를 사용하면 모델은 호출의 응답을 사용하여 보스턴에서 하늘의 가능성이 있는 색을 GetWeatherForCity확인할 수 있습니다.

using Microsoft.SemanticKernel;

IKernelBuilder builder = Kernel.CreateBuilder(); 
builder.AddOpenAIChatCompletion("<model-id>", "<api-key>");
builder.Plugins.AddFromType<WeatherForecastUtils>();

Kernel kernel = builder.Build();

KernelFunction getWeatherForCity = kernel.Plugins.GetFunction("WeatherForecastUtils", "GetWeatherForCity");

PromptExecutionSettings settings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Required(functions: [getWeatherFunction]) };

await kernel.InvokePromptAsync("Given that it is now the 10th of September 2024, 11:29 AM, what is the likely color of the sky in Boston?", new(settings));

YAML 템플릿 구성의 동일한 예제:

using Microsoft.SemanticKernel;

IKernelBuilder builder = Kernel.CreateBuilder(); 
builder.AddOpenAIChatCompletion("<model-id>", "<api-key>");
builder.Plugins.AddFromType<WeatherForecastUtils>();

Kernel kernel = builder.Build();

string promptTemplateConfig = """
    template_format: semantic-kernel
    template: Given that it is now the 10th of September 2024, 11:29 AM, what is the likely color of the sky in Boston?
    execution_settings:
      default:
        function_choice_behavior:
          type: auto
          functions:
            - WeatherForecastUtils.GetWeatherForCity
    """;

KernelFunction promptFunction = KernelFunctionYaml.FromPromptYaml(promptTemplateConfig);

Console.WriteLine(await kernel.InvokeAsync(promptFunction));

또는 필요에 따라 커널에 등록된 모든 함수를 AI 모델에 제공할 수 있습니다. 그러나 첫 번째 요청의 결과로 AI 모델에서 선택한 것만 의미 체계 커널에 의해 호출됩니다. 함수는 위에서 설명한 대로 무한 루프를 방지하기 위해 후속 요청에서 AI 모델로 전송되지 않습니다.

using Microsoft.SemanticKernel;

IKernelBuilder builder = Kernel.CreateBuilder(); 
builder.AddOpenAIChatCompletion("<model-id>", "<api-key>");
builder.Plugins.AddFromType<WeatherForecastUtils>();

Kernel kernel = builder.Build();

PromptExecutionSettings settings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Required() };

await kernel.InvokePromptAsync("Given that it is now the 10th of September 2024, 11:29 AM, what is the likely color of the sky in Boston?", new(settings));

None 함수 선택 동작 사용

이 동작은 None 호출에 대해 응답을 생성하도록 선택하지 않고 제공된 함수를 사용하도록 AI 모델에 지시합니다. 이는 호출자가 실제로 호출하지 않고 모델에서 선택할 함수를 확인하려는 경우 드라이 실행에 유용합니다. 또한 AI 모델이 사용자로부터 정보를 추출하도록 할 때 유용합니다. 예를 들어 아래의 샘플에서 AI 모델이 보스턴이 도시 이름임을 올바르게 확인했습니다.

여기서는 모든 함수를 DateTimeUtils 보급하고 WeatherForecastUtils 플러그 인을 AI 모델에 보급하지만 그 중 하나를 선택하지 않도록 지시합니다. 대신, 모델은 지정된 날짜에 보스턴에서 하늘의 색상을 결정하기 위해 선택할 함수를 설명하는 응답을 제공합니다.

using Microsoft.SemanticKernel;

IKernelBuilder builder = Kernel.CreateBuilder(); 
builder.AddOpenAIChatCompletion("<model-id>", "<api-key>");
builder.Plugins.AddFromType<WeatherForecastUtils>();
builder.Plugins.AddFromType<DateTimeUtils>(); 

Kernel kernel = builder.Build();

KernelFunction getWeatherForCity = kernel.Plugins.GetFunction("WeatherForecastUtils", "GetWeatherForCity");

PromptExecutionSettings settings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.None() };

await kernel.InvokePromptAsync("Specify which provided functions are needed to determine the color of the sky in Boston on a specified date.", new(settings))

// Sample response: To determine the color of the sky in Boston on a specified date, first call the DateTimeUtils-GetCurrentUtcDateTime function to obtain the 
// current date and time in UTC. Next, use the WeatherForecastUtils-GetWeatherForCity function, providing 'Boston' as the city name and the retrieved UTC date and time. 
// These functions do not directly provide the sky's color, but the GetWeatherForCity function offers weather data, which can be used to infer the general sky condition (e.g., clear, cloudy, rainy).

YAML 프롬프트 템플릿 구성의 해당 예제:

using Microsoft.SemanticKernel;

IKernelBuilder builder = Kernel.CreateBuilder(); 
builder.AddOpenAIChatCompletion("<model-id>", "<api-key>");
builder.Plugins.AddFromType<WeatherForecastUtils>();
builder.Plugins.AddFromType<DateTimeUtils>(); 

Kernel kernel = builder.Build();

string promptTemplateConfig = """
    template_format: semantic-kernel
    template: Specify which provided functions are needed to determine the color of the sky in Boston on a specified date.
    execution_settings:
      default:
        function_choice_behavior:
          type: none
    """;

KernelFunction promptFunction = KernelFunctionYaml.FromPromptYaml(promptTemplateConfig);

Console.WriteLine(await kernel.InvokeAsync(promptFunction));

함수 호출

함수 호출은 Sematic Kernel이 AI 모델에서 선택한 함수를 호출하는 프로세스입니다. 함수 호출에 대한 자세한 내용은 함수 호출 문서를 참조 하세요.

지원되는 AI 커넥터

현재 의미 체계 커널의 다음 AI 커넥터는 함수 호출 모델을 지원합니다.

AI 커넥터 FunctionChoiceBehavior ToolCallBehavior
Anthropic 예정
AzureAIInference 서비스 예정
AzureOpenAI ✔️ ✔️
쌍둥이자리 예정 ✔️
HuggingFace 예정
Mistral 예정 ✔️
올라마 섬 서비스 예정
Onnx 서비스 예정
OpenAI ✔️ ✔️

서비스 예정

추가 정보는 곧 제공될 예정입니다.

서비스 예정

추가 정보는 곧 제공될 예정입니다.