Freigeben über


Funktionsauswahlverhalten

Funktionsauswahlverhalten sind Bits der Konfiguration, die es einem Entwickler ermöglicht, Folgendes zu konfigurieren:

  1. Welche Funktionen für KI-Modelle angekündigt werden.
  2. Wie die Modelle sie für Aufrufe auswählen sollen.
  3. Wie der semantische Kernel diese Funktionen aufrufen kann.

Ab heute werden die Funktionsauswahlverhalten durch drei statische Methoden der FunctionChoiceBehavior Klasse dargestellt:

  • Auto: Ermöglicht dem KI-Modell die Auswahl zwischen Null oder mehr der bereitgestellten Funktionen für den Aufruf.
  • Erforderlich: Erzwingt das KI-Modell, die bereitgestellten Funktionen auszuwählen.
  • Keine: Weist das KI-Modell an, keine Funktionen auszuwählen.

Warnung

Die Funktionsaufruffunktion ist experimentell und kann geändert werden. Es wird erwartet, dass mitte November 2024 die allgemeine Verfügbarkeit (GA) erreicht wird. Bitte lesen Sie den Migrationsleitfaden , um Ihren Code zu den neuesten Funktionen für Funktionsaufrufe zu migrieren.

Hinweis

Die Funktionen zum Aufrufen von Funktionen werden bisher nur von einigen KI-Connectors unterstützt. Weitere Details finden Sie im Abschnitt "Unterstützte KI-Connectors " weiter unten.

Funktionswerbung

Funktionswerbung ist der Prozess der Bereitstellung von Funktionen für KI-Modelle für weitere Aufrufe und Aufrufe. Alle drei Funktionsauswahlverhalten akzeptieren eine Liste von Funktionen, die als functions Parameter angekündigt werden. Standardmäßig ist es null, was bedeutet, dass alle Funktionen von Plug-Ins, die im Kernel registriert sind, für das KI-Modell bereitgestellt werden.

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

Wenn eine Liste von Funktionen bereitgestellt wird, werden nur diese Funktionen an das KI-Modell gesendet:

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

Eine leere Liste von Funktionen bedeutet, dass dem KI-Modell keine Funktionen bereitgestellt werden, was dem Deaktivieren von Funktionsaufrufen entspricht.

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

Verwenden des Verhaltens der Automatischen Funktionsauswahl

Das Auto Funktionsauswahlverhalten weist das KI-Modell an, sich für den Aufruf von null oder mehr der bereitgestellten Funktionen zu entscheiden.

In diesem Beispiel werden alle Funktionen aus den DateTimeUtils Und WeatherForecastUtils Plug-Ins zusammen mit der Eingabeaufforderung dem KI-Modell bereitgestellt. Das Modell wählt GetCurrentTime zunächst die Funktion zum Aufrufen des aktuellen Datums und der aktuellen Uhrzeit aus, da diese Informationen als Eingabe für die GetWeatherForCity Funktion benötigt werden. Als Nächstes wählt GetWeatherForCity er die Funktion für den Aufruf aus, um die Wettervorhersage für die Stadt Boston mithilfe des abgerufenen Datums und der uhrzeit abzurufen. Mit diesen Informationen kann das Modell die wahrscheinliche Farbe des Himmels in Boston bestimmen.

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

Dasselbe Beispiel kann in einer YAML-Eingabeaufforderungsvorlagenkonfiguration problemlos modelliert werden:

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

Verwenden des Erforderlichen Funktionsauswahlverhaltens

Das Required Verhalten zwingt das Modell, die bereitgestellten Funktionen für den Aufruf auszuwählen. Dies ist nützlich für Szenarien, in dem das KI-Modell erforderliche Informationen aus den angegebenen Funktionen abrufen muss, anstatt von eigenen Kenntnissen.

Hinweis

Das Verhalten kündigt Funktionen in der ersten Anforderung nur an das KI-Modell an und beendet das Senden in nachfolgenden Anforderungen, um eine endlose Schleife zu verhindern, in der das Modell die gleichen Funktionen für den Aufruf wiederholt wählt.

Hier geben wir an, dass das KI-Modell die GetWeatherForCity Funktion für Aufrufe auswählen muss, um die Wettervorhersage für die Stadt Boston zu erhalten, anstatt es basierend auf seinem eigenen Wissen zu erraten. Das Modell wählt zuerst die GetWeatherForCity Funktion zum Aufrufen der Wettervorhersage aus. Mit diesen Informationen kann das Modell dann anhand der Antwort des Anrufs GetWeatherForCitydie wahrscheinliche Farbe des Himmels in Boston bestimmen.

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

Ein identisches Beispiel in einer YAML-Vorlagenkonfiguration:

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

Alternativ können alle im Kernel registrierten Funktionen nach Bedarf für das KI-Modell bereitgestellt werden. Allerdings werden nur die vom KI-Modell als Ergebnis der ersten Anforderung gewählten vom semantischen Kernel aufgerufen. Die Funktionen werden in nachfolgenden Anforderungen nicht an das KI-Modell gesendet, um eine endlose Schleife zu verhindern, wie oben erwähnt.

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

Verwenden des Funktionsauswahlverhaltens ohne Funktion

Das None Verhalten weist das KI-Modell an, die bereitgestellten Funktionen zu verwenden, ohne sie für Aufrufe zum Generieren einer Antwort auszuwählen. Dies ist nützlich für trockene Ausführungen, wenn der Aufrufer möglicherweise sehen möchte, welche Funktionen das Modell auswählen würde, ohne sie tatsächlich aufzurufen. Es ist auch hilfreich, wenn Sie möchten, dass das KI-Modell Informationen aus einem Benutzer extrahiert, z. B. im Beispiel unten im KI-Modell richtig funktioniert hat, dass Boston der Stadtname war.

Hier werben wir alle Funktionen von den DateTimeUtils Und WeatherForecastUtils Plug-Ins an das AI-Modell, weisen sie aber an, sie nicht zu wählen. Stattdessen liefert das Modell eine Antwort, die beschreibt, welche Funktionen es auswählen würde, um die Farbe des Himmels in Boston an einem bestimmten Datum zu bestimmen.

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

Ein entsprechendes Beispiel in einer YAML-Eingabeaufforderungsvorlagenkonfiguration:

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

Funktionsaufruf

Funktionsaufruf ist der Prozess, bei dem Sematic Kernel Funktionen aufruft, die vom KI-Modell ausgewählt werden. Weitere Informationen zum Funktionsaufruf finden Sie im Artikel zum Aufrufen von Funktionen.

Unterstützte KI-Connectors

Ab heute unterstützen die folgenden KI-Connectors im semantischen Kernel das Funktionsaufrufmodell:

KI-Connector FunctionChoiceBehavior ToolCallBehavior
Anthropic Geplant
AzureAIInference In Kürze verfügbar
AzureOpenAI ✔️ ✔️
Zwillinge Geplant ✔️
HuggingFace Geplant
Mistral Geplant ✔️
Ollama In Kürze verfügbar
Onnx In Kürze verfügbar
OpenAI ✔️ ✔️

In Kürze verfügbar

Weitere Informationen werden in Kürze verfügbar sein.

In Kürze verfügbar

Weitere Informationen werden in Kürze verfügbar sein.