一、引言
在构建基于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应用程序。如果你有任何问题或需要进一步的帮助,请随时提问。