Sdílet prostřednictvím


Chování výběru funkce

Chování výběru funkce jsou bity konfigurace, které vývojářům umožňují konfigurovat:

  1. Které funkce se inzerují do modelů AI.
  2. Jak by si modely měly vybrat pro vyvolání.
  3. Jak může sémantické jádro vyvolat tyto funkce.

Od dnešního dne jsou chování výběru funkce reprezentovány třemi statickými metodami FunctionChoiceBehavior třídy:

  • Automaticky: Umožňuje modelu AI rozhodnout se vybrat z nuly nebo více zadaných funkcí pro vyvolání.
  • Povinné: Vynutí model AI zvolit poskytnuté funkce.
  • Žádné: Dává modelu AI pokyn, aby nevybírej žádné funkce.

Upozorňující

Funkce volání funkce je experimentální a může se změnit. Očekává se, že do poloviny listopadu 2024 dosáhne obecné dostupnosti. Pokud chcete migrovat kód na nejnovější funkce volání funkcí, projděte si průvodce migrací.

Poznámka:

Funkce volání jsou zatím podporovány pouze několika konektory AI. Další podrobnosti najdete v části Podporované konektory AI níže.

Inzerce funkcí

Inzerce funkcí je proces poskytování funkcí modelům AI pro další volání a vyvolání. Všechny tři chování výběru funkce přijímají seznam funkcí, které se mají inzerovat jako functions parametr. Ve výchozím nastavení má hodnotu null, což znamená, že všechny funkce z modulů plug-in zaregistrovaných v jádru jsou k dispozici modelu AI.

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

Pokud je k dispozici seznam funkcí, odesílají se do modelu AI pouze tyto funkce:

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

Prázdný seznam funkcí znamená, že modelu AI nejsou k dispozici žádné funkce, což odpovídá zakázání volání funkcí.

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

Použití chování automatické volby funkce

Chování Auto výběru funkce dává modelu AI pokyn, aby se rozhodl zvolit z nuly nebo více zadaných funkcí pro vyvolání.

V tomto příkladu budou všechny funkce z modulů DateTimeUtils WeatherForecastUtils plug-in k modelu AI k dispozici společně s výzvou. Model nejprve zvolí GetCurrentTime funkci pro vyvolání, aby získal aktuální datum a čas, protože tyto informace jsou potřeba jako vstup pro GetWeatherForCity funkci. Dále zvolí GetWeatherForCity funkci pro vyvolání, aby získal předpověď počasí pro město Boston pomocí získaného data a času. Díky této informaci bude model schopen určit pravděpodobnou barvu oblohy v Bostonu.

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

Stejný příklad lze snadno modelovat v konfiguraci šablony výzvy 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));

Použití chování výběru požadované funkce

Chování Required vynutí model zvolit poskytnuté funkce pro vyvolání. To je užitečné pro scénáře, kdy model AI musí získávat požadované informace ze zadaných funkcí, a ne z vlastních znalostí.

Poznámka:

Chování inzeruje funkce pouze v prvním požadavku na model AI a přestane je odesílat v následných požadavcích, aby se zabránilo nekonečné smyčce, ve které model neustále vybírá stejné funkce pro opakované vyvolání.

Zde určíme, že model AI musí zvolit GetWeatherForCity funkci pro vyvolání, aby získal předpověď počasí pro město Boston, a nikoli odhad na základě vlastních znalostí. Model nejprve zvolí GetWeatherForCity funkci pro vyvolání a načte předpověď počasí. Pomocí těchto informací pak model může určit pravděpodobnou barvu oblohy v Bostonu pomocí odpovědi z volání na 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));

Stejný příklad v konfiguraci šablony 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));

Případně je možné všem funkcím registrovaným v jádru podle potřeby poskytnout model AI. V důsledku prvního požadavku však bude vyvoláno sémantické jádro pouze ty, které model AI zvolil. Funkce nebudou odeslány do modelu AI v následných požadavcích, aby se zabránilo nekonečné smyčce, jak je uvedeno výše.

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

Použití chování výběru funkce None

Chování None dává modelu AI pokyn, aby používal poskytnuté funkce, aniž by k vyvolání vygeneroval odpověď. To je užitečné pro suchá spuštění, když volající může chtít zjistit, které funkce by model zvolil, aniž by je skutečně volal. Je také užitečné, když chcete, aby model AI extrahoval informace od uživatele, například v ukázce pod modelem AI správně fungoval, že Boston byl název města.

Zde inzerujeme všechny funkce z DateTimeUtils modelů AI a WeatherForecastUtils modulů plug-in do modelu AI, ale dáváme pokyn, aby si žádnou z nich nevybírejte. Místo toho model poskytne odpověď popisující funkce, které by se rozhodl určit barvu oblohy v Bostonu v zadaném datu.

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

Odpovídající příklad v konfiguraci šablony výzvy 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));

Vyvolání funkce

Vyvolání funkce je proces, kdy jádro Sematic vyvolá funkce vybrané modelem AI. Další podrobnosti o vyvolání funkce najdete v článku o vyvolání funkce.

Podporované konektory AI

Od dnešního dne podporují následující konektory AI v sémantickém jádru model volání funkcí:

Konektor AI FunctionChoiceBehavior ToolCallBehavior
Anthropic Naplánováno
AzureAIInference Již brzy
AzureOpenAI ✔️ ✔️
Blíženci Naplánováno ✔️
HuggingFace Naplánováno
Mistral Naplánováno ✔️
Ollama Již brzy
Onnx Již brzy
OpenAI ✔️ ✔️

Již brzy

Další informace budou brzy k dispozici.

Již brzy

Další informace budou brzy k dispozici.