Упражнение. Предоставление подсказок контекста

Завершено

В этом упражнении вы используете журнал бесед для предоставления контекста большой языковой модели (LLM). Вы также настраиваете код таким образом, чтобы пользователь продолжал беседу, как и реальный чат-бот. Приступим.

  1. Измените код, чтобы использовать do-while цикл для принятия входных данных пользователя:

    string input;
    
    do 
    {
        Console.WriteLine("What would you like to do?");
        input = Console.ReadLine();
    
        // ...
    }
    while (!string.IsNullOrWhiteSpace(input));
    

    Теперь вы можете продолжать беседу, пока пользователь не введет пустую строку.

  2. Зафиксируйте сведения о поездке пользователя, изменив ситуацию SuggestDestinations :

    case "SuggestDestinations":
        chatHistory.AppendLine("User:" + input);
        var recommendations = await kernel.InvokePromptAsync(input!);
        Console.WriteLine(recommendations);
        break;
    
  3. Используйте сведения о поездке SuggestActivities в случае со следующим кодом:

     case "SuggestActivities":
        var chatSummary = await kernel.InvokeAsync(
            "ConversationSummaryPlugin", 
            "SummarizeConversation", 
            new() {{ "input", chatHistory.ToString() }});
        break;
    

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

  4. Расширьте случай с помощью следующего SuggestActivities кода:

    var activities = await kernel.InvokePromptAsync(
        input,
        new () {
            {"input", input},
            {"history", chatSummary},
            {"ToolCallBehavior", ToolCallBehavior.AutoInvokeKernelFunctions}
    });
    
    chatHistory.AppendLine("User:" + input);
    chatHistory.AppendLine("Assistant:" + activities.ToString());
    
    Console.WriteLine(activities);
    break;
    

    В этом коде вы добавляете input и chatSummary в качестве аргументов ядра. Затем ядро вызывает запрос и направляет его в подключаемый SuggestActivities модуль. Вы также добавляете входные данные пользователя и ответ помощник в журнал чата и отображает результаты. Затем необходимо добавить переменную в подключаемый chatSummary SuggestActivities модуль.

  5. Перейдите в раздел "Запросы","Предложение"/config.json и откройте файл в Visual Studio Code

  6. В разделе input_variablesдобавьте переменную для журнала чата:

    "input_variables": [
      {
          "name": "history",
          "description": "Some background information about the user",
          "required": false
      },
      {
          "name": "destination",
          "description": "The destination a user wants to visit",
          "required": true
      }
      ]
    
  7. Перейдите в раздел "Запросы", "Предложить активацию"/skprompt.txt и откройте файл

  8. Добавьте запрос на использование журнала чата:

    You are an experienced travel agent. 
    You are helpful, creative, and very friendly. 
    Consider the traveler's background: {{$history}}
    

Оставьте оставшуюся часть запроса как есть. Теперь подключаемый модуль использует журнал чата для предоставления контекста LLM.

Проверьте свою работу

В этой задаче вы запустите приложение и убедитесь, что код работает правильно.

  1. Сравните обновленные варианты переключения со следующим кодом:

    case "SuggestDestinations":
            chatHistory.AppendLine("User:" + input);
            var recommendations = await kernel.InvokePromptAsync(input!);
            Console.WriteLine(recommendations);
            break;
    case "SuggestActivities":
    
        var chatSummary = await kernel.InvokeAsync(
            "ConversationSummaryPlugin", 
            "SummarizeConversation", 
            new() {{ "input", chatHistory.ToString() }});
    
        var activities = await kernel.InvokePromptAsync(
            input!,
            new () {
                {"input", input},
                {"history", chatSummary},
                {"ToolCallBehavior", ToolCallBehavior.AutoInvokeKernelFunctions}
        });
    
        chatHistory.AppendLine("User:" + input);
        chatHistory.AppendLine("Assistant:" + activities.ToString());
    
        Console.WriteLine(activities);
        break;
    
  2. Введите в терминале dotnet run. При появлении запроса введите текст, аналогичный следующему:

    What would you like to do?
    How much is 60 USD in new zealand dollars?
    
  3. Вы должны получить некоторые выходные данные, аналогичные следующему:

    $60 USD is approximately $97.88 in New Zealand Dollars (NZD)
    What would you like to do?
    
  4. Введите запрос на предложения назначения с некоторыми подсказками контекста, например:

    What would you like to do?
    I'm planning an anniversary trip with my spouse, but they are currently using a wheelchair and accessibility is a must. What are some destinations that would be romantic for us?
    
  5. Вы должны получить некоторые выходные данные с рекомендациями о доступных назначениях.

  6. Введите запрос на предложения действий, например:

    What would you like to do?
    What are some things to do in Barcelona?
    
  7. Вы должны получить рекомендации, которые соответствуют предыдущему контексту, например, доступные действия в Барселоне, как показано ниже:

    1. Visit the iconic Sagrada Família: This breathtaking basilica is an iconic symbol of Barcelona's architecture and is known for its unique design by Antoni Gaudí.
    
    2. Explore Park Güell: Another masterpiece by Gaudí, this park offers stunning panoramic views of the city, intricate mosaic work, and whimsical architectural elements.
    
    3. Visit the Picasso Museum: Explore the extensive collection of artworks by the iconic painter Pablo Picasso, showcasing his different periods and styles.
    

    Примечание.

    Если ваш код не создает ожидаемые выходные данные, можно просмотреть код в папке решения .

Вы можете продолжать тестировать приложение с различными запросами и подсказками контекста. Отличная работа! Вы успешно предоставили подсказки контекста llM и отрегулировали код, чтобы разрешить пользователю продолжить беседу.