Comportements de choix de fonction
Les comportements de choix de fonction sont des bits de configuration qui permettent à un développeur de configurer :
- Quelles fonctions sont publiées sur les modèles IA.
- Comment les modèles doivent les choisir pour l’appel.
- Comment le noyau sémantique peut appeler ces fonctions.
À compter d’aujourd’hui, les comportements de choix de fonction sont représentés par trois méthodes statiques de la FunctionChoiceBehavior
classe :
- Auto : permet au modèle IA de choisir entre zéro ou plusieurs des fonctions fournies pour l’appel.
- Obligatoire : force le modèle IA à choisir la ou les fonctions fournies.
- Aucun : indique au modèle IA de ne pas choisir de fonction(s).
Avertissement
La fonctionnalité d’appel de fonction est expérimentale et sujette à modification. Il devrait atteindre la disponibilité générale (GA) à la mi-novembre 2024. Reportez-vous au guide de migration pour migrer votre code vers les fonctionnalités d’appel de fonction les plus récentes.
Remarque
Les fonctionnalités d’appel de fonction ne sont prises en charge que par quelques connecteurs IA jusqu’à présent, consultez la section Connecteurs IA pris en charge ci-dessous pour plus d’informations.
Publicité de fonction
La publicité des fonctions est le processus de fourniture de fonctions aux modèles IA pour appeler et appeler davantage. Les trois comportements de choix de fonction acceptent une liste de fonctions à publier en tant que functions
paramètre. Par défaut, il s’agit de null, ce qui signifie que toutes les fonctions des plug-ins inscrits sur le noyau sont fournies au modèle 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 une liste de fonctions est fournie, seules ces fonctions sont envoyées au modèle 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));
Une liste vide de fonctions signifie qu’aucune fonction n’est fournie au modèle IA, ce qui équivaut à désactiver l’appel de fonction.
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));
Utilisation du comportement de choix de fonction automatique
Le Auto
comportement de choix de fonction indique au modèle IA de choisir entre zéro ou plusieurs fonctions fournies pour l’appel.
Dans cet exemple, toutes les fonctions des plug-ins et WeatherForecastUtils
du DateTimeUtils
modèle IA sont fournies en même temps que l’invite.
Le modèle choisit GetCurrentTime
d’abord la fonction pour l’appel pour obtenir la date et l’heure actuelles, car ces informations sont nécessaires en tant qu’entrée pour la GetWeatherForCity
fonction.
Ensuite, il choisira GetWeatherForCity
la fonction d’appel pour obtenir les prévisions météorologiques de la ville de Boston à l’aide de la date et de l’heure obtenues.
Avec ces informations, le modèle sera en mesure de déterminer la couleur probable du ciel à 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));
Le même exemple peut être facilement modélisé dans une configuration de modèle d’invite 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));
Utilisation du comportement de choix de fonction requis
Le Required
comportement force le modèle à choisir la ou les fonctions fournies pour l’appel. Cela est utile pour les scénarios lorsque le modèle IA doit obtenir des informations requises à partir des fonctions spécifiées plutôt qu’à partir de ses propres connaissances.
Remarque
Le comportement publie des fonctions dans la première requête au modèle IA uniquement et cesse de les envoyer dans les requêtes suivantes pour empêcher une boucle infinie où le modèle continue de choisir les mêmes fonctions pour l’appel à plusieurs reprises.
Ici, nous spécifions que le modèle IA doit choisir la GetWeatherForCity
fonction d’appel pour obtenir les prévisions météorologiques de la ville de Boston, plutôt que de deviner celle-ci en fonction de ses propres connaissances.
Le modèle choisit d’abord la GetWeatherForCity
fonction d’appel pour récupérer les prévisions météorologiques.
Avec ces informations, le modèle peut ensuite déterminer la couleur probable du ciel à Boston à l’aide de la réponse de l’appel à 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));
Exemple identique dans une configuration de modèle 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));
Vous pouvez également fournir toutes les fonctions inscrites dans le noyau au modèle IA en fonction des besoins. Toutefois, seules les seules personnes choisies par le modèle IA à la suite de la première requête seront appelées par le noyau sémantique. Les fonctions ne seront pas envoyées au modèle IA dans les requêtes suivantes pour empêcher une boucle infinie, comme mentionné ci-dessus.
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));
Utilisation d’aucun comportement de choix de fonction
Le None
comportement indique au modèle IA d’utiliser la ou les fonctions fournies sans choisir d’appel pour générer une réponse. Cela est utile pour les exécutions sèches lorsque l’appelant peut vouloir voir quelles fonctions le modèle choisirait sans les appeler réellement.
Il est également utile lorsque vous souhaitez que le modèle IA extrait des informations d’un utilisateur demande par exemple dans l’exemple ci-dessous le modèle IA correctement élaboré que Boston était le nom de la ville.
Ici, nous publieons toutes les fonctions des DateTimeUtils
plug-ins WeatherForecastUtils
et du modèle IA, mais nous vous demandons de ne pas les choisir.
Au lieu de cela, le modèle fournit une réponse décrivant les fonctions qu’il choisirait de déterminer la couleur du ciel à Boston à une date spécifiée.
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).
Exemple correspondant dans une configuration de modèle d’invite 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));
Appel de fonction
L’appel de fonction est le processus dans lequel sematic Kernel appelle les fonctions choisies par le modèle IA. Pour plus d’informations sur l’appel de fonction, consultez l’article sur l’appel de fonction.
Connecteurs IA pris en charge
À compter d’aujourd’hui, les connecteurs IA suivants dans le noyau sémantique prennent en charge le modèle d’appel de fonction :
Connecteur AI | FunctionChoiceBehavior | ToolCallBehavior |
---|---|---|
Anthropic | Planifié | ❌ |
AzureAIInference | Bientôt disponible | ❌ |
AzureOpenAI | ✔️ | ✔️ |
Gémeaux | Planifié | ✔️ |
HuggingFace | Planifié | ❌ |
Mistral | Planifié | ✔️ |
Ollama | Bientôt disponible | ❌ |
Onnx | Bientôt disponible | ❌ |
OpenAI | ✔️ | ✔️ |
Bientôt disponible
Plus d’informations prochainement.
Bientôt disponible
Plus d’informations prochainement.