练习 - 提供上下文提示
在本练习中,你将使用对话历史记录向大型语言模型(LLM)提供上下文。 还可以调整代码,使用户能够继续聊天,就像真正的聊天机器人一样。 让我们开始吧!
修改代码以使用
do
-while
循环接受用户的输入:string input; do { Console.WriteLine("What would you like to do?"); input = Console.ReadLine(); // ... } while (!string.IsNullOrWhiteSpace(input));
现在,你可以继续对话,直到用户输入一个空白行。
通过修改
SuggestDestinations
事例捕获有关用户行程的详细信息:case "SuggestDestinations": chatHistory.AppendLine("User:" + input); var recommendations = await kernel.InvokePromptAsync(input!); Console.WriteLine(recommendations); break;
将
SuggestActivities
示例中的行程详细信息与以下代码一起使用:case "SuggestActivities": var chatSummary = await kernel.InvokeAsync( "ConversationSummaryPlugin", "SummarizeConversation", new() {{ "input", chatHistory.ToString() }}); break;
在此代码中,你将使用内置
SummarizeConversation
函数来汇总与用户的聊天。 接下来,让我们使用摘要来建议目标上的活动。使用以下代码扩展
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
插件。导航到 Prompts/SuggestActivities/config.json 并在 Visual Studio Code 中打开该文件
在
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 } ]
导航到 Prompts/SuggestActivities/skprompt.txt 并打开该文件
添加提示以使用聊天历史记录:
You are an experienced travel agent. You are helpful, creative, and very friendly. Consider the traveler's background: {{$history}}
按原样保留其余提示。 现在,插件使用聊天历史记录向 LLM 提供上下文。
检查你的工作
在此任务中,运行应用程序并验证代码是否正常工作。
将更新的开关事例与以下代码进行比较:
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;
在终端中输入
dotnet run
。 出现提示时,输入类似于以下内容的一些文本:What would you like to do? How much is 60 USD in new zealand dollars?
您将看到类似于以下内容的输出:
$60 USD is approximately $97.88 in New Zealand Dollars (NZD) What would you like to do?
输入提示以获取目标建议,附带一些上下文提示,例如:
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?
你应该会收到一些输出,其中包含可访问目标的建议。
输入活动建议的提示,例如:
What would you like to do? What are some things to do in Barcelona?
您应该收到符合之前背景的建议,例如,类似以下在巴塞罗那的无障碍活动:
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 提供上下文提示,并调整了代码,以允许用户继续对话。