.NET+AI: (微家的AI研发框架)什么是内核记忆(Kernel Memory)?

news/2025/11/4 22:33:41/文章来源:https://www.cnblogs.com/gccbuaa/p/19191562

.NET+AI: (微家的AI开发框架)大家赶紧学习!!!

什么是内核记忆(Kernel Memory)

Kernel Memory,内核记忆(KM)是一种多模态人工智能服务,旨在为应用程序提供长期记忆解决方案,模仿人类存储信息的记忆能力。专门通过自定义连续数据混合管道对数据集进行高效索引,并支持检索增强生成(RAG)。

KM 可以作为一个Web服务独立部署,也可以作为一个插件集成到ChatGPT/Copilot/Semantic Kernel 中,也可以作为一个.NET 库集成到应用中。

在这里插入图片描述

在这里插入图片描述

通过利用先进的嵌入和大型语言模型,KM 支持自然语言查询,以便从索引数据中获取答案,并返回带有引用和指向原始来源的链接。

Kernal Memory vs Semantic Memory

内核记忆(KM)是一项基于开发语义内核(SK)和语义记忆(SM)过程中所收到的反馈和汲取的经验教训而构建的服务。它提供了一些原本需要手动开发的功能,例如存储文件、从文件中提取文本、提供保护用户数据的框架等。KM 的代码库完全使用.NET 编写,这消除了用多种语言编写和维护功能的需求。作为一项服务,KM 可以在任何语言、工具或平台上使用,例如浏览器扩展和 ChatGPT 助手。

语义记忆(Semantic Memory,SM)是适用于 C#、Python 和 Java 的库,它包装了对数据库的直接调用并支持向量搜索。它是作为语义内核(Semantic Kernel,SK)项目的一部分开发的,并且是长期记忆的首次公开迭代。核心库以三种语言进行维护,而受支持的存储引擎列表(称为“连接器”)因语言而异。

特性Kernel MemorySemantic Memory
数据格式Web页面、PDF、图像、Word、PowerPoint、Excel、Markdown、文本、JSON、HTML仅文本
搜索余弦相似度、带过滤器的混合搜索(AND/OR条件)余弦相似度
语言支持任何语言,命令行工具,浏览器扩展,低代码/无代码应用,聊天机器人,助手等C#、Python、Java
存储引擎Azure AI Search、Elasticsearch、MongoDB Atlas、Postgres+pgvector、Qdrant、Redis、SQL Server、内存KNN、磁盘KNNAzure AI Search、Chroma、DuckDB、Kusto、Milvus、MongoDB、Pinecone、Postgres、Qdrant、Redis、SQLite、Weaviate
文件存储Disk、Azure Blob、AWS S3、MongoDB Atlas、内存(易失性)-
RAG-
摘要-
OCR是,通过Azure Document Intelligence-
安全过滤器-
大型文档摄取是,包括使用队列的异步处理(Azure Queues、RabbitMQ、基于文件的或内存队列)-
文档存储-
自定义存储架构一些DBs-
带内部嵌入的向量DBs-
同时写入多个向量DBs-
LLMsAzure OpenAI、OpenAI、Anthropic、Ollama、LLamaSharp、LM Studio、Semantic Kernel ConnectorsAzure OpenAI、OpenAI、Gemini、Hugging Face、ONNX、自定义等
带专用分词器的LLMs
云部署-
带OpenAPI的Web服务-

核心概念

Document

文档,将信息(一个或多个文件,照片,或一段文本)上传到KM时,这些数据被打包为一个文档,并拥有唯一ID,通过这个ID 可以更新、替换或删除该文档的数据。以下示例中一次导入多个不同类型的文件,但它们被命名为doc001 Document。

var memory = new KernelMemoryBuilder().WithOpenAIDefaults(env["OPENAI_API_KEY"]).Build();
await memory.ImportDocumentAsync(new Document("doc001").AddFiles(["file1.txt", "file2.docx", "file3.pdf"]);

如果再次以相同Document ID 导入新文档,则之前导入的文档会被覆盖。

Tag

标签,是一个键值对,通过给Document 打标签,以便在搜索时,通过指定标签限定搜索文档范围。以下示例中可以看出一个Document 可以有多个Tag,一个Tag 可以有多个值。

var memory = new KernelMemoryBuilder().WithOpenAIDefaults(env["OPENAI_API_KEY"]).Build();
await memory.ImportDocumentAsync(new Document("doc001").AddFiles(["file1.txt", "file2.docx", "file3.pdf"]).AddTag("user", "Taylor").AddTag("collection", "meetings").AddTag("collection", "NASA").AddTag("collection", "space").AddTag("type", "news"));

Index

索引,KM 利用向量存储来保存摄入的文档信息,像 Azure AI Search、Qdrant、Elastic Search、Redis 等解决方案。
为了对不同的数据加以区分,通过指定不同的索引名称来实现,索引之间的数据是隔离的。在存储信息、搜索和提问时,KM始终在一个索引的范围内工作。
换句话说,可以将多个Document 存储在单个索引下。

var memory = new KernelMemoryBuilder().WithOpenAIDefaults(env["OPENAI_API_KEY"]).Build();
await memory.ImportDocumentAsync(document: new Document("doc001").AddFiles(["file1.txt", "file2.docx", "file3.pdf"]),index:"index1");
await memory.ImportDocumentAsync(document: new Document("doc002").AddFiles(["file4.txt", "file5.docx"]),index:"index1");

当未指定index时,将存储在名为default的索引下。同理,AskAsyncSerachAsync在未指定index时,默认在default索引下进行检索。

// 在index1索引下检索
var result = await  memory.AskAsync("What is Kernel Memory?", index: "index1");
// 在default索引下检索
var result2 = await  memory.SearchAsync("What is Kernel Memory?");

Chunk

对读取的文档数据进行处理,将大块数据分解为更小、更易于处理的单元的过程,称为chunking,分解得到的单元称为chunk

通过分块,可以将文本拆分为单词、句子、段落还是整个文档,分块级别决定了检索到的信息的颗粒度。

举例而言:假设您在法律研究应用程序中使用RAG模型,并且您需要从大型法律文档中检索相关部分。用户询问,“法律对医疗保健中的数据隐私有什么规定?”。
如果系统采用文档级分块,它将检索整个法律文档,这可能是压倒性和低效的。然而,通过使用段落级分块,系统能检索专门讨论医疗保健数据隐私法的段落,给用户一个高度相关和简洁的答案。

如果没有分块,系统可能会检索文档中不相关的部分,从而提供糟糕的用户体验。通过分块,检索变得有针对性和有意义,增强了模型生成准确和上下文感知响应的能力。

核心技术与框架解析

Semantic Kernel:连接AI与业务逻辑的桥梁

Semantic Kernel是微软推出的开源框架,它能无缝整合大语言模型(LLM)能力与传统代码逻辑,让开发者可以通过自然语言提示词和C#代码结合的方式,快速构建AI驱动的应用。其核心优势在于提供了插件系统(Plugins)、记忆系统(Memory)和规划能力(Planning),这三者共同构成了实现RAG和MCP Agent的基础。

RAG:让应答更精准的知识检索增强

RAG技术的核心是通过检索外部知识库,为LLM提供精准的上下文信息,从而让生成的回答更符合业务事实。在销售场景中,产品手册、价格表、促销政策等都是关键的知识库内容。借助RAG,系统能在回答客户关于“某款产品的折扣力度”“售后服务范围”等问题时,不再依赖LLM的通用训练数据,而是从企业内部知识库中检索最新、最准确的信息,避免出现过时或错误的回答。

MCP Agent:多能力协同的销售智能体

MCP Agent(Multi-Capability Agent)指具备多种业务能力的智能代理,它能根据客户问题自动调用不同的功能模块(如产品查询、价格计算、订单状态跟踪等),实现端到端的智能应答。在Semantic Kernel中,MCP Agent可以通过规划能力分析用户意图,然后调用对应的插件完成任务,例如当客户询问“购买100台A产品能享受多少折扣”时,Agent会先调用产品信息插件获取A产品的基础价格,再调用折扣计算插件根据采购量算出具体折扣,最后整合结果生成自然语言回答。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这张图表列出了20个关于AI代理(Agent)的核心概念,每个概念都有简短的描述和图标。以下是这些概念的整理:

  1. Agent(代理):能够感知、推理并采取行动以实现目标的自主实体。
  2. Environment(环境):代理操作和交互的周围上下文。
  3. Perception(感知):代理解释感官或环境数据的过程。
  4. State(状态):代理对世界当前内部条件或表示。
  5. Memory(记忆):存储最近或历史信息以供连续性和学习使用。
  6. Large Language Models(大型语言模型):支持语言理解和生成的基础模型。
  7. Reflex Agent(反射代理):基于预定义的“条件-行动”规则做出决策的代理。
  8. Knowledge Base(知识库):代理用于做出决策的结构化或非结构化数据存储库。
  9. CoT (Chain of Thought)(思维链):代理为复杂任务表达中间步骤的推理方法。
  10. React(反应):结合逐步推理与环境行动的框架。
  11. Tools(工具):代理用来增强能力的API或外部系统。
  12. Action(行动):代理执行的任何任务或行为。
  13. Planning(规划):制定一系列行动以实现特定目标。
  14. Orchestration(协调):协调多个步骤、工具或代理以完成任务流程。
  15. Handoffs(交接):不同代理之间任务或工作的转移。
  16. Multi-Agent System(多代理系统):多个代理在同一环境中操作和协作的框架。
  17. Swarm(群体):许多代理遵循局部规则而无需中央控制的涌现智能行为。
  18. Agent Debate(代理辩论):代理争论对立观点以完善或改进最终响应的机制。
  19. Evaluation(评估):衡量代理行动有效性的过程。
  20. Learning Loop(学习循环):代理通过持续从反馈中学习来改进性能的循环。

这些概念涵盖了AI代理的各个方面,从基本的定义和功能到更复杂的交互和学习过程。

系统架构与实现步骤

架构设计

销售业务智能应答系统的架构主要分为三层:

具体实现步骤

环境准备与项目初始化

  • 安装Semantic Kernel相关NuGet包: Microsoft.SemanticKernel 、 Microsoft.SemanticKernel.Plugins.Memory 等。

  • 配置LLM服务:通过API密钥连接Azure OpenAI或其他LLM服务,在Semantic Kernel中初始化 Kernel 对象。
    构建RAG模块

  • 知识库导入:将产品手册、价格表等文档解析为文本片段,使用Semantic Kernel的 TextChunker 进行分块处理。

  • 向量存储:调用 Kernel.Memory.SaveInformationAsync 方法,将文本片段及其向量存储到向量数据库中。

  • 检索逻辑:当接收用户问题时,通过 Kernel.Memory.SearchAsync 检索与问题最相关的知识库片段,作为上下文传递给LLM。

开发MCP Agent能力插件
  • 产品查询插件:实现 GetProductInfo(string productName) 方法,返回产品规格、价格等信息。
  • 折扣计算插件:实现 CalculateDiscount(int quantity, string productId) 方法,根据采购量和产品ID计算折扣。
  • 订单查询插件:实现 GetOrderStatus(string orderId) 方法,查询订单的当前状态。
  • 将插件注册到Semantic Kernel: kernel.ImportPluginFromObject(new SalesPlugins(), “SalesPlugins”) 。
Agent规划与应答生成

场景验证与优势体现

以一个实际销售场景为例:客户询问“你们的旗舰款打印机现在有什么优惠?如果公司采购20台,加上三年保修,总费用是多少?”

系统的处理流程如下:

接收问题后,MCP Agent通过意图解析,确定需要调用“产品查询”“折扣计算”和“保修价格”三个插件。
调用产品查询插件获取“旗舰款打印机”的基础价格和产品ID。
调用折扣计算插件,根据采购量20台和产品ID,计算出对应的折扣比例。
调用保修价格插件,获取三年保修的单台费用。
结合RAG检索到的“当前针对企业采购的额外10%补贴”信息,汇总计算总费用。
最后通过LLM生成包含具体价格明细、优惠说明的回答,同时附上产品参数链接(来自知识库)。

该系统的优势在于:

总结与展望

基于Semantic Kernel构建的销售业务智能应答系统,通过RAG解决了知识精准性问题,借助MCP Agent实现了复杂业务场景的自动化处理,为销售团队提供了强大的智能支持。在实际应用中,还可结合用户画像、历史对话记录等数据进一步优化应答效果,例如根据客户过往采购记录推荐合适的优惠方案。

随着LLM技术和Semantic Kernel框架的不断发展,这类智能应答系统将在销售线索挖掘、客户关系维护等领域发挥更大作用,推动销售业务向更高效、更智能的方向转型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/956093.shtml

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

相关文章

用户登录系统

程序示例: users = {"user1": "123456", "user2": "123456", "user3": "123456"} blacklist = ["user4", "user5", "user6&q…

Spring 中的Event机制

spring 参考资料: Additional Capabilities of the ApplicationContext- https://docs.spring.io/spring-framework/reference/6.1/core/beans/context-introduction.html [[17.行为型 - 观察者模式 (Observer Pattern…

jiangly模板-字符串

目录 目录马拉车(Manacher)Z 函数后缀数组后缀自动机(SAM 新版)KMP马拉车(Manacher) /** 马拉车(Manacher, with string)* 2024-04-06: https://qoj.ac/submission/380047* 2024-04-09: https://qoj.a…

Java 内存模型(JMM)中 volatile 的作用与限制

volatile关键字的主要作用是限制JVM进行指令重排,保证变量对其他线程的可见性,可以避免创建对象才完成了一半就被其他线程引用到这个对象,保证创建完成后才对其他线程可见。static class Value {int x; // 默认 0Va…

今日学习:二分

P3853 天津省选 /* 这个题和P2678几乎一样,但说实话我还没看懂。 1.首先检查的标准我没想到。是要检查当前的空旷指数还是路标数? 2.其次check的逻辑我还是没想明白。 3.犯了个小错。计算mid应该放在while循环里面。…

Ice Breaker Games - 一个在线免费的游戏网站,无需登录,打开即玩。

Ice Breaker Games - 一个在线免费的游戏网站,无需登录,打开即玩。 https://www.icebreakgame.com/

Java获取当前时间的下一天以及30天前的时间

有这样的一个需求。需要得到当前时间的下一天以及30前的时间。在计算30天前的时间时出现了一点问题,时间出错,但是公式没有出错,后来才发现是运算超出了Integer的范围。( 24 * 60 * 60*1000) 这种计算表达式在 Java…

论文导读:从 TSMC ISSCC 看 SRAM 存算发展

上次集中学习存算工作还是一年半以前,时光如梭,SRAM CIM 范式对比记忆又有新花样。本篇 blog 针对 ISSCC 2024 34.4 TSMC 的 3 nm 数字 SRAM 近存算 Macro 个例分析,并结合架构视角谈谈个人感触[1]。 RAM 的物理-逻…

edge chromium浏览器copilot图标消失处理

解决edge浏览器copilot图标消失找到edge浏览器的配置文件Local State %APPDATA%\..\Local\Microsoft\Edge\User Data修改配置variations_country 改成US,记得任务管理器完全关闭edge浏览器后修改

AI - 自然语言处理(NLP) - part 2 - 词向量 - 教程

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

洛谷 P4577

题面太屎了。给定一棵大小为 \(n\) 的树,每个节点有权值 \(a_i\),问最多能选出多少个节点,使得若 \(v \in subtree_u\),则 \(a_v \ge a_u\) 成立。 \(n \le 2 \times 10^5\)。这个问题丢到序列上就是 \(LIS\) 了,…

C++算法贪心例题讲解 - 实践

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

AI元人文:理论框架、僵局本质与文明演化的系统性构想

AI元人文:理论框架、僵局本质与文明演化的系统性构想 一、核心命题与理论基石核心命题:从“价值对齐”到“价值权衡”的范式革命传统AI的“价值对齐”范式陷入三重困境:认知科学误区(沿用过时的信息处理模型)、方…

[linux-mint] Surface Pro4 安装linux驱动

Surface Pro4 这个被淘汰下来的机器,一直没想好要如何处理,因为有平板,所以也不想刷Android系统,最终决定还是安装linux,当一个办公小平板来使用,顺便练练linux环境软件使用,所以就选择系统,然后发现好多linux…

[B] AGC VP 记录

AtCoder Grand Contest 049 AT_agc049_e [AGC049E] Increment Decrement AtCoder Grand Contest 052 约 1h 切 A,之后都不会了。 A - Long Common Subsequence 先从左到右放 \(n\) 个 \(0\),\(n\) 个 \(1\)。发现 \(…

2025年河南工业大学2025新生周赛(2)

A 小唐的签到 小唐到达教室的时间等于路上所用时间和上楼时间之和,注意如果教室在n楼,只需要上n-1层。#include<bits/stdc++.h> using namespace std; int main() {int a, x, n, b, y;cin >> a >> …

Atcoder [ARC161C] Dyed by Majority (Odd Tree) 题解 [ 绿 ] [ 树的遍历 ] [ 构造 ] [ 贪心 ]

Dyed by Majority (Odd Tree) 想起来无聊,写起来恶心。 首先手模一下,发现叶子节点可以确定它父亲的颜色。这启示我们自底向上确定颜色。 因此考虑在已确定所有儿子的颜色时,确定自己的颜色,此时有两种情况:儿子中…

Reflections on Trusting Trust by Ken Thompson

来源:https://aeb.win.tue.nl/linux/hh/thompson/trust.htmlKen Thompsons "cc hack" - Presented in the journal, Communication of the ACM, Vol. 27, No. 8, August 1984, in a paper entitled "R…

[Agent] ACE(Agentic Context Engineering)源码阅读笔记---(1)基础模块

[Agent] ACE(Agentic Context Engineering)源码阅读笔记---(1)基础模块 目录[Agent] ACE(Agentic Context Engineering)源码阅读笔记---(1)基础模块0x00 概要0x01 示例1.1 建立简单Agent1.2 后续操作Load and …

AI大语言模型从0开发

Transformer Tokenization 考虑到计算机没有办法直接识别人类语言,我们将每一个词映射为一个token使得计算机可以直接识别。 为实现这个目的我们使用BPE算法将每个词划分为若干个前缀和后缀,以此拼起来一个词,节省v…