Delen via


Gedrag van functiekeuze

Gedrag van functiekeuzes zijn bits van configuratie waarmee een ontwikkelaar het volgende kan configureren:

  1. Welke functies worden geadverteerd naar AI-modellen.
  2. Hoe de modellen deze moeten kiezen voor aanroepen.
  3. Hoe Semantische kernel deze functies kan aanroepen.

Vanaf vandaag worden de gedrag van de functiekeuze vertegenwoordigd door drie statische methoden van de FunctionChoiceBehavior klasse:

  • Auto: Hiermee kan het AI-model kiezen uit nul of meer van de opgegeven functies voor aanroepen.
  • Vereist: dwingt het AI-model om opgegeven functies te kiezen.
  • Geen: geeft het AI-model de opdracht om geen functies te kiezen.

Waarschuwing

De functie-aanroepende mogelijkheid is experimenteel en kan worden gewijzigd. Naar verwachting wordt medio november 2024 algemene beschikbaarheid (GA) bereikt. Raadpleeg de migratiehandleiding voor het migreren van uw code naar de nieuwste mogelijkheden voor het aanroepen van functies.

Notitie

De mogelijkheden voor het aanroepen van functies worden tot nu toe alleen ondersteund door enkele AI-connectors. Zie de sectie Ondersteunde AI-connectors hieronder voor meer informatie.

Functieadvertentie

Functieadvertenties zijn het proces van het leveren van functies aan AI-modellen voor verdere aanroepen en aanroepen. Alle drie de functiekeuzegedragen accepteren een lijst met functies om te adverteren als een functions parameter. Standaard is het null, wat betekent dat alle functies van invoegtoepassingen die zijn geregistreerd op de kernel, worden geleverd aan het AI-model.

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

Als er een lijst met functies wordt opgegeven, worden alleen deze functies verzonden naar het AI-model:

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

Een lege lijst met functies betekent dat er geen functies worden geleverd aan het AI-model, wat gelijk is aan het uitschakelen van functieaanroepen.

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

Gedrag van automatische functiekeuze gebruiken

Het Auto gedrag van de functiekeuze geeft het AI-model de opdracht om te kiezen uit nul of meer van de opgegeven functies voor aanroepen.

In dit voorbeeld worden alle functies van de DateTimeUtils en WeatherForecastUtils invoegtoepassingen aan het AI-model geleverd, naast de prompt. Het model kiest GetCurrentTime eerst functie voor aanroep om de huidige datum en tijd te verkrijgen, omdat deze informatie nodig is als invoer voor de GetWeatherForCity functie. Vervolgens kiest GetWeatherForCity het functie voor aanroepen om de weersvoorspelling voor de stad Boston te krijgen met behulp van de verkregen datum en tijd. Met deze informatie kan het model de waarschijnlijke kleur van de hemel in Boston bepalen.

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

Hetzelfde voorbeeld kan eenvoudig worden gemodelleerd in een YAML-promptsjabloonconfiguratie:

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

Vereist gedrag van functiekeuze gebruiken

Het Required gedrag dwingt het model om de opgegeven functie(s) te kiezen voor aanroep. Dit is handig voor scenario's waarin het AI-model vereiste informatie moet verkrijgen uit de opgegeven functies in plaats van uit eigen kennis.

Notitie

Het gedrag adverteert alleen functies in de eerste aanvraag naar het AI-model en stopt met het verzenden ervan in volgende aanvragen om een oneindige lus te voorkomen waarbij het model steeds dezelfde functies kiest voor aanroepen.

Hier geven we op dat het AI-model de GetWeatherForCity functie moet kiezen voor aanroepen om de weersvoorspelling voor de stad Boston te verkrijgen, in plaats van het te raden op basis van zijn eigen kennis. Het model kiest eerst de GetWeatherForCity functie voor aanroep om de weersvoorspelling op te halen. Met deze informatie kan het model vervolgens de waarschijnlijke kleur van de hemel in Boston bepalen met behulp van het antwoord van de aanroep naar 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));

Een identiek voorbeeld in een YAML-sjabloonconfiguratie:

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

U kunt ook alle functies die zijn geregistreerd in de kernel, indien nodig aan het AI-model toevoegen. Alleen degene die door het AI-model zijn gekozen als gevolg van de eerste aanvraag, worden echter aangeroepen door de Semantische kernel. De functies worden in volgende aanvragen niet naar het AI-model verzonden om een oneindige lus te voorkomen, zoals hierboven vermeld.

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

Gedrag van geen functiekeuze gebruiken

Het None gedrag geeft het AI-model de opdracht om de opgegeven functies te gebruiken zonder een van deze functies te kiezen voor aanroepen om een antwoord te genereren. Dit is handig voor droge uitvoeringen wanneer de aanroeper mogelijk wil zien welke functies het model zou kiezen zonder ze daadwerkelijk aan te roepen. Het is ook handig als u wilt dat het AI-model informatie uit een gebruiker ophaalt, bijvoorbeeld in het voorbeeld onder het AI-model, correct is uitgewerkt dat Boston de plaatsnaam was.

Hier adverteren we alle functies van de DateTimeUtils en WeatherForecastUtils plug-ins naar het AI-model, maar geven we aan dat ze geen van deze functies hoeven te kiezen. In plaats daarvan geeft het model een antwoord waarin wordt beschreven welke functies het zou kiezen om de kleur van de hemel in Boston te bepalen op een opgegeven datum.

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

Een bijbehorend voorbeeld in een YAML-promptsjabloonconfiguratie:

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

Functie-aanroep

Functie-aanroep is het proces waarbij Sematic Kernel functies aanroept die zijn gekozen door het AI-model. Zie het artikel over functie-aanroep voor meer informatie over functie-aanroep.

Ondersteunde AI-connectors

Vanaf vandaag ondersteunen de volgende AI-connectors in Semantische kernel het model voor het aanroepen van functies:

AI-connector FunctionChoiceBehavior ToolCallBehavior
Anthropic Gepland
AzureAIInference Binnenkort beschikbaar
AzureOpenAI ✔️ ✔️
Tweelingen Gepland ✔️
HuggingFace Gepland
Mistral Gepland ✔️
Ollama Binnenkort beschikbaar
Onnx Binnenkort beschikbaar
OpenAI ✔️ ✔️

Binnenkort beschikbaar

Binnenkort meer informatie.

Binnenkort beschikbaar

Binnenkort meer informatie.