Funktionsvalsbeteenden
Funktionsvalsbeteenden är konfigurationsbitar som gör att en utvecklare kan konfigurera:
- Vilka funktioner som annonseras till AI-modeller.
- Hur modellerna ska välja dem för anrop.
- Hur semantisk kernel kan anropa dessa funktioner.
Från och med idag representeras funktionsvalsbeteendena av tre statiska metoder i FunctionChoiceBehavior
klassen:
- Auto: Gör att AI-modellen kan välja mellan noll eller fler av de angivna funktionerna för anrop.
- Obligatoriskt: Tvingar AI-modellen att välja angivna funktioner.
- Ingen: Instruerar AI-modellen att inte välja några funktioner.
Varning
Funktionen för funktionsanrop är experimentell och kan komma att ändras. Den förväntas nå allmän tillgänglighet (GA) i mitten av november 2024. Se migreringsguiden för att migrera koden till de senaste funktionerna för funktionsanrop.
Kommentar
Funktionerna för funktionsanrop stöds bara av några FÅ AI-anslutningsappar hittills. Mer information finns i avsnittet AI-anslutningsappar som stöds nedan.
Funktionsannonsering
Funktionsannonsering är processen att tillhandahålla funktioner till AI-modeller för ytterligare samtal och anrop. Alla tre funktionsvalsbeteenden accepterar en lista över funktioner som ska annonseras som en functions
parameter. Som standard är det null, vilket innebär att alla funktioner från plugin-program som är registrerade i kerneln tillhandahålls till AI-modellen.
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));
Om en lista över funktioner tillhandahålls skickas endast dessa funktioner till AI-modellen:
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));
En tom lista över funktioner innebär att inga funktioner tillhandahålls till AI-modellen, vilket motsvarar inaktivering av funktionsanrop.
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));
Använda autofunktionsvalsbeteende
Funktionsvalsbeteendet Auto
instruerar AI-modellen att välja mellan noll eller fler av de angivna funktionerna för anrop.
I det här exemplet kommer alla funktioner från DateTimeUtils
och WeatherForecastUtils
plugin-program att tillhandahållas till AI-modellen tillsammans med uppmaningen.
Modellen väljer GetCurrentTime
först funktion för anrop för att hämta aktuellt datum och tid, eftersom den här informationen behövs som indata för GetWeatherForCity
funktionen.
Därefter väljer GetWeatherForCity
den funktion för anrop för att hämta väderprognosen för staden Boston med hjälp av det erhållna datumet och tiden.
Med den här informationen kommer modellen att kunna fastställa den troliga färgen på himlen i 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));
Samma exempel kan enkelt modelleras i en YAML-mallkonfiguration:
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));
Använda funktionsvalsbeteende som krävs
Beteendet Required
tvingar modellen att välja de angivna funktionerna för anrop. Detta är användbart för scenarier när AI-modellen måste hämta nödvändig information från de angivna funktionerna i stället för från den egna kunskapen.
Kommentar
Beteendet annonserar funktioner i den första begäran till AI-modellen och slutar skicka dem i efterföljande begäranden för att förhindra en oändlig loop där modellen fortsätter att välja samma funktioner för anrop upprepade gånger.
Här anger vi att AI-modellen måste välja funktionen GetWeatherForCity
för anrop för att få väderprognosen för staden Boston, i stället för att gissa den baserat på sin egen kunskap.
Modellen väljer först funktionen GetWeatherForCity
för anrop för att hämta väderprognosen.
Med den här informationen kan modellen sedan fastställa den troliga färgen på himlen i Boston med hjälp av svaret från anropet till 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));
Ett identiskt exempel i en YAML-mallkonfiguration:
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));
Du kan också ange alla funktioner som är registrerade i kerneln till AI-modellen efter behov. Men endast de som väljs av AI-modellen som ett resultat av den första begäran anropas av semantisk kernel. Funktionerna skickas inte till AI-modellen i efterföljande begäranden för att förhindra en oändlig loop, som nämnts ovan.
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));
Använda beteende för val av ingen funktion
Beteendet None
instruerar AI-modellen att använda de angivna funktionerna utan att välja någon av dem för anrop för att generera ett svar. Detta är användbart för torra körningar när anroparen kanske vill se vilka funktioner modellen skulle välja utan att faktiskt anropa dem.
Det är också användbart när du vill att AI-modellen ska extrahera information från en användares fråga, t.ex. i exemplet under AI-modellen korrekt räknat ut att Boston var stadens namn.
Här annonserar vi alla funktioner från DateTimeUtils
WeatherForecastUtils
och plugin-program till AI-modellen men instruerar den att inte välja någon av dem.
I stället ger modellen ett svar som beskriver vilka funktioner den skulle välja för att fastställa himlens färg i Boston vid ett angivet 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).
Ett motsvarande exempel i konfigurationen av en YAML-promptmall:
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));
Funktionsanrop
Funktionsanrop är den process där Sematic Kernel anropar funktioner som valts av AI-modellen. Mer information om funktionsanrop finns i artikeln funktionsanrop.
AI-anslutningsappar som stöds
Från och med idag stöder följande AI-anslutningsappar i semantisk kernel funktionsanropsmodellen:
AI-anslutningsprogram | FunctionChoiceBehavior | ToolCallBehavior |
---|---|---|
Anthropic | Planerat | ❌ |
AzureAIInference | Kommer snart | ❌ |
AzureOpenAI | ✔️ | ✔️ |
Tvillingarna | Planerat | ✔️ |
HuggingFace | Planerat | ❌ |
Mistral | Planerat | ✔️ |
Ollama | Kommer snart | ❌ |
Onnx | Kommer snart | ❌ |
OpenAI | ✔️ | ✔️ |
Kommer snart
Mer information kommer snart.
Kommer snart
Mer information kommer snart.