当前位置: 首页 > news >正文

MAF快速入门(3)聊天记录持久化到数据库

大家好,我是Edison。

上一篇,我们学习了MAF对于单个Agent的花样玩法,其中提到了聊天记录的持久化存储。本篇,我们来继续实践一下将聊天记录持久化到关系型数据库,这样用户在中断会话后返回时还能从上次断开的地方继续对话,提供给用户不间断的体验。

准备工作

在今天的这个案例中,我们创建了一个.NET控制台应用程序,安装了以下NuGet包:

  • Microsoft.EntityFrameworkCore.Sqlite
  • Microsoft.Agents.AI.OpenAI
  • Microsoft.Extensions.AI.OpenAI

我们的配置文件中定义了LLM API的信息:

{"OpenAI": {"EndPoint": "https://api.siliconflow.cn","ApiKey": "******************************","ModelId": "Qwen/Qwen2.5-32B-Instruct"}
}

这里我们使用 SiliconCloud 提供 Qwen2.5-32B-Instruct 模型,你可以通过这个URL注册账号:https://cloud.siliconflow.cn/i/DomqCefW 获取大量免费的Token来进行本次实验。然后,我们将配置文件中的API信息读取出来:

var config = new ConfigurationBuilder().AddJsonFile($"appsettings.json", optional: false, reloadOnChange: true).Build();
var openAIProvider = config.GetSection("OpenAI").Get<OpenAIProvider>();

数据库初始化

为了将聊天记录持久化,我们定一个CustomChatHistory类来记录每次对话的内容:

public sealed class CustomChatHistory
{public string Id { get; set; }public string Context { get; set; }public DateTime CreatedTime { get; set; } public CustomChatHistory(string context){Id = Guid.NewGuid().ToString();Context = context;CreatedTime = DateTime.UtcNow;}
}

然后,基于EF Core实现一个DbContext,这是老操作了:

public class ChatHistoryDbContext : DbContext
{public DbSet<CustomChatHistory> ChatHistories { get; set; }protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){optionsBuilder.UseSqlite("Data Source=ChatHistoryDb.db");}
}

有了DbContext后续我们就可以往数据库中写数据了。

创建一个AI Agent

通过MAF快速创建一个专注于回答马自达汽车知识的Agent:

var mazdaAgent = new OpenAIClient(new ApiKeyCredential(openAIProvider.ApiKey),new OpenAIClientOptions { Endpoint = new Uri(openAIProvider.Endpoint) }).GetChatClient(openAIProvider.ModelId).CreateAIAgent(name: "Powerful Assistant", instructions: "You are a helpful assistant who responds user message in Mazda cars.");

开始第一轮对话

开启第一轮对话,我们想了解下Mazda 3这款车:

var userMessage = "Hello, can you tell me about the Mazda 3?";
Console.WriteLine($"User> {userMessage}");
var thread = mazdaAgent.GetNewThread();
var agentResponse = await mazdaAgent.RunAsync(userMessage, thread);
Console.WriteLine($"Agent> {agentResponse}");

执行结果下图所示:

image

可以看到,它洋洋洒洒地用了很多文字给我们介绍马三这款车。

对话记录持久化

假设我们这时要接一个电话,暂时就不跟Agent对话了。那么,Agent需要将对话记录存下来,这里我们就需要进行AgentThread的序列化并将其存到数据库:

var serializedThread = thread.Serialize(JsonSerializerOptions.Web).GetRawText();
var chatConversation = new CustomChatHistory(serializedThread);
var dbContext = new ChatHistoryDbContext();
dbContext.Database.EnsureCreated();
dbContext.ChatHistories.Add(chatConversation);
await dbContext.SaveChangesAsync();

这里我们存入的是一个Sqlite文件数据库,主要用于演示,十分便捷。

image

假设过了几分钟,我们接完电话回来准备继续对话了,Agent系统需要再从数据库中将我们的对话记录读取出来,也就是进行AgentThread的反序列化:

var savedConversation = dbContext.ChatHistories.First(c => c.Id == chatConversation.Id);
var loadedThread = JsonSerializer.Deserialize<JsonElement>(savedConversation.Context, JsonSerializerOptions.Web);
var resumedThread = mazdaAgent.DeserializeThread(loadedThread, JsonSerializerOptions.Web);

开始第二轮对话

我们刚刚问了Mazda 3这款车的基本信息,现在我们想了解下这款车的一些特性。这里,我直接问“What are the feautres of this car?”,这个 this car 就需要结合上下文才能知道我问的是哪一款车。

userMessage = "What are the features of this car?";
Console.WriteLine($"User> {userMessage}");
agentResponse = await mazdaAgent.RunAsync(userMessage, resumedThread);
Console.WriteLine($"Agent> {agentResponse}");

执行结果如下图所示:

首先,通过debug我们可以看到反序列化出来的AgentThread的确是包含了我们第一轮的对话记录:

image

其次,Agent在聊天记录的基础上回答这个问题的结果如下:

image

由上图可以看出,Agent准确的分析到了我们所说的 this car 指的是之前聊到的 Mazda 3这款车,并给了我们一些这款车的特性,清晰准确!

小结

本文介绍了如何将Agent中的聊天记录持久化到数据库中,这对于保持用户对话体验十分重要。

下一篇,我们将继续MAF的学习。

示例源码

GitHub: https://github.com/EdisonTalk/MAFD

参考资料

Microsoft Learn,《Agent Framework Tutorials》

推荐学习

圣杰,《.NET + AI 智能体开发进阶》

 

http://www.jsqmd.com/news/53492/

相关文章:

  • 2025年十大再制造6.0T W12奥迪发动机厂家排行榜,E
  • 2025年国产发动机厂家年度排名:专业的国产发动机源头厂家有
  • 2025年三大EA888奥迪发动机厂家排行榜,再制造EA21
  • 2025靠谱的EN01国产发动机厂家:甄选高性价比工厂助力动
  • 【GitHub每日速递 20251128】Milvus向量数据库:高性能、多特性,助力AI应用开发新潮流!
  • 2025年热门的制药高低温一体机厂家选购指南与推荐
  • 深入解析:开源自动驾驶平台全景:超越Autoware和Apollo
  • 10-11月模拟赛题解 trick总结
  • 正规N63/N74宝马发动机厂家TOP5权威推荐:破解宝马动
  • 2025年热门的制药高低温一体机用户好评厂家排行
  • 《HelloGitHub》第 116 期
  • 2025年十大发动机再制造品牌排行榜,乐辉再制造发动机性价比
  • 2025年知名的大型双层玻璃反应釜/50升双层玻璃反应釜厂家最新权威推荐排行榜
  • 20232404 2025-2026-1 《网络与系统攻防技术》实验七实验报告
  • 2025年海外商务考察靠谱承办方推荐:海外商务考察优质公司有
  • 2025年口碑好的上海双层玻璃反应釜实力厂家TOP推荐榜
  • 2025年十大靠谱品牌策划公司推荐,有实力的品牌策划企业全解
  • 第56 合并区间 - 指南
  • 指针深入第二弹--字符指针、数组指针、函数指针、函数指针数组、转移表的理解加运用 - 实践
  • 详细介绍:uniapp设置vuex公共值状态管理
  • 2025年质量好的全自动旋转蒸发器厂家选购指南与推荐
  • 完整教程:Windows 系统中ffmpeg安装问题的彻底解决
  • 2025年热门的上海旋转蒸发器最新TOP厂家排名
  • 2025年知名的红色展厅设计专业公司推荐,专业红色文化展馆建
  • 2025年信誉好的红色展厅设计专业公司推荐,实力强的红色展厅
  • 2025杭州全域外卖服务商TOP5深度测评:斯创全域外卖与其
  • 2025年度上海办公室装修大型机构推荐:比较不错的办公室装修
  • 2025年热门的真空发生器热门厂家推荐榜单
  • 过滤分离性能检测验证哪家好?行业服务解析
  • 2025年质量好的真空发生器最新TOP厂家排名