使用内存中连接器 (预览版)

警告

语义内核向量存储功能处于预览状态,需要中断性变更的改进可能仍发生在发布前的有限情况下。

概述

内存中向量存储连接器是由语义内核提供的矢量存储实现,它不使用外部数据库并将数据存储在内存中。 此矢量存储对于原型制作方案或需要高速内存中操作的情况非常有用。

连接器具有以下特征。

功能区域 支持
集合映射到 内存中字典
支持的键属性类型 可以比较的任何类型
支持的数据属性类型 任何类型
支持的向量属性类型 ReadOnlyMemory<float>
支持的索引类型
支持的距离函数
  • 余弦相似度
  • CosineDistance
  • DotProductSimilarity
  • EuclideanDistance
支持的筛选器子句
  • AnyTagEqualTo
  • EqualTo
支持记录中的多个向量
是否支持Filterable?
是否支持FullTextSearchable?
支持 StoragePropertyName? 否,因为存储是内存中,因此无法重复使用数据,因此自定义命名不适用。

入门

将语义内核核心 nuget 包添加到项目。

dotnet add package Microsoft.SemanticKernel.Connectors.InMemory --prerelease

可以使用语义内核提供的扩展方法将向量存储添加到可用的 KernelBuilder 依赖项注入容器或 IServiceCollection 依赖项注入容器。

using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder()
    .AddInMemoryVectorStore();
using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddInMemoryVectorStore();

可以直接构造 InMemory Vector Store 实例。

using Microsoft.SemanticKernel.Connectors.InMemory;

var vectorStore = new InMemoryVectorStore();

可以构造对命名集合的直接引用。

using Microsoft.SemanticKernel.Connectors.InMemory;

var collection = new InMemoryVectorStoreRecordCollection<string, Hotel>("skhotels");

键和向量属性检索

默认情况下,In-Memory Vector Store 连接器将使用反射读取键和矢量的值。 假定键和向量是数据模型上的直接属性。

如果数据模型具有一个结构,其中键和向量不是数据模型的直接属性,则可以提供函数来读取这些模型的值。

使用此方法时,还需要提供 VectorStoreRecordDefinition,以便将有关矢量维度大小和距离函数的信息传达给 In-Memory 向量存储。

var collection = new InMemoryVectorStoreRecordCollection<string, MyDataModel>(
    "mydata",
    new()
    {
        VectorStoreRecordDefinition = vectorStoreRecordDefinition,
        KeyResolver = (record) => record.Key,
        VectorResolver = (vectorName, record) => record.Vectors[vectorName]
    });

private class MyDataModel
{
    public string Key { get; set; }
    public Dictionary<string, ReadOnlyMemory<float>> Vectors { get; set; }
}

概述

内存中向量存储连接器是由语义内核提供的矢量存储实现,它不使用外部数据库并将数据存储在内存中。 此矢量存储对于原型制作方案或需要高速内存中操作的情况非常有用。

连接器具有以下特征。

功能区域 支持
集合映射到 内存中字典
支持的键属性类型 允许作为字典键的任何对象,请参阅 python 文档,查看此处了解详情
支持的数据属性类型 任何类型
支持的向量属性类型 list[float | int] | numpy 数组
支持的索引类型 平坦
支持的距离函数
  • 余弦相似性
  • 余弦距离
  • 点产品相似性
  • Euclidean Distance
  • 欧几里得平方距离
  • 曼哈顿距离
  • 哈明距离
支持记录中的多个向量
is_filterable 受支持?
“is_full_text_searchable” 功能受支持吗?

入门

将语义内核包添加到项目。

pip install semantic-kernel

您可以在那个地方创建商店和集合,也可以直接创建集合。

在下面的代码片段中,假定你有一个名为“DataModel”的数据模型类。

from semantic_kernel.connectors.memory.in_memory import InMemoryVectorStore

vector_store = InMemoryVectorStore()
vector_collection = vector_store.get_collection("collection_name", DataModel)

可以构造对命名集合的直接引用。

from semantic_kernel.connectors.memory.in_memory import InMemoryCollection

vector_collection = InMemoryCollection("collection_name", DataModel)

即将推出

更多信息即将推出。