Compartir a través de


Comportamientos de elección de función

Los comportamientos de elección de funciones son bits de configuración que permiten a un desarrollador configurar:

  1. Qué funciones se anuncian en los modelos de IA.
  2. Cómo deben elegir los modelos para la invocación.
  3. Cómo el kernel semántico podría invocar esas funciones.

A partir de hoy, los comportamientos de elección de función se representan mediante tres métodos estáticos de la FunctionChoiceBehavior clase :

  • Automático: permite que el modelo de IA decida elegir entre cero o más de las funciones proporcionadas para la invocación.
  • Obligatorio: obliga al modelo de IA a elegir las funciones proporcionadas.
  • Ninguno: indica al modelo de IA que no elija ninguna función.

Advertencia

La funcionalidad de llamada a funciones es experimental y está sujeta a cambios. Se espera que alcance la disponibilidad general (GA) a mediados de noviembre de 2024. Consulte la guía de migración para migrar el código a las funcionalidades de llamada a funciones más recientes.

Nota:

Las funcionalidades de llamada a funciones solo son compatibles con algunos conectores de IA hasta ahora, consulte la sección Conectores de IA admitidos a continuación para obtener más detalles.

Publicidad de funciones

La publicidad de funciones es el proceso de proporcionar funciones a los modelos de IA para llamar e invocar aún más. Los tres comportamientos de elección de función aceptan una lista de funciones para anunciar como parámetro functions . De forma predeterminada, es null, lo que significa que todas las funciones de los complementos registrados en el kernel se proporcionan al modelo de IA.

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

Si se proporciona una lista de funciones, solo se envían esas funciones al modelo de IA:

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

Una lista vacía de funciones significa que no se proporciona ninguna función al modelo de IA, lo que equivale a deshabilitar la llamada a funciones.

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

Uso del comportamiento de elección de función automática

El Auto comportamiento de elección de función indica al modelo de IA que decida elegir entre cero o más de las funciones proporcionadas para la invocación.

En este ejemplo, todas las funciones de los DateTimeUtils complementos y WeatherForecastUtils se proporcionarán al modelo de IA junto con el símbolo del sistema. El modelo elegirá GetCurrentTime primero la función para la invocación para obtener la fecha y hora actuales, ya que esta información es necesaria como entrada para la GetWeatherForCity función. A continuación, elegirá GetWeatherForCity la función de invocación para obtener la previsión meteorológica de la ciudad de Boston con la fecha y hora obtenida. Con esta información, el modelo podrá determinar el color probable del cielo en Boston.

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

El mismo ejemplo se puede modelar fácilmente en una configuración de plantilla de aviso de 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));

Uso del comportamiento de elección de función requerido

El Required comportamiento obliga al modelo a elegir las funciones proporcionadas para la invocación. Esto es útil para escenarios en los que el modelo de IA debe obtener información necesaria de las funciones especificadas en lugar de a partir de su propio conocimiento.

Nota:

El comportamiento anuncia las funciones de la primera solicitud al modelo de IA solo y deja de enviarlos en solicitudes posteriores para evitar un bucle infinito donde el modelo sigue eligiendo las mismas funciones para la invocación repetidamente.

Aquí, especificamos que el modelo de inteligencia artificial debe elegir la GetWeatherForCity función para invocar para obtener la previsión meteorológica de la ciudad de Boston, en lugar de adivinarla en función de su propio conocimiento. El modelo elegirá primero la GetWeatherForCity función para la invocación para recuperar la previsión meteorológica. Con esta información, el modelo puede determinar el color probable del cielo en Boston mediante la respuesta de la llamada a 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));

Un ejemplo idéntico en una configuración de plantilla 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));

Como alternativa, todas las funciones registradas en el kernel se pueden proporcionar al modelo de IA según sea necesario. Sin embargo, solo los elegidos por el modelo de IA como resultado de la primera solicitud se invocarán mediante el kernel semántico. Las funciones no se enviarán al modelo de IA en solicitudes posteriores para evitar un bucle infinito, como se mencionó anteriormente.

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

Uso del comportamiento de opción de función None

El None comportamiento indica al modelo de IA que use las funciones proporcionadas sin elegir ninguna de ellas para que la invocación genere una respuesta. Esto resulta útil para las ejecuciones secas cuando el autor de la llamada puede querer ver qué funciones elegiría el modelo sin invocarlas realmente. También es útil cuando desea que el modelo de INTELIGENCIA ARTIFICIAL extraiga información de un usuario, por ejemplo, en el ejemplo siguiente, el modelo de IA ha funcionado correctamente que Boston era el nombre de la ciudad.

Aquí anunciamos todas las funciones de los DateTimeUtils complementos y WeatherForecastUtils al modelo de IA, pero le indicamos que no elija ninguna de ellas. En su lugar, el modelo proporcionará una respuesta que describe qué funciones elegiría determinar el color del cielo en Boston en una fecha especificada.

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

Un ejemplo correspondiente en una configuración de plantilla de solicitud de 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));

function_invocation

La invocación de funciones es el proceso por el que Sematic Kernel invoca las funciones elegidas por el modelo de IA. Para obtener más información sobre la invocación de funciones, consulte el artículo de invocación de funciones.

Conectores de IA admitidos

A partir de hoy, los siguientes conectores de IA en kernel semántico admiten el modelo de llamada de funciones:

Conector de IA FunctionChoiceBehavior ToolCallBehavior
Anthropic Planeado
AzureAIInference Próximamente
AzureOpenAI ✔️ ✔️
Géminis Planeado ✔️
HuggingFace Planeado
Mistral Planeado ✔️
Ollama Próximamente
Onnx Próximamente
OpenAI ✔️ ✔️

Próximamente

Más información próximamente.

Próximamente

Más información próximamente.