Comportamenti di scelta della funzione

I comportamenti di scelta della funzione sono bit di configurazione che consentono a uno sviluppatore di configurare:

  1. Quali funzioni vengono annunciate ai modelli di intelligenza artificiale.
  2. Modalità di scelta dei modelli per la chiamata.
  3. Come il kernel semantico potrebbe richiamare tali funzioni.

A partire da oggi, i comportamenti di scelta della funzione sono rappresentati da tre metodi statici della FunctionChoiceBehavior classe :

  • Auto: consente al modello di intelligenza artificiale di scegliere tra zero o più funzioni fornite per la chiamata.
  • Obbligatorio: forza il modello di intelligenza artificiale a scegliere le funzioni fornite.
  • Nessuno: indica al modello di intelligenza artificiale di non scegliere alcuna funzione.

Avviso

La funzionalità di chiamata di funzione è sperimentale e soggetta a modifiche. Entro metà novembre 2024 dovrebbe raggiungere la disponibilità generale.It is expected to reach general availability (GA) by mid-november 2024. Fare riferimento alla guida alla migrazione per eseguire la migrazione del codice alle funzionalità di chiamata di funzione più recenti.

Nota

Le funzionalità di chiamata alle funzioni sono supportate solo da alcuni connettori di intelligenza artificiale finora, per altri dettagli, vedere la sezione Connettori di intelligenza artificiale supportati di seguito.

Pubblicità delle funzioni

La pubblicità delle funzioni è il processo di fornitura di funzioni ai modelli di intelligenza artificiale per ulteriori chiamate e chiamate. Tutti e tre i comportamenti di scelta della funzione accettano un elenco di funzioni da annunciare come functions parametro. Per impostazione predefinita, è Null, ovvero tutte le funzioni dei plug-in registrati nel kernel vengono fornite al modello di intelligenza artificiale.

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

Se viene fornito un elenco di funzioni, solo queste funzioni vengono inviate al modello di intelligenza artificiale:

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

Un elenco vuoto di funzioni significa che non viene fornita alcuna funzione al modello di intelligenza artificiale, che equivale alla disabilitazione della chiamata di funzione.

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 comportamento di scelta della funzione automatica

Il Auto comportamento di scelta della funzione indica al modello di intelligenza artificiale di scegliere tra zero o più funzioni fornite per la chiamata.

In questo esempio, tutte le funzioni dei DateTimeUtils plug-in e WeatherForecastUtils verranno fornite al modello di intelligenza artificiale insieme al prompt. Il modello sceglierà GetCurrentTime prima la funzione per la chiamata per ottenere la data e l'ora correnti, perché queste informazioni sono necessarie come input per la GetWeatherForCity funzione. Successivamente, sceglierà GetWeatherForCity la funzione per la chiamata per ottenere le previsioni meteo per la città di Boston usando la data e l'ora ottenute. Con queste informazioni, il modello sarà in grado di determinare il colore probabile del cielo a 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));

Lo stesso esempio può essere facilmente modellato in una configurazione del modello di richiesta 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 comportamento di scelta della funzione richiesta

Il Required comportamento forza il modello a scegliere le funzioni specificate per la chiamata. Ciò è utile per gli scenari in cui il modello di intelligenza artificiale deve ottenere informazioni necessarie dalle funzioni specificate anziché dalle proprie conoscenze.

Nota

Il comportamento annuncia le funzioni nella prima richiesta solo al modello di intelligenza artificiale e interrompe l'invio nelle richieste successive per impedire un ciclo infinito in cui il modello continua a scegliere le stesse funzioni per la chiamata ripetutamente.

In questo caso, si specifica che il modello di intelligenza artificiale deve scegliere la GetWeatherForCity funzione per la chiamata per ottenere le previsioni meteo per la città di Boston, invece di indovinarla in base alla propria conoscenza. Il modello sceglierà prima di tutto la funzione per la GetWeatherForCity chiamata per recuperare le previsioni meteo. Con queste informazioni, il modello può quindi determinare il colore probabile del cielo a Boston usando la risposta dalla chiamata 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));

Esempio identico in una configurazione del modello 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));

In alternativa, tutte le funzioni registrate nel kernel possono essere fornite al modello di intelligenza artificiale in base alle esigenze. Tuttavia, solo quelli scelti dal modello di intelligenza artificiale in seguito alla prima richiesta verranno richiamati dal kernel semantico. Le funzioni non verranno inviate al modello di intelligenza artificiale nelle richieste successive per impedire un ciclo infinito, come indicato in precedenza.

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 comportamento di scelta di nessuna funzione

Il None comportamento indica al modello di intelligenza artificiale di usare le funzioni fornite senza sceglierle per generare una risposta. Ciò è utile per le esecuzioni asciutte quando il chiamante può voler vedere quali funzioni il modello sceglierebbe senza richiamarle effettivamente. È utile anche quando si vuole che il modello di intelligenza artificiale estragga le informazioni da un utente, ad esempio nell'esempio seguente il modello di intelligenza artificiale ha funzionato correttamente che Boston era il nome della città.

In questo caso, annunciamo tutte le funzioni dai DateTimeUtils plug-in e WeatherForecastUtils al modello di intelligenza artificiale, ma indicare di non sceglierne una. Al contrario, il modello fornirà una risposta che descrive quali funzioni sceglierebbe di determinare il colore del cielo a Boston in una data specificata.

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

Esempio corrispondente in una configurazione del modello di richiesta 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));

Chiamata di funzione

La chiamata di funzione è il processo in cui Kernel Sematic richiama le funzioni scelte dal modello di intelligenza artificiale. Per altri dettagli sulla chiamata di funzione, vedere l'articolo chiamata di funzione.

Connettori di intelligenza artificiale supportati

A partire da oggi, i connettori di intelligenza artificiale seguenti in Semantic Kernel supportano il modello di chiamata della funzione:

Connettore di intelligenza artificiale FunctionChoiceBehavior ToolCallBehavior
Anthropic Pianificato
AzureAIInference Presto disponibile
AzureOpenAI ✔️ ✔️
Gemelli Pianificato ✔️
HuggingFace Pianificato
Mistral Pianificato ✔️
Ollama Presto disponibile
Onnx Presto disponibile
OpenAI ✔️ ✔️

Presto disponibile

Altre informazioni saranno presto disponibili.

Presto disponibile

Altre informazioni saranno presto disponibili.