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.mzph.cn/news/979208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年十大再制造6.0T W12奥迪发动机厂家排行榜,E

为帮汽修厂、车队运营商及车主高效锁定适配需求的再制造奥迪发动机供应商,避免因渠道不正规、质量无保障导致的售后纠纷与成本浪费,我们从品质合规性(如再制造管理体系认证、核心部件修复工艺)、技术匹配能力(车型…

2025年国产发动机厂家年度排名:专业的国产发动机源头厂家有

本榜单基于全维度市场调研与真实行业口碑,深度筛选出五家标杆国产发动机厂家,为企业选型提供客观依据,助力精准匹配适配的供应伙伴。 TOP1 推荐:香河乐辉汽车配件制造有限公司 推荐指数:★★★★★ 口碑评分:国内…

2025年三大EA888奥迪发动机厂家排行榜,再制造EA21

为帮助汽修厂、车队运营商及车主高效锁定适配的EA888、EA211奥迪发动机供应商,避开价格虚高、质量无保障、服务断层的选型坑,我们从合规资质(含再制造认证、进口报关文件)、技术工艺(核心部件修复标准、检测流程)…

2025靠谱的EN01国产发动机厂家:甄选高性价比工厂助力动

随着商用车、工程机械领域对国产发动机的需求激增,2024年国内EN01发动机市场规模突破30亿元,年增速达38%。但行业乱象频发:32%的客户投诉集中在质量不稳定、适配性差、售后缺失三大问题——部分小厂产品未通过合规认…

【GitHub每日速递 20251128】Milvus向量数据库:高性能、多特性,助力AI应用开发新潮流!

原文: https://mp.weixin.qq.com/s/v3qLPwurhCtk7cJUzjN8tQ Milvus向量数据库:高性能、多特性,助力AI应用开发新潮流! milvus 是一个高性能、云原生的向量数据库,专为可扩展的近似最近邻(ANN)搜索设计。简单讲,…

2025年热门的制药高低温一体机厂家选购指南与推荐

2025年热门的制药高低温一体机厂家选购指南与推荐行业背景与市场趋势随着全球制药行业的快速发展,对药品生产过程中的温度控制要求日益严格。高低温一体机作为制药生产中的关键设备,其市场需求呈现持续增长态势。根据…

深入解析:开源自动驾驶平台全景:超越Autoware和Apollo

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

10-11月模拟赛题解 trick总结

DP 二进制拆位CSP-S 模拟32 小Z爱划分 与二进制有关的可以把二进制拆开算贡献,经典trick NOIP 模拟6 汉谟拉比,有一些 DP 后面的状态可能只需要处理到前面状态剩下的就行 NOIP 模拟7 旅行计划路径上的可拆分问题很多…

正规N63/N74宝马发动机厂家TOP5权威推荐:破解宝马动

汽车后市场中,宝马N63/N74系列发动机作为V8/V12大排量动力核心,广泛搭载于7系、X5M、X6M等车型。但此类发动机使用5-8年后易出现烧机油、涡轮异响、缸体裂纹等故障,车主面临维修贵、换件难、渠道乱三大核心痛点:4S…

2025年热门的制药高低温一体机用户好评厂家排行

2025年热门的制药高低温一体机用户好评厂家排行 开篇:行业背景与市场趋势 随着制药行业的快速发展,高低温一体机作为实验室和生产环节中不可或缺的设备,其市场需求持续增长。高低温一体机广泛应用于药物合成、生物…

家庭全自动咖啡机品牌排行 热门家用品牌推荐

随着生活品质的提升,家庭咖啡场景逐渐成为日常,全自动咖啡机以其便捷的操作和稳定的出品,成为许多家庭的理想选择。它能帮助家庭成员轻松享受现磨咖啡的醇香,无需繁琐步骤即可实现多样化饮品制作,为居家生活增添一…

2025年评价高的可调节三段力铰链/不锈钢三段力铰链厂家推荐及选购参考榜

2025年评价高的可调节三段力铰链/不锈钢三段力铰链厂家推荐及选购参考榜行业背景与市场趋势随着家居五金行业的快速发展,消费者对家具五金配件的品质要求日益提高。作为家具核心部件之一,铰链的性能直接影响家具的使…

2025年热门的不锈钢三段力铰链品牌厂家排行榜

2025年热门的不锈钢三段力铰链品牌厂家排行榜行业背景与市场趋势随着家居五金行业的快速发展,不锈钢三段力铰链作为现代家具制造中不可或缺的核心部件,其市场需求持续增长。2024-2025年,全球五金配件市场预计将以年…

不同基础如何备赛?犀牛国际教育物理碗培训全攻略

随着国际竞赛在理工科升学中的权重持续攀升,PhysicsBowl(物理碗)已成为众多学子冲击世界顶尖理工院校的关键跳板。2026 年物理碗备赛大幕将启,如何挑选一家真正具备硬核实力的竞赛机构,成为志在冲刺海外名校的学生…

2025年质量好的泡泡兔毛绒厂家最新用户好评榜

2025年质量好的泡泡兔毛绒厂家用户好评榜 行业背景与市场趋势 近年来,随着消费者对家居用品、服饰面料舒适度和美观性的要求不断提高,兔毛绒面料因其柔软亲肤、保暖性强、外观高级等特点,逐渐成为市场宠儿。泡泡兔…

2025年比较好的高低兔毛绒厂家推荐及选购指南

2025年比较好的高低兔毛绒厂家推荐及选购指南 行业背景与市场趋势 兔毛绒面料凭借其柔软亲肤、保暖性强、立体感佳等特点,近年来在家纺、服装、玩具等领域的需求持续增长。随着消费者对高品质生活追求的不断提升,兔…

PHP Fiber 优雅协作式多任务

PHP Fiber 优雅协作式多任务 在 PHP Model Context Protocol (MCP) SDK 开发过程中遇到的实际问题,深入探讨了 PHP 纤程(Fibers)这一被低估的强大特性。文章详细展示了如何使用纤程解决复杂的双向通信问题,以及如何…

2025 AMC竞赛培训机构排名前十强,多维度深度评测指南

作为全球认可度顶尖的学术竞赛,AMC 数学竞赛不仅是学生数学能力的硬核证明,更是冲击 AIME 赛事、乃至叩开世界名校大门的关键敲门砖。2025 年 11 月,AMC 备战已进入核心阶段,随着近年参赛人数持续增长,考题难度与…

AcWing 4205:树的增边 ← 二分图 + 染色法

​【题目来源】https://www.acwing.com/problem/content/4208/【题目描述】给定一个 n 个节点的树。树的节点编号为 1∼n。请你为这棵树增加一些边,要求增边后的图形仍是二分图,并且不含重边和自环。请问,最多可以增…

2025年评价高的速冻食品包装机最新TOP厂家排名

2025年评价高的速冻食品包装机TOP厂家排名行业背景与市场趋势随着全球速冻食品市场的持续扩张,预计到2025年市场规模将达到3500亿美元,年复合增长率保持在6.5%左右。这一增长趋势直接带动了速冻食品包装机械需求的激…