news 2026/2/25 17:18:52

.NET+AI | MEAI | 会话缓存(6)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
.NET+AI | MEAI | 会话缓存(6)

一句话简介

通过 Microsoft.Extensions.AI 的缓存功能,智能存储和复用 AI 响应,显著降低 API 成本并将响应速度提升 10-100 倍。

🎯 核心价值

✅ 成本优化:相同请求直接返回缓存,避免重复 API 调用

✅ 性能飞跃:缓存命中响应时间可缩短至毫秒级

✅ 全场景支持:自动处理流式与非流式两种响应模式

✅ 生产就绪:支持 Redis、SQL Server 等企业级分布式存储

📝 为什么需要缓存?

在生产环境中,大语言模型调用存在三大痛点:

痛点 影响 缓存方案

成本高昂 每次 API 调用产生费用 重复请求直接返回缓存

延迟较高 网络+模型推理耗时 缓存命中毫秒级响应

重复请求 用户常问相同问题 智能识别并复用结果

典型场景:

📋 FAQ 系统:用户反复咨询相同问题

📚 文档查询:内容相对固定的知识库

🔄 批量处理:大量重复或相似的查询任务

🏗️ 核心组件

关键组件:

组件 职责

CachingChatClient 抽象基类,定义缓存逻辑

DistributedCachingChatClient 基于 IDistributedCache 的实现

缓存键生成 基于消息+选项+版本的哈希计算

流式处理 自动合并/拆分流式更新

💻 快速开始

1. 安装依赖包

dotnet add package Microsoft.Extensions.AI

dotnet add package Microsoft.Extensions.AI.OpenAI

dotnet add package Microsoft.Extensions.Caching.Memory

生产环境推荐使用 Redis:

dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis

2. 启用缓存(3 行代码)

using Microsoft.Extensions.AI;

using Microsoft.Extensions.Caching.Distributed;

// 创建缓存存储

IDistributedCache cache = new MemoryDistributedCache(/*...*/);

// 启用缓存中间件

var cachedClient = new ChatClientBuilder(baseChatClient)

.UseDistributedCache(cache)

.Build();

核心要点:

🔧 使用 ChatClientBuilder 构建管道

🔧 UseDistributedCache 一行启用缓存

🔧 透明集成,无需修改业务代码

3. 验证缓存效果

var question = "什么是 Microsoft.Extensions.AI?";

// 第一次请求 - 调用模型

var sw1 = Stopwatch.StartNew();

var response1 = await cachedClient.GetResponseAsync(question);

sw1.Stop();

Console.WriteLine($"⏱️ 第一次: {sw1.ElapsedMilliseconds}ms");

// 第二次请求 - 从缓存返回

var sw2 = Stopwatch.StartNew();

var response2 = await cachedClient.GetResponseAsync(question);

sw2.Stop();

Console.WriteLine($"⏱️ 第二次: {sw2.ElapsedMilliseconds}ms");

Console.WriteLine($"✨ 加速比: {sw1.ElapsedMilliseconds / sw2.ElapsedMilliseconds}x");

典型效果:

🔵 首次请求: 800-2000ms

🟢 缓存命中: 10-50ms

⚡ 性能提升: 10-100 倍

🔧 高级配置

1. 流式响应缓存

缓存同样支持流式模式,通过 CoalesceStreamingUpdates 控制行为:

var cachedClient = baseChatClient

.AsBuilder()

.UseDistributedCache(cache, configure: c =>

{

// true(默认):合并流式更新后缓存,读取时再拆分

c.CoalesceStreamingUpdates = true;

})

.Build();

工作原理:

配置 存储方式 适用场景

true 合并为完整响应 节省存储,推荐

false 保留流式序列 需要精确重放流

2. 生产环境使用 Redis

using Microsoft.Extensions.Caching.StackExchangeRedis;

var redisCache = new RedisCache(Options.Create(new RedisCacheOptions

{

Configuration = "localhost:6379",

InstanceName = "MEAICache:"

}));

var cachedClient = baseChatClient

.AsBuilder()

.UseDistributedCache(redisCache)

.Build();

Redis 优势:

🏢 分布式部署,多实例共享缓存

⚡ 高性能,支持持久化

🔒 支持过期策略和内存管理

3. 缓存键分区管理

通过 CacheKeyAdditionalValues 创建独立的缓存分区:

var productionClient = baseChatClient

.AsBuilder()

.UseDistributedCache(cache, configure: c =>

{

c.CacheKeyAdditionalValues = new[] { "prod", "v2", "zh-CN" };

})

.Build();

适用场景:

场景 分区策略 示例

多语言 按语言分区 ["zh-CN"], ["en-US"]

版本管理 按版本分区 ["v1"], ["v2"]

环境隔离 按环境分区 ["dev"], ["prod"]

🏢 企业级最佳实践

1. 自定义缓存策略

继承 CachingChatClient 实现自定义逻辑:

public class CustomCachingClient : CachingChatClient

{

protected override bool EnableCaching(

IEnumerable<ChatMessage> messages,

ChatOptions? options)

{

// 自定义规则:不缓存包含敏感词的请求

var text = string.Join(" ", messages.Select(m => m.Text));

return !text.Contains("机密") && base.EnableCaching(messages, options);

}

}

2. 何时不应使用缓存?

默认禁用场景:

⚠️ 会话型对话:设置了 ConversationId 的请求

⚠️ 敏感数据:包含个人信息或机密内容

⚠️ 实时性要求:股票报价、实时新闻等

⚠️ 随机性响应:需要每次生成不同结果

3. FAQ 客服系统示例

var faqQuestions = new[]

{

"营业时间是什么?",

"如何申请退款?",

"支持哪些支付方式?",

"营业时间是什么?", // 重复问题

};

foreach (var question in faqQuestions)

{

var response = await cachedClient.GetResponseAsync(question);

// 重复问题自动从缓存返回,响应时间显著降低

}

实测效果:

📊 总请求: 4 次

🟢 缓存命中: 1 次 (25%)

⚡ 平均响应时间: 降低 30-50%

💰 API 成本: 节省 25%

⚠️ 注意事项

JSON 序列化限制

DistributedCachingChatClient 使用 JSON 序列化存储数据,存在以下限制:

限制项 说明

RawRepresentation 不会被序列化

AdditionalProperties object 值会变为 JsonElement

自定义类型 可能无法完整往返

建议: 如果依赖这些属性,请谨慎使用或实现自定义序列化。

缓存版本管理

MEAI 会在序列化格式变更时自动更新缓存版本号(当前 v2),使旧缓存失效,避免兼容性问题。

🎯 总结

✅ 简单集成: 通过 UseDistributedCache 一行代码启用缓存

✅ 显著收益: 响应速度提升 10-100 倍,成本显著降低

✅ 灵活配置: 支持流式/非流式、自定义策略、分区管理

✅ 生产就绪: 支持 Redis、SQL Server 等企业级存储

适用场景:

📋 FAQ 和客服系统

📚 文档查询和知识库

🔄 批量处理和数据分析

下一步: 探索 MEAI 的 Chat Reducer(消息压缩)和自定义中间件功能,构建更强大的 AI 应用管道。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/24 23:47:49

剩下的数【牛客tracker 每日一题】

剩下的数 时间限制&#xff1a;1秒 空间限制&#xff1a;256M 网页链接 牛客tracker 牛客tracker & 每日一题&#xff0c;完成每日打卡&#xff0c;即可获得牛币。获得相应数量的牛币&#xff0c;能在【牛币兑换中心】&#xff0c;换取相应奖品&#xff01;助力每日有题…

作者头像 李华
网站建设 2026/2/22 16:54:12

小蜜蜂多酒店系统怎么配置自动叫醒服务和自动退房提醒

小蜜蜂多酒店系统是专业为酒店语音研发的下一代综合系统&#xff0c;支持为多家酒店提供语音服务&#xff0c;分机号支持重复使用&#xff0c;同时支持自动叫醒服务和自动退房提醒服务或者发送活动通知等&#xff01;那么怎么来配置某些客房的自动叫醒呢&#xff1f;首先打开小…

作者头像 李华
网站建设 2026/2/24 12:09:54

2025 年值得关注的 Voice Agent(语音智能体)解决方案推荐

在 2025 年企业服务智能化浪潮中&#xff0c;云蝠智能 VoiceAgent 大模型语音智能体凭借全栈自研技术、场景化落地能力及商业价值突破&#xff0c;成为最值得关注的 Voice Agent 解决方案。其以 “大模型驱动 组织化智能” 为核心&#xff0c;重新定义语音交互的效率、温度与行…

作者头像 李华
网站建设 2026/2/22 17:34:51

收藏备用!程序员转行大模型:别慌,你的技术底蕴就是底气

当“大模型”从技术圈的讨论热点&#xff0c;变成企业招聘启事里的“必备技能”&#xff0c;不少深耕Java、Python、前端开发多年的程序员开始焦虑&#xff1a;每天和CRUD、接口、业务逻辑打交道&#xff0c;突然要面对AI浪潮&#xff0c;是继续守着熟悉的领域生怕被淘汰&#…

作者头像 李华
网站建设 2026/2/16 8:35:45

LangChain重磅发布Polly:AI Agent工程师的智能调试伙伴

LangChain是受数千个团队信任的Agent工程平台&#xff0c;用于构建生产级Agent。现在&#xff0c;有了Polly&#xff0c;你拥有一位AI专家&#xff0c;在每一步都为你提供帮助。2025年12月10日&#xff0c;LangChain正式发布了Polly。一款直接集成在LangSmith平台中的AI智能助手…

作者头像 李华
网站建设 2026/2/21 20:35:06

小柯音乐剧《等你爱我》爆改上演 小柯剧场舞台成网红打卡地

据悉&#xff0c;12月24日晚7时30分&#xff0c;小柯经典IP音乐剧《等你爱我》迎圣诞以全新版本震撼回归。然而&#xff0c;引发广泛讨论热议的并非仅是经典重现&#xff0c;而是其背后一系列打破常规的“组合拳”&#xff1a;此番&#xff0c;该剧双12全场99开票&#xff0c;和…

作者头像 李华