
【AI Agent 编排全栈实战】第 32 篇记忆与向量存储 — SK 的 RAG 编排本系列定位面向 AI 应用开发者的 Agent 编排框架系统化教程。以 Python 为主技术栈系统讲解 5 大主流编排框架的编排架构范式、核心抽象和实战选型。本篇你将学到Semantic Kernel 的记忆架构SemanticTextMemory 与向量存储的关系向量存储抽象层统一接口对接多种后端嵌入生成与索引的完整流程如何在 SK 中构建端到端 RAG 管线记忆 vs 向量存储的定位差异学完本篇你将掌握在 Semantic Kernel 中实现检索增强生成RAG的完整能力。一、SK 记忆架构概览1.1 两层记忆体系Semantic Kernel 提供两层记忆抽象SK 两层记忆体系低层 - Vector Store高层 - SemanticTextMemory底层使用读写记忆SemanticTextMemory语义记忆面向文本的 CRUDVectorStore向量存储抽象面向向量的 CRUD多种后端Azure AI Search / Chroma / Pinecone / RedisAgent / Function1.2 记忆 vs 向量存储维度SemanticTextMemoryVectorStore抽象层级高层文本→嵌入→存储→检索→文本低层向量 CRUD使用者Agent / Function 直接使用SK 内部或高级开发者自动嵌入是自动调用 Embedding 模型否需手动嵌入灵活性低封装好了高可自定义嵌入策略典型场景RAG 问答自定义向量检索逻辑二、向量存储抽象层2.1 统一接口设计SK 的 VectorStore 提供统一的 CRUD 接口底层可以对接不同的向量数据库fromsemantic_kernel.connectors.memory.chromaimportChromaMemoryStore# 创建向量存储以 ChromaDB 为例vector_storeChromaMemoryStore(persist_path.chromadb)# 通用接口不绑定具体后端awaitvector_store.create_collection(knowledge_base)print(向量存储集合创建成功)2.2 支持的后端后端适用场景特点Azure AI Search企业级生产环境高可用、大规模、Azure 原生ChromaDB本地开发/原型轻量、无需部署Pinecone云原生大规模全托管、高性能Redis已有 Redis 基础设施复用现有 Redis 集群Weaviate混合检索需求支持 BM25 向量混合2.3 存储与检索fromsemantic_kernel.connectors.ai.open_aiimportOpenAITextEmbeddingimportnumpyasnp# 注册 Embedding 服务kernel.add_service(OpenAITextEmbedding(service_idembedding,ai_model_idtext-embedding-3-small,),overwriteTrue)# 获取 Embedding 服务embedding_servicekernel.get_service(embedding)asyncdefstore_and_retrieve():存储和检索向量documents[LangGraph 是基于状态图的 Agent 编排框架,CrewAI 以角色协作为核心设计 Agent 团队,Semantic Kernel 是微软的企业级 AI 开发框架,AutoGen 采用 Actor 模型实现多 Agent 通信,]# 生成嵌入并存储fori,docinenumerate(documents):embeddingawaitembedding_service.generate_embeddings([doc])awaitvector_store.upsert(collectionknowledge_base,record{id:fdoc_{i},text:doc,vector:embedding[0].tolist(),},)print(f已存储{len(documents)}个文档)# 检索query哪个框架基于状态图query_embeddingawaitembedding_service.generate_embeddings([query])resultsawaitvector_store.get_nearest_matches(collectionknowledge_base,queryquery_embedding[0].tolist(),limit2,)print(f\n查询「{query}」)asyncforrecord,scoreinresults:print(f [{score:.4f}]{record[text]})# asyncio.run(store_and_retrieve())三、SemanticTextMemory高层 RAG 接口3.1 自动嵌入的记忆操作SemanticTextMemory 封装了文本→嵌入→存储→检索→文本的完整流程让开发者无需手动处理嵌入VectorStoreEmbedding 服务SemanticTextMemoryAgentVectorStoreEmbedding 服务SemanticTextMemoryAgent存储阶段检索阶段save_information(textLangGraph 是...)生成嵌入向量返回 embedding存储记录(text embedding)确认保存成功search(哪个框架用状态图, limit3)生成查询嵌入返回 query_embedding向量搜索 nearest_matches返回匹配记录返回格式化的文本结果3.2 代码实现fromsemantic_kernel.memory.semantic_text_memoryimportSemanticTextMemoryfromsemantic_kernel.memory.semantic_text_memory_baseimportMemoryRecord# 创建 SemanticTextMemory封装了 VectorStore EmbeddingmemorySemanticTextMemory(storagevector_store,embedding_generatorembedding_service,)# 注册到 Kernel让 Function 可以通过 {{memory.*}} 调用kernel.import_plugin_from_object(memory,memory_plugin)asyncdefrag_with_memory():使用 SemanticTextMemory 的 RAG# 存储知识knowledge[(kb_1,Agent 编排是管理多 Agent 协作的技术),(kb_2,LangGraph 使用 Pregel 模型实现状态图),(kb_3,CrewAI 的角色协作让 Agent 有明确分工),]forkey,textinknowledge:awaitmemory.save_information(collectionknowledge_base,texttext,idkey,descriptionf知识条目{text[:20]},)print(f已存储{len(knowledge)}条知识)# 语义搜索resultsawaitmemory.search(collectionknowledge_base,query什么是 Agent 编排,limit2,min_relevance_score0.5,)print(f\n搜索结果)forrinresults:print(f [{r.relevance_score:.4f}]{r.text})# asyncio.run(rag_with_memory())四、构建 RAG 管线4.1 RAG 管线架构在线阶段: 检索增强离线阶段: 知识摄入匹配文档嵌入生成向量存储用户问题查询嵌入向量检索上下文拼接LLM 生成回答4.2 完整 RAG Pipeline 实现fromsemantic_kernel.prompt_templateimportPromptTemplateConfig,InputVariablefromsemantic_kernel.functionsimportKernelArgumentsasyncdefrag_pipeline(user_question:str)-str:端到端 RAG 管线# 第一步检索相关知识search_resultsawaitmemory.search(collectionknowledge_base,queryuser_question,limit3,min_relevance_score0.3,)# 拼接检索到的上下文context\n.join([f-{r.text}forrinsearch_results])print(f检索到{len(search_results)}条相关知识)# 第二步构建增强 Promptrag_prompt 请根据以下知识库内容回答问题。如果知识库中没有相关信息请说明。 知识库内容 {{$context}} --- 用户问题{{$question}} 回答 # 第三步LLM 生成responseawaitkernel.invoke_prompt(promptrag_prompt,argumentsKernelArguments(contextcontext,questionuser_question,),)returnstr(response)# 运行# answer asyncio.run(rag_pipeline(LangGraph 用什么模型实现状态图))# print(answer)4.3 作为 Plugin 集成到 AgentclassRAGPlugin:RAG Plugin让任何 Agent 都能查询知识库kernel_function(description查询企业知识库。输入问题返回相关的知识条目。,namequery_knowledge_base)asyncdefquery_knowledge_base(self,question:str)-str:查询知识库resultsawaitmemory.search(collectionknowledge_base,queryquestion,limit3,min_relevance_score0.3,)ifnotresults:return知识库中未找到相关信息return\n.join([f-{r.text}forrinresults])# 注册到 Agent 的 Kernelkernel.add_plugin(RAGPlugin(),plugin_namerag)五、与 LlamaIndex Workflows 的 RAG 对比维度SK 记忆体系LlamaIndex Workflows存储抽象SemanticTextMemory VectorStoreIndex Retriever嵌入管理自动嵌入封装层手动管理更灵活检索方式纯向量检索向量 BM25 混合检索管线编排Process Framework / 手动事件驱动 WorkflowRAG 模式简单 RAGCorrective RAG / RAG-Fusion最适合企业知识库 Azure复杂 RAG 管线 纠错本篇小结知识点核心内容SemanticTextMemory高层记忆接口自动处理嵌入和检索VectorStore低层向量存储抽象对接多种后端支持后端Azure AI Search / Chroma / Pinecone / RedisRAG 管线检索→增强→生成三步流程作为 PluginRAG 能力可以封装为 Plugin被 Agent 调用与 LlamaIndexSK 重企业集成LlamaIndex 重灵活检索下篇预告第 33 篇Semantic Kernel 实战 — 构建企业知识库问答系统模块五收官用 SK 的 Kernel/Plugin/Agent/Process/Memory 整合构建一个完整的企业知识库问答系统。如果本篇内容对你有帮助欢迎点赞收藏有任何疑问欢迎在评论区交流。