向量数据库在自然语言处理(NLP)、计算机视觉(CV)、推荐系统(RS)等需要语义理解与匹配的数据应用场景中有广泛用途。
💡 应用场景:辅助大语言模型生成更优内容
其中一个使用向量数据库的典型场景是:帮助大语言模型(LLMs)生成更相关、更连贯的回答。
大语言模型常面临以下问题:
为了解决这些问题,可以使用向量数据库存储与你目标领域或内容相关的:
向量数据库能高效检索出与特定问题相关的信息子集,并将其与提示词(prompt)一同传递给大语言模型,生成更准确、更具上下文的回答。
如果你想写一篇关于“AI 最新趋势”的博客文章,可以先将与该主题相关的最新资讯存入向量数据库。
然后将这些信息与生成请求一并发送给大语言模型,就能生成内容丰富、基于最新资料的文章。
🧠 Semantic Kernel 与 .NET 的支持
Semantic Kernel 和 .NET 提供了与向量存储交互的抽象接口,并内置了一系列适配多种数据库的实现,功能包括:
创建、列出、删除向量集合(Collections)
通过这些抽象接口,开发者可以先使用免费或本地向量存储进行开发测试,再无缝切换至云端服务进行扩展,无需重构代码。
使用向量存储实现 RAG(Retrieval Augmented Generation)
向量存储抽象层是一个底层 API,用于向向量数据库中添加和检索数据。Semantic Kernel 原生支持通过任何一种向量存储实现来完成 RAG(Retrieval Augmented Generation)工作流。这是通过将 IVectorSearchable<TRecord> 包装为一个**文本搜索(Text Search)**实现来实现的。
向量存储抽象层(Vector Store Abstraction)
向量存储的抽象接口由 NuGet 包 Microsoft.Extensions.VectorData.Abstractions 提供。该包定义了与向量数据库交互的核心基类和接口,便于实现统一的存储与检索逻辑。
Microsoft.Extensions.VectorData.VectorStore
表示整个向量存储系统的入口,对应一个数据库实例,包含若干集合。
提供跨集合(Collection)的操作,例如:
ListCollectionNames():列出所有集合名称
也可以用来获取指定集合的实例:
VectorStoreCollection<TKey, TRecord>
Microsoft.Extensions.VectorData.VectorStoreCollection<TKey, TRecord>
VectorStoreCollection<TKey, TRecord> 表示一个向量集合(Collection)。这个抽象基类提供了用于检查集合是否存在、创建集合或删除集合的方法。
此外,该基类还提供了插入或更新(Upsert)、获取(Get)以及删除(Delete)记录的方法。
最后,该抽象基类继承自 IVectorSearchable<TRecord> 接口,从而具备了向量搜索功能。
Microsoft.Extensions.VectorData.IVectorSearchable<TRecord>
此接口定义了基于向量的搜索操作,核心方法:
Semantic Kernel支持的Vector Store Connectors
每种向量数据库的具体实现都位于其各自独立的 NuGet 包中。
Semantic Kernel 支持的向量数据库连接器一览(Vector Store Connectors)
向量数据库连接器
支持 C#
使用官方 SDK
维护者 / 提供方
Microsoft Semantic Kernel Project
Microsoft Semantic Kernel Project
Microsoft Semantic Kernel Project
Microsoft Semantic Kernel Project
Microsoft Semantic Kernel Project
Microsoft Semantic Kernel Project
Microsoft Semantic Kernel Project
Microsoft Semantic Kernel Project
Microsoft Semantic Kernel Project
Microsoft Semantic Kernel Project
Microsoft Semantic Kernel Project
Microsoft Semantic Kernel Project
Microsoft Semantic Kernel Project
Microsoft Semantic Kernel Project
✅ 表示支持,❌ 表示不支持,🚧 表示开发中,N/A 表示不适用。
ℹ️ 说明:
大多数连接器由 Microsoft Semantic Kernel 官方维护。
Pinecone 尽管支持 C#,但当前并未使用官方 SDK。
Volatile 模式已废弃,请改用新的 In-Memory 实现。
使用Postgres Vector Store connector
在 ASP.NET Core 中通过依赖注入注册
默认映射规则:类属性名 ↔ 数据库列名 可通过 StorageName 特性覆盖属性名
VectorStoreVectorAttribute 参数说明
向量索引的类型。默认值由具体的 Vector Store 类型决定。
向量检索时使用的相似度度量函数。默认值由具体的 Vector Store 类型决定。
为数据库中列提供替代名称(并非所有连接器都支持)。
这一步需要我们手动在Postgres中创建存储数据的表,首先要安装pgvector插件,具体安装方法请看上一节内容
创建酒店
酒店向量查询
查看完整的示例项目与代码实现:
https://github.com/bingbing-gui/aspnetcore-developer/tree/master/src/09-AI-Agent/SemanticKernel/SK.VectorStores
通过 .NET + Semantic Kernel + 向量存储 的组合,你可以快速实现一个完整的 RAG 系统,支持:
与 AI 模型自然集成(如 OpenAI、Azure OpenAI)
Last updated