一、引言
在构建基于Semantic Kernel的AI应用时,聊天历史记录对象(Chat History)是维护对话上下文和连续性的关键。本文将一步步指导你如何创建和管理聊天历史记录对象,从而为你的AI代理提供一个强大的对话管理工具。
二、聊天历史记录对象的重要性
聊天历史记录对象用于存储聊天会话中的所有消息,包括来自用户、助理、工具或系统的消息。它不仅帮助AI模型理解对话的上下文,还能确保对话的连贯性,无论对话跨越多少轮次。
三、实战
3.1创建聊天历史记录对象
创建聊天历史记录对象是一个简单的过程。以下是在C#中创建聊天历史记录对象的步骤:
- 引入必要的命名空间:
using Microsoft.SemanticKernel.ChatCompletion;
- 创建聊天历史记录对象:
ChatHistory history = new ChatHistory();
- 添加消息到聊天历史记录:
history.AddSystemMessage("你是一个乐于助人的技术助手");history.AddUserMessage("可以学到什么技术?");
history.AddAssistantMessage("关注我的博客,可以了解SemanticKernel、python、c#、docker等知识。您想要学点什么?");
在这个例子中,我们添加了系统消息、用户消息和助理消息,从而构建了一个简单的对话流程。
3.2 实战小例子
构建一个命令行聊天对话功能,具体代码如下,可以看到AI可以准确识别提到的每一项技术。
下面为完整代码,可以看前面几篇实战例子中的代码介绍。
public static async Task RunAsync(){
#pragma warning disable SKEXP0001, SKEXP0010, SKEXP0050, SKEXP0020, ASP0000//如果使用依赖项注入,则可能需要将 AI 服务直接添加到服务提供商。//如果要创建 AI 服务的单一实例并在暂时性内核中重复使用它们,这非常有用。var builder = Host.CreateApplicationBuilder();// 创建语义内核Kernel kernel = Kernel.CreateBuilder().AddOpenAIChatCompletion(modelId: Global.Model,//你使用的模型endpoint: new Uri(Global.EndpointKey),//你使用的模型请求地址apiKey: Global.ApiKey)//你使用的key.Build();builder.Services.AddOpenAIChatCompletion(modelId: Global.Model,endpoint: new Uri(Global.EndpointKey),apiKey: Global.ApiKey);builder.Services.AddTransient((serviceProvider) => {return new Kernel(serviceProvider);});//将聊天完成服务添加到内核后,可以使用 get 服务方法检索它们。 下面是如何从内核检索聊天完成服务的示例。var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();Console.WriteLine("--------------问答--------------");string input;bool running = true;ChatHistory history = new ChatHistory();history.AddSystemMessage("你是一个乐于助人的技术助手");history.AddUserMessage("可以学到什么技术?");history.AddAssistantMessage("关注我的博客,可以了解SemanticKernel、python、c#、docker等知识。您想要学点什么?");while (running){Console.WriteLine("当前历史对话数:" + history.Count);Console.WriteLine("请输入您的问题(输入'exit'退出):");input = Console.ReadLine();if (input.ToLower() == "exit")running = false;else{//将用户的问题添加到历史记录中history.AddUserMessage(input);var response = await chatCompletionService.GetChatMessageContentAsync(history,kernel: kernel);Console.WriteLine("AI回复内容如下:");Console.WriteLine(response);//将AI回复添加到历史记录中history.Add(response);}Console.WriteLine("---------------下一次循环-------------");Console.WriteLine();}Console.WriteLine("程序退出。");}
如下图,AI可以根据历史记录,准确无误地找到上面提到的4种技术(SemanticKernel、python、c#、docker)。
当提问第5种时,也可正确识别历史记录中是没有第5中技术的,AI就根据自身学习的内容,推荐了JS
四、结论
通过使用聊天历史记录对象,Semantic Kernel为AI应用程序提供了一种强大的方式,以维护对话的上下文和连续性。这不仅提高了用户体验,还使得AI模型能够更自然地参与对话。
希望这篇文章能帮助你理解如何使用聊天历史记录功能来增强你的Semantic Kernel应用程序。如果你有任何问题或需要进一步的帮助,请随时提问。