Udostępnij za pośrednictwem


Zachowania wyboru funkcji

Zachowanie wyboru funkcji to bity konfiguracji, które umożliwiają deweloperowi skonfigurowanie:

  1. Które funkcje są anonsowane do modeli sztucznej inteligencji.
  2. Sposób wybierania modeli do wywołania.
  3. Sposób wywoływania tych funkcji przez jądro semantyczne.

Obecnie zachowania wyboru funkcji są reprezentowane przez trzy statyczne metody FunctionChoiceBehavior klasy:

  • Automatycznie: umożliwia modelowi sztucznej inteligencji podjęcie decyzji o wyborze z zera lub większej liczby udostępnionych funkcji na potrzeby wywołania.
  • Wymagane: wymusza wybranie udostępnionych funkcji przez model sztucznej inteligencji.
  • Brak: nakazuje modelowi sztucznej inteligencji wybranie żadnych funkcji.

Ostrzeżenie

Funkcja wywoływania funkcji jest eksperymentalna i może ulec zmianie. Oczekuje się, że osiągnie ogólną dostępność do połowy listopada 2024 r. Zapoznaj się z przewodnikiem migracji, aby przeprowadzić migrację kodu do najnowszych funkcji wywoływania funkcji.

Uwaga

Możliwości wywoływania funkcji są obsługiwane tylko przez kilka łączników sztucznej inteligencji do tej pory, zobacz sekcję Obsługiwane łączniki sztucznej inteligencji poniżej, aby uzyskać więcej informacji.

Reklama funkcji

Reklama funkcji to proces udostępniania funkcji modelom sztucznej inteligencji na potrzeby dalszego wywoływania i wywoływania. Wszystkie trzy zachowania wyboru funkcji akceptują listę funkcji do anonsowania jako parametru functions . Domyślnie jest to wartość null, co oznacza, że wszystkie funkcje z wtyczek zarejestrowanych w jądrze są dostarczane do 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));

Jeśli zostanie podana lista funkcji, tylko te funkcje są wysyłane do 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();

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

Pusta lista funkcji oznacza, że do modelu AI nie są udostępniane żadne funkcje, co jest równoważne wyłączeniu wywoływania funkcji.

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

Korzystanie z zachowania wyboru funkcji automatycznej

Zachowanie Auto wyboru funkcji nakazuje modelowi sztucznej inteligencji podjęcie decyzji o wyborze zera lub większej liczby udostępnionych funkcji do wywołania.

W tym przykładzie wszystkie funkcje z wtyczki DateTimeUtils i WeatherForecastUtils zostaną udostępnione modelowi sztucznej inteligencji wraz z monitem. Model najpierw wybierze GetCurrentTime funkcję wywołania w celu uzyskania bieżącej daty i godziny, ponieważ te informacje są potrzebne jako dane wejściowe dla GetWeatherForCity funkcji. Następnie wybierze GetWeatherForCity funkcję wywołania, aby uzyskać prognozę pogody dla miasta Boston przy użyciu uzyskanej daty i godziny. Dzięki tym informacjom model będzie mógł określić prawdopodobny kolor nieba w Bostonie.

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

Ten sam przykład można łatwo modelować w konfiguracji szablonu monitu 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));

Korzystanie z wymaganego zachowania wyboru funkcji

Zachowanie Required wymusza wybranie udostępnionych funkcji dla wywołania. Jest to przydatne w scenariuszach, w których model sztucznej inteligencji musi uzyskać wymagane informacje z określonych funkcji, a nie z własnej wiedzy.

Uwaga

Zachowanie anonsuje funkcje w pierwszym żądaniu tylko do modelu AI i zatrzymuje wysyłanie ich w kolejnych żądaniach, aby zapobiec nieskończonej pętli, w której model wielokrotnie wybiera te same funkcje do wywołania.

W tym miejscu określamy, że model sztucznej inteligencji musi wybrać GetWeatherForCity funkcję wywołania, aby uzyskać prognozę pogody dla miasta Boston, a nie odgadnąć ją na podstawie własnej wiedzy. Model najpierw wybierze GetWeatherForCity funkcję wywołania w celu pobrania prognozy pogody. Dzięki tym informacjom model może następnie określić prawdopodobny kolor nieba w Bostonie przy użyciu odpowiedzi z wywołania do 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));

Identyczny przykład konfiguracji szablonu 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));

Alternatywnie wszystkie funkcje zarejestrowane w jądrze mogą być udostępniane modelowi sztucznej inteligencji zgodnie z wymaganiami. Jednak tylko te wybrane przez model AI w wyniku pierwszego żądania będą wywoływane przez jądro semantyczne. Funkcje nie będą wysyłane do modelu AI w kolejnych żądaniach, aby zapobiec nieskończonej pętli, jak wspomniano powyżej.

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

Używanie zachowania wyboru funkcji None

Zachowanie None instruuje model AI, aby używał udostępnionych funkcji bez wybierania któregokolwiek z nich w celu wywołania w celu wygenerowania odpowiedzi. Jest to przydatne w przypadku przebiegów suchych, gdy obiekt wywołujący może chcieć zobaczyć, które funkcje model wybierze bez wywoływania ich. Jest to również przydatne, gdy chcesz, aby model sztucznej inteligencji wyodrębnił informacje z pytania użytkownika, np. w przykładzie poniżej modelu sztucznej inteligencji prawidłowo wypracowano, że Boston był nazwą miasta.

W tym miejscu anonsujemy wszystkie funkcje z DateTimeUtils wtyczki i WeatherForecastUtils do modelu AI, ale instruujemy, aby nie wybierały żadnej z nich. Zamiast tego model udostępni odpowiedź opisującą funkcje, które wybierze, aby określić kolor nieba w Bostonie w określonej dacie.

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

Odpowiedni przykład w konfiguracji szablonu monitu 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));

Wywołanie funkcji

Wywołanie funkcji to proces, w którym jądro sematic wywołuje funkcje wybrane przez model sztucznej inteligencji. Aby uzyskać więcej informacji na temat wywołania funkcji, zobacz artykuł wywołania funkcji.

Obsługiwane łączniki sztucznej inteligencji

Od dziś następujące łączniki sztucznej inteligencji w jądrze semantycznym obsługują model wywoływania funkcji:

Łącznik sztucznej inteligencji FunctionChoiceBehavior ToolCallBehavior
Anthropic Planowane
AzureAIInference Wkrótce
AzureOpenAI ✔️ ✔️
Bliźnięta Planowane ✔️
HuggingFace Planowane
Mistral Planowane ✔️
Ollama Wkrótce
Onnx Wkrótce
OpenAI ✔️ ✔️

Wkrótce

Więcej informacji wkrótce.

Wkrótce

Więcej informacji wkrótce.