Поделиться через


Поведение выбора функции

Поведение выбора функций — это биты конфигурации, которые позволяют разработчику настроить следующее:

  1. Какие функции объявляются моделям ИИ.
  2. Как модели должны выбирать их для вызова.
  3. Как семантический ядро может вызывать эти функции.

По состоянию на сегодняшний день поведение выбора функции представлено тремя статическими методами FunctionChoiceBehavior класса:

  • Авто: позволяет модели ИИ выбирать из нуля или более предоставленных функций для вызова.
  • Обязательный: заставляет модель ИИ выбирать предоставленные функции.
  • Нет. Указывает модели ИИ не выбирать какие-либо функции.

Предупреждение

Возможность вызова функций является экспериментальной и подлежит изменению. Ожидается, что к середине ноября 2024 года будет достигнута общая доступность (GA). Ознакомьтесь с руководством по миграции, чтобы перенести код в последние возможности вызова функций.

Примечание.

Возможности вызова функций поддерживаются только несколькими соединителями ИИ до сих пор, см . в разделе "Поддерживаемые соединители ИИ" ниже.

Реклама функций

Реклама функций — это процесс предоставления функций моделям ИИ для дальнейшего вызова и вызова. Все три поведения функций принимают список функций для объявления в качестве functions параметра. По умолчанию это значение NULL, что означает, что все функции из подключаемых модулей, зарегистрированных в ядре, предоставляются модели ИИ.

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

Если указан список функций, в модель ИИ отправляются только эти функции:

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

Пустой список функций означает, что функции не предоставляются модели ИИ, что эквивалентно отключению вызовов функций.

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 выбора функции указывает модели ИИ выбрать из нуля или более предоставленных функций для вызова.

В этом примере все функции из DateTimeUtils WeatherForecastUtils подключаемых модулей будут предоставлены модели ИИ вместе с запросом. Модель сначала выбирает GetCurrentTime функцию для вызова для получения текущей даты и времени, так как эти сведения необходимы в качестве входных данных для GetWeatherForCity функции. Затем она выберет 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 заставляет модель выбирать предоставленные функции для вызова. Это полезно для сценариев, когда модель ИИ должна получать необходимые сведения из указанных функций, а не из собственного знания.

Примечание.

Поведение объявляет функции только в первом запросе модели ИИ и останавливает их отправку в последующих запросах, чтобы предотвратить бесконечный цикл, в котором модель продолжает выбирать те же функции для вызова многократно.

Здесь мы указываем, что модель ИИ должна выбрать 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));

Кроме того, все функции, зарегистрированные в ядре, можно предоставить модели ИИ по мере необходимости. Однако только те, которые выбраны моделью ИИ в результате первого запроса, будут вызваны семантической ядром. Функции не будут отправляться в модель ИИ в последующих запросах, чтобы предотвратить бесконечный цикл, как упоминалось выше.

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 указывает модели ИИ использовать предоставленные функции без выбора любого из них для вызова для создания ответа. Это полезно для сухих запусков, когда вызывающему объекту может потребоваться увидеть, какие функции модель будет выбирать, не вызывая их. Кроме того, полезно, если вы хотите, чтобы модель искусственного интеллекта извлекла информацию от пользователя, например, в примере ниже модели ИИ правильно выработала, что Бостон был именем города.

Здесь мы объявляем все функции из DateTimeUtils и WeatherForecastUtils подключаемых модулей в модель ИИ, но показано, чтобы они не были выбраны. Вместо этого модель предоставит ответ, описывающий функции, которые бы решили определить цвет неба в Бостоне по указанной дате.

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 вызывает функции, выбранные моделью ИИ. Дополнительные сведения о вызове функции см . в статье о вызове функции.

Поддерживаемые соединители ИИ

По состоянию на сегодняшний день следующие соединители ИИ в семантическом ядре поддерживают модель вызова функций:

Соединитель ИИ FunctionChoiceBehavior ToolCallBehavior
Anthropic Плановое
AzureAIInference Скоро
AzureOpenAI ✔️ ✔️
Близнецы Плановое ✔️
HuggingFace Плановое
Mistral Плановое ✔️
Ollama Скоро
Onnx Скоро
OpenAI ✔️ ✔️

Скоро

Дополнительные сведения в ближайшее время.

Скоро

Дополнительные сведения в ближайшее время.