Упражнение. Автоматическое вызов функций

Завершено

Пакет SDK для семантического ядра позволяет автоматически координировать функции и запросы, на которые ссылается ядро. Вместо того, чтобы вручную вызывать функции и запросы, это средство помогает сэкономить время и сделать приложения более умными. Давайте попробуем!

Подготовка среды разработки

Для этих упражнений начальный проект доступен для использования. Чтобы настроить начальный проект, выполните следующие действия.

Внимание

Для выполнения этих действий необходимо установить Visual Studio Code и платформа .NET Framework 8.0. Также может потребоваться установить расширение пакета разработки для Visual Studio Code C#.

  1. Откройте Visual Studio Code.

  2. В разделе "Пуск Visual Studio Code" выберите "Клонировать репозиторий Git".

  3. В строке URL-адреса введите https://github.com/MicrosoftLearning/MSLearn-Develop-AI-Agents-with-Azure-OpenAI-and-Semantic-Kernel-SDK.git

  4. В проводник создайте новую папку в расположении, которое легко найти и запомнить, например папку в рабочем столе.

  5. Нажмите кнопку "Выбрать в качестве назначения репозитория".

    Чтобы успешно клонировать проект, необходимо войти в GitHub.

  6. Открытие проекта в Visual Studio Code

  7. В обозревателе щелкните правой кнопкой мыши папку M05-auto-invoke-functions/M05-Project и щелкните "Открыть в интегрированном терминале"

  8. Разверните папку M05-auto-invoke-functions/M05-Project

    Должен появиться файл Program.cs.

  9. Откройте файл Program.cs и обновите следующие переменные с именем развертывания Azure OpenAI Services, ключом API, конечной точкой.

    string yourDeploymentName = "";
    string yourEndpoint = "";
    string yourAPIKey = "";
    

Теперь вы готовы начать упражнение. Удачи!

Предложение концертов пользователю

  1. В папке "Подключаемые модули" создайте новый файл с именем "MusicConcertPlugin.cs"

  2. В файле MusicConcertPlugin добавьте следующий код:

    using System.ComponentModel;
    using Microsoft.SemanticKernel;
    
    public class MusicConcertPlugin
    {
        [KernelFunction, Description("Get a list of upcoming concerts")]
        public static string GetTours()
        {
            string dir = Directory.GetCurrentDirectory();
            string content = File.ReadAllText($"{dir}/data/concertdates.txt");
            return content;
        }
    }
    

    Функция GetTours считывает файл с именем concertdates.txt и возвращает содержимое. Эта функция будет использоваться для получения списка предстоящих концертов.

    Затем создайте запрос на предложение LLM предложить концерт на основе недавно сыгранной музыки пользователя.

  3. В папке "Запросы" создайте новую папку с именем "SuggestConcert"

  4. Создайте файл "config.json" в папке "SuggestConcert" со следующим содержимым:

    {
        "schema": 1,
        "type": "completion",
        "description": "Suggest a concert to the user",
        "execution_settings": {
            "default": {
                "max_tokens": 4000,
                "temperature": 0
            }
        },
        "input_variables": [
            {
                "name": "upcomingConcerts",
                "description": "A list of artist's upcoming concerts",
                "required": true
            },
            {
                "name": "recentlyPlayedSongs",
                "description": "A list of songs recently played by the user",
                "required": true
            },
            {
                "name": "location",
                "description": "The user's location",
                "required": true
            }
        ]
    }
    
  5. Создайте файл skprompt.txt в папке "SuggestConcert" со следующим содержимым:

    Based on the user's recently played songs:
    {{$recentlyPlayedSongs}}
    
    And a list of upcoming concerts:
    {{$upcomingConcerts}}
    
    Suggest an upcoming concert. The user lives in {{$location}}, 
    please recommend a relevant concert that is close to their location.
    

    Этот запрос просит LLM предложить концерт на основе недавно сыгранных песен и расположений пользователя. Затем включите параметр автоматического вызова функции.

  6. Program.cs Откройте файл и следующую инструкцию using:

    using Microsoft.SemanticKernel.Connectors.OpenAI;
    

    Этот пакет позволяет использовать параметр автоматического вызова функции.

  7. Program.cs Обновите файл с помощью следующего кода:

    kernel.ImportPluginFromType<MusicLibraryPlugin>();
    kernel.ImportPluginFromType<MusicConcertPlugin>();
    kernel.ImportPluginFromPromptDirectory("Prompts");
    
    OpenAIPromptExecutionSettings settings = new()
    {
        ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
    };
    
    string prompt = @"I live in Portland OR USA. Based on my recently 
        played songs and a list of upcoming concerts, which concert 
        do you recommend?";
    
    var result = await kernel.InvokePromptAsync(prompt, new(settings));
    
    Console.WriteLine(result);
    
  8. Введите dotnet run в терминале

    Созданное предложение должно рекомендовать концерт на основе недавно сыгранных песен и расположений. Выходные данные могут быть похожи на следующий ответ:

    Based on your recently played songs and your location in Portland, OR, I would recommend attending the upcoming concert of Lisa Taylor. She will be performing in Portland on April 16, 2024. This concert would be a great opportunity for you to enjoy live music and experience Lisa Taylor' beautiful songs.
    

    Семантический ядро автоматически обнаруживает соответствующую функцию подключаемого модуля для использования и передает правильные параметры. Вы можете попробовать изменить расположение, чтобы узнать, как изменяется рекомендация. Вы также можете изменить запрос, чтобы сообщить LLM предложить песню из библиотеки.

Этот AutoInvokeKernelFunctions параметр позволяет семантике ядра автоматически вызывать функции и запросы, добавленные в ядро. Это средство позволяет создавать динамические, надежные приложения с помощью меньшего объема кода.