AI 应用为什么需要 Memory?
随着大语言模型应用越来越普及,很多开发者开始构建企业知识助手、AI 客服、智能 Agent 和个人 AI 助手。但是很快会遇到一个问题:模型本身并不会真正记住用户。
例如,用户第一次告诉 AI“我喜欢使用 C# 和 .NET 开发”,下一次聊天时说“帮我设计一个后端架构”,如果没有记忆机制,AI 并不知道用户的技术背景,回答就会缺乏针对性。
因此,AI 应用通常需要增加 Memory(记忆)能力。一个完整的 AI Memory 流程通常包含:用户输入 → 查询历史记忆 → 组合 Prompt → 调用 LLM → 提取新的用户事实 → 保存记忆。
看起来简单,但是在实际项目中,每次聊天都需要重复编写查询记忆、拼接上下文、构造 Prompt、调用模型、提取新信息等代码。随着业务增长,这部分代码会越来越多,维护成本也在不断上升。
Memory Wrapper:把重复流程封装起来
为了解决这个问题,一些 AI Memory 框架开始提供类似MemoryEnabledChat这样的聊天包装服务。它的核心思想非常简单:开发者只负责调用 LLM,记忆管理交给框架。
原本每次聊天都需要手动编写查询记忆、构造 Prompt、调用模型、保存记忆等步骤:
var memories = await memory.QueryAsync(message, userId); var prompt = BuildPrompt(systemPrompt, memories); var result = await CallLLM(prompt, message); await memory.ExtractAsync(result, userId);使用 Memory Wrapper 后,代码明显更加清晰,只需要关注核心的业务调用:
var result = await chat.ChatAsync( message, userId, (prompt, msg) => CallOpenAiAsync(prompt, msg));MemoryEnabledChat 内部做了什么?
虽然调用代码变简单,但内部依然执行完整的记忆管理流程。
第一步:检索历史记忆
当用户输入“帮我设计一个订单系统”时,系统首先查询用户的历史信息,例如用户熟悉 .NET、使用 PostgreSQL、喜欢 DDD 架构等,这些信息会作为上下文提供给模型,让回答更加个性化。
第二步:自动构建 Prompt
框架会自动组合 System Prompt、用户历史记忆和当前问题,最终发送给 LLM。例如,系统会构造类似“你是一名 .NET 架构专家。用户熟悉 ASP.NET Core,喜欢 DDD 设计。问题:帮我设计订单系统。”这样的完整提示,让 AI 的回答更加符合用户背景。
第三步:调用大模型
框架通过委托调用实际模型,例如 OpenAI、Azure OpenAI、Claude、Ollama 或 DeepSeek。这样设计的好处是 Memory 层不关心具体使用哪种模型,只需要提供一个统一调用入口即可。
第四步:后台提取新记忆
一次聊天结束后,系统可以自动从对话中提取新的用户事实。例如,用户说“我现在主要使用 .NET 8 开发企业应用”,系统可以自动提取出技术栈和业务领域等信息并保存,下一次聊天时自动使用。
为什么需要异常隔离?
Memory 属于增强能力,不应该影响核心聊天功能。例如,当数据库暂时不可用导致 Memory 查询失败时,正确设计应该是让聊天功能继续运行,只是缺少了一些历史上下文,而不是让整个 AI 助手不可用。
因此,Memory 提取通常采用异常隔离的方式,即使记忆操作失败,核心聊天功能仍然可以正常响应。这种设计属于典型的降级设计,确保系统的核心功能始终可用。
灵活配置 Memory 行为
实际项目中,不同场景需要不同策略。例如,可以通过QueryOptions控制查询数量,只取最相关的 5 条记忆;也可以设置相似度阈值,避免召回大量无关信息。
此外,还可以自定义 System Prompt,例如“你是一名企业级 .NET 架构专家,回答问题时优先考虑性能、可维护性和企业实践”,让 AI 保持稳定的行为风格。
从手写 Memory 到自动管理
传统方式中,业务代码需要手动处理 Memory 查询、Prompt 拼接、LLM 调用和 Memory 保存,导致重复代码多、容易遗漏步骤、不同模块实现不一致。优化后,业务代码只关注用户想解决什么问题,记忆管理全部交给MemoryEnabledChat自动处理。
MemoryEnabledChat 是什么?
很多同学看到MemoryEnabledChat后,第一个疑问就是:它属于哪个 NuGet 包?需要安装什么?
实际上,它不是 OpenAI SDK 的功能,也不是 ASP.NET Core 自带的能力,而是 BlazorMemory 提供的聊天封装服务(如果使用的是包含该功能的版本)。它的作用是在聊天过程中自动完成记忆检索、Prompt 拼接和记忆提取,让业务代码只关注调用大模型。
如果你准备使用它,首先需要安装 BlazorMemory 的核心包,以及对应的存储、Embedding 和 Extractor 包,例如:
dotnet add package BlazorMemory dotnet add package BlazorMemory.Storage.IndexedDb dotnet add package BlazorMemory.Embeddings.OpenAi dotnet add package BlazorMemory.Extractor.OpenAi如果是 ASP.NET Core 服务端项目,则通常使用 EF Core 存储:
dotnet add package BlazorMemory.Storage.EfCore然后在Program.cs中注册服务:
builder.Services .AddBlazorMemory() .UseEfCoreStorage<AppDbContext>() .UseOpenAiEmbeddings(apiKey) .UseOpenAiExtractor(apiKey); // 如果你的版本支持,再注册 .UseMemoryEnabledChat();★注意:如果你使用的是作者尚未正式发布的版本,需要以对应版本的 Release Notes 或 GitHub 文档为准。上面代码仅供参考,具体请查看 GitHub: https://github.com/aftabkh4n/BlazorMemory
总结
AI Agent 的核心竞争力,不只是调用大模型。真正优秀的 AI 应用还需要长期记忆、用户画像、上下文管理和 Prompt 优化等能力。但是 Memory 管理本身又容易产生大量重复代码。
通过 Memory Wrapper 这种设计,可以把“查询记忆 → 构造 Prompt → 调用模型 → 保存记忆”这一整套流程封装起来,让开发者从繁琐的编排工作中解放出来。对于 .NET 开发者来说,这种模式非常适合构建企业 AI 助手、RAG 应用、智能客服和 Agent 系统。
未来 AI 应用开发,很可能会从手动编排流程逐渐走向框架自动管理上下文的模式。开发者只需要关注业务逻辑和用户体验,让框架来处理那些重复的、通用的基础设施工作。
学习资源推荐
如果你想更深入地学习大模型,以下是一些非常有价值的学习资源,这些资源将帮助你从不同角度学习大模型,提升你的实践能力。
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示
因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取
四、AI大模型商业化落地方案
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。