练习 - 提供上下文提示

已完成

在本练习中,你将使用对话历史记录向大型语言模型(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;
    

    在此代码中,将 inputchatSummary 添加为内核参数。 然后,内核调用提示并将其路由到 SuggestActivities 插件。 还可以将用户的输入和助手的响应追加到聊天历史记录并显示结果。 接下来,需要将 chatSummary 变量添加到 SuggestActivities 插件。

  5. 导航到 Prompts/SuggestActivities/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. 导航到 Prompts/SuggestActivities/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 提供上下文提示,并调整了代码,以允许用户继续对话。