微软发布Microsoft.Extensions.VectorData.Abstractions库预览版
2024年10月29日,微软发布了.NET的Microsoft.Extensions.VectorData.Abstractions库预览版。该库旨在简化.NET解决方案与AI语义内核SDK(Semantic Kernel SDK)的集成,通过对具体AI实现和模型的抽象来实现。
背景:微软语义内核
微软语义内核(Semantic Kernel)是一个企业级SDK,允许开发者插入不同的LLM模型和语言,并提供对这些插件的自动编排功能。作为语义内核与.NET团队合作的结果,微软发布了多个辅助和抽象库,第一个是Microsoft.Extensions.AI库,用于抽象常见的AI服务,例如聊天客户端。
Microsoft.Extensions.VectorData.Abstractions库
第二个包是Microsoft.Extensions.VectorData.Abstractions库,专注于抽象用于LLM嵌入的向量存储。嵌入(Embedding)是数据记录在高维向量空间中的表示,使LLM模型能够将离散数据转换为可由LLM神经网络进一步处理的格式。语义相似的记录在向量空间中的嵌入会更接近,从而实现语义搜索而非简单的文本匹配。
该库支持的操作包括CRUD和搜索操作。开发者使用带有向量属性的.NET POCO对象,例如VectorStoreRecordKey、VectorStoreRecordData和VectorStoreRecordVector。
示例代码
public class Movie
{
[VectorStoreRecordKey]
public int Key {get;set;}
[VectorStoreRecordData]
public string Title {get;set;}
[VectorStoreRecordData]
public string Description {get;set;}
[VectorStoreRecordVector(384, DistanceFunction.CosineSimilarity)]
public ReadOnlyMemory<float> Vector {get;set;}
}Movie类指定了一个键、两个字符串属性作为数据,以及一个表示LLM中记录向量嵌入的Vector属性(维度为384,使用余弦相似度距离函数)。
存储和嵌入
该库使用IEmbeddingGenerator和IVectorStore接口来存储和嵌入记录。存储是由语义内核提供的内存向量存储。嵌入示例使用了Ollama预制的LLM包,运行在开发者机器上,并使用all-minilm小型嵌入模型。
IEmbeddingGenerator<string,Embedding<float>> generator = new OllamaEmbeddingGenerator(new Uri("http://localhost:11434/"), "all-minilm");记录存储在向量存储中,Vector属性由IEmbeddingGenerator.GenerateEmbeddingVectorAsync方法生成。
movie.Vector = await generator.GenerateEmbeddingVectorAsync(movie.Description);
await movies.UpsertAsync(movie);查询嵌入记录
查询是一个LLM提示文本,使用相同的接口嵌入为向量。
var query = "A family friendly movie";
var queryEmbedding = await generator.GenerateEmbeddingVectorAsync(query);向量数据存储接口提供了VectorizedSearchAsync方法,用于检索与搜索提示文本最接近的项。
var searchOptions = new VectorSearchOptions()
{
Top = 1,
VectorPropertyName = "Vector"
};
var results = await movies.VectorizedSearchAsync(queryEmbedding, searchOptions);应用场景
该库的直接应用是扩展LLM与自定义数据存储,使用检索增强生成(Retrieval-Augmented Generation, RAG)技术,允许LLM查询特定知识库,而无需重新训练模型。微软提供了完整的向量存储RAG示例。
未来计划
该库目前处于预览阶段,预计在.NET 9发布之前保持预览状态。开发者可以通过GitHub仓库的issue列表提供反馈。
微软未来的计划包括:
- 继续与语义内核合作,构建更多抽象,并在RAG场景中提供更流畅的体验。
- 与生态系统中的向量存储合作伙伴合作,推动Microsoft.Extensions.VectorData的采用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。