Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предупреждение
Функции хранилища векторов семантического ядра доступны в предварительной версии и улучшения, требующие критических изменений, могут по-прежнему возникать в ограниченных обстоятельствах перед выпуском.
Предупреждение
Функции хранилища векторов семантического ядра доступны в предварительной версии и улучшения, требующие критических изменений, могут по-прежнему возникать в ограниченных обстоятельствах перед выпуском.
Обзор
Соединители хранилища векторов семантического ядра используют модель первого подхода к взаимодействию с базами данных.
Все методы для upsert или получения записей используют строго типизированные классы моделей. Свойства этих классов декорируются атрибутами, указывающими назначение каждого свойства.
Совет
Для альтернативы использованию атрибутов см . определение схемы с определением записи.
Совет
Для альтернативы определению собственной модели данных см. сведения об использовании абстракций Vector Store без определения собственной модели данных.
Ниже приведен пример модели, украшенной этими атрибутами.
using Microsoft.Extensions.VectorData;
public class Hotel
{
[VectorStoreKey]
public ulong HotelId { get; set; }
[VectorStoreData(IsIndexed = true)]
public string HotelName { get; set; }
[VectorStoreData(IsFullTextIndexed = true)]
public string Description { get; set; }
[VectorStoreVector(Dimensions: 4, DistanceFunction = DistanceFunction.CosineSimilarity, IndexKind = IndexKind.Hnsw)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
[VectorStoreData(IsIndexed = true)]
public string[] Tags { get; set; }
}
Атрибуты
VectorStoreKeyAttribute
Используйте этот атрибут, чтобы указать, что свойство является ключом записи.
[VectorStoreKey]
public ulong HotelId { get; set; }
Параметры VectorStoreKeyAttribute
| Параметр | Обязательное поле | Описание |
|---|---|---|
| Имя хранилища | нет | Можно использовать для указания альтернативного имени свойства в базе данных. Обратите внимание, что этот параметр не поддерживается всеми соединителями, например, где поддерживаются альтернативные варианты JsonPropertyNameAttribute . |
Совет
Дополнительные сведения о поддержке StorageName соединителей и доступных альтернативах см. в документации по каждому соединителю.
VectorStoreDataAttribute
Используйте этот атрибут, чтобы указать, что свойство содержит общие данные, которые не являются ключом или вектором.
[VectorStoreData(IsIndexed = true)]
public string HotelName { get; set; }
Параметры VectorStoreDataAttribute
| Параметр | Обязательное поле | Описание |
|---|---|---|
| IsIndexed | нет | Указывает, следует ли индексировать свойство для фильтрации в случаях, когда для базы данных требуется использовать индексирование для каждого свойства. По умолчанию — false. |
| IsFullTextIndexed | нет | Указывает, следует ли индексировать свойство для полнотекстового поиска баз данных, поддерживающих полнотекстовый поиск. По умолчанию — false. |
| Имя хранилища | нет | Можно использовать для указания альтернативного имени свойства в базе данных. Обратите внимание, что этот параметр не поддерживается всеми соединителями, например, где поддерживаются альтернативные варианты JsonPropertyNameAttribute . |
Совет
Дополнительные сведения о поддержке StorageName соединителей и доступных альтернативах см. в документации по каждому соединителю.
VectorStoreVectorAttribute
Используйте этот атрибут, чтобы указать, что свойство содержит вектор.
[VectorStoreVector(Dimensions: 4, DistanceFunction = DistanceFunction.CosineSimilarity, IndexKind = IndexKind.Hnsw)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
Также можно использовать VectorStoreVectorAttribute свойства, которые не имеют векторного типа, например свойство типа string.
Когда свойство декорируется таким образом, Microsoft.Exntesions.AI.IEmbeddingGenerator экземпляр должен быть предоставлен в хранилище векторов.
При изменении записи текст, который находится в свойстве, автоматически преобразуется в string вектор и сохраняется в качестве вектора в базе данных.
Невозможно получить вектор с помощью этого механизма.
[VectorStoreVector(Dimensions: 4, DistanceFunction = DistanceFunction.CosineSimilarity, IndexKind = IndexKind.Hnsw)]
public string DescriptionEmbedding { get; set; }
Совет
Дополнительные сведения об использовании встроенного поколения внедрения см. в статье "Разрешение векторного хранилища создавать внедрения".
Параметры VectorStoreVectorAttribute
| Параметр | Обязательное поле | Описание |
|---|---|---|
| Измерения | Да | Число измерений, которые имеет вектор. Это необходимо при создании векторного индекса для коллекции. |
| IndexKind | нет | Тип индекса для индексирования вектора. Значение по умолчанию зависит от типа векторного хранилища. |
| DistanceFunction | нет | Тип функции, используемой при сравнении векторов во время векторного поиска по этому вектору. Значение по умолчанию зависит от типа векторного хранилища. |
| Имя хранилища | нет | Можно использовать для указания альтернативного имени свойства в базе данных. Обратите внимание, что этот параметр не поддерживается всеми соединителями, например, где поддерживаются альтернативные варианты JsonPropertyNameAttribute . |
Распространенные типы индексов и типы функций расстояния предоставляются в виде статических значений Microsoft.SemanticKernel.Data.IndexKind в классах и Microsoft.SemanticKernel.Data.DistanceFunction классах.
Отдельные реализации векторного хранилища также могут использовать собственные типы индексов и функции расстояния, где база данных поддерживает необычные типы.
Совет
Дополнительные сведения о поддержке StorageName соединителей и доступных альтернативах см. в документации по каждому соединителю.
Все методы для upsert или получения записей используют класс и определение записи векторного хранилища.
Это можно сделать, определив собственный класс с заметками для полей или используя класс или тип в сочетании с определением записи. Для класса необходимо сделать два действия, первое — добавить заметки с типами полей, второй — декорировать класс декоратором vectorstoremodel .
Совет
Альтернативный подход с использованием определения записи см. в определении схемы с определением записи.
Ниже приведен пример модели, украшенной этими заметками.
from dataclasses import dataclass, field
from typing import Annotated
from semantic_kernel.data import (
DistanceFunction,
IndexKind,
VectorStoreRecordDataField,
VectorStoreRecordDefinition,
VectorStoreRecordKeyField,
VectorStoreRecordVectorField,
vectorstoremodel,
)
@vectorstoremodel
@dataclass
class Hotel:
hotel_id: Annotated[str, VectorStoreRecordKeyField()] = field(default_factory=lambda: str(uuid4()))
hotel_name: Annotated[str, VectorStoreRecordDataField(is_filterable=True)]
description: Annotated[str, VectorStoreRecordDataField(is_full_text_searchable=True)]
description_embedding: Annotated[list[float], VectorStoreRecordVectorField(dimensions=4, distance_function=DistanceFunction.COSINE, index_kind=IndexKind.HNSW)]
tags: Annotated[list[str], VectorStoreRecordDataField(is_filterable=True)]
Совет
Определение класса с помощью этих заметок можно сделать несколькими способами, одним из которых является использование dataclasses модуля в Python, показанного здесь. В этом примере также показаны другие подходы (с помощью Pydantic BaseModels и ванильного python-классов).
Заметки
Используется три типа заметок, и они имеют общий базовый класс.
VectorStoreRecordField
Это базовый класс для всех заметок, он не предназначен для непосредственного использования.
Параметры VectorStoreRecordField
| Параметр | Обязательное поле | Описание |
|---|---|---|
| имя | нет | Можно добавить напрямую, но при синтаксическом анализе модели. |
| property_type | нет | Должен быть строкой, также будет производным во время синтаксического анализа. |
Совет
Заметки анализируются декоратором vectorstoremodel и одним из выполняемых действий является создание определения записи для класса, поэтому не обязательно создавать экземпляр класса полей при отсутствии параметров, поле может быть аннотировано только классом, как показано ниже.
hotel_id: Annotated[str, VectorStoreRecordKeyField]
VectorStoreRecordKeyField
Используйте эту заметку, чтобы указать, что этот атрибут является ключом записи.
VectorStoreRecordKeyField()
Параметры VectorStoreRecordKeyField
Другие параметры за пределами базового класса не определены.
VectorStoreRecordDataField
Используйте эту заметку, чтобы указать, что атрибут содержит общие данные, которые не являются ключом или вектором.
VectorStoreRecordDataField(is_filterable=True)
Параметры VectorStoreRecordDataField
| Параметр | Обязательное поле | Описание |
|---|---|---|
| has_embedding | нет | Указывает, имеет ли свойство встраивание, связанное с ним, значение по умолчанию — None. |
| embedding_property_name | нет | Имя свойства, содержащего внедрение, по умолчанию — None. |
| is_filterable | нет | Указывает, следует ли индексировать свойство для фильтрации в случаях, когда для базы данных требуется использовать индексирование для каждого свойства. По умолчанию — false. |
| is_full_text_searchable | нет | Указывает, следует ли индексировать свойство для полнотекстового поиска баз данных, поддерживающих полнотекстовый поиск. По умолчанию — false. |
VectorStoreRecordVectorField
Используйте эту заметку, чтобы указать, что атрибут содержит вектор.
VectorStoreRecordVectorField(dimensions=4, distance_function=DistanceFunction.COSINE, index_kind=IndexKind.HNSW)
Параметры VectorStoreRecordVectorField
| Параметр | Обязательное поле | Описание |
|---|---|---|
| размеры | Да для создания коллекции, необязательно в противном случае | Число измерений, которые имеет вектор. Обычно это необходимо при создании векторного индекса для коллекции. |
| index_kind | нет | Тип индекса для индексирования вектора. Значение по умолчанию зависит от типа векторного хранилища. |
| distance_function | нет | Тип функции, используемой при сравнении векторов во время векторного поиска по этому вектору. Значение по умолчанию зависит от типа векторного хранилища. |
| local_embedding | нет | Указывает, имеет ли свойство локальную внедренную связь с ним, значение по умолчанию — None. |
| embedding_settings | нет | Параметры внедрения в виде дикта с service_id в качестве ключа и PromptExecutionSettings в качестве значения по умолчанию — None. |
| serialize_function | нет | Функция, используемая для сериализации вектора, если тип не является списком[float | int] этой функцией, или необходимо сериализовать всю модель. |
| deserialize_function | нет | Функция, используемая для десериализации вектора, если тип не является списком[float | int] этой функцией, или необходимо десериализировать всю модель. |
Распространенные типы индексов и типы функций расстояния предоставляются в виде статических значений semantic_kernel.data.IndexKind в классах и semantic_kernel.data.DistanceFunction классах.
Отдельные реализации векторного хранилища также могут использовать собственные типы индексов и функции расстояния, где база данных поддерживает необычные типы.
Все методы для upsert или получения записей используют строго типизированные классы моделей. Поля этих классов украшены заметками, указывающими назначение каждого поля.
Совет
Для альтернативы использованию атрибутов см . определение схемы с определением записи.
Ниже приведен пример модели, украшенной этими заметками. По умолчанию большинство векторных векторов коробки используют Джексон, поэтому рекомендуется, чтобы объект модели можно сериализовать Джексоном, т. е. класс виден, имеет методы получения, конструктор, заметки и т. д.
import com.microsoft.semantickernel.data.vectorstorage.annotations.VectorStoreRecordData;
import com.microsoft.semantickernel.data.vectorstorage.annotations.VectorStoreRecordKey;
import com.microsoft.semantickernel.data.vectorstorage.annotations.VectorStoreRecordVector;
import com.microsoft.semantickernel.data.vectorstorage.definition.DistanceFunction;
import com.microsoft.semantickernel.data.vectorstorage.definition.IndexKind;
import java.util.List;
public class Hotel {
@VectorStoreRecordKey
private String hotelId;
@VectorStoreRecordData(isFilterable = true)
private String name;
@VectorStoreRecordData(isFullTextSearchable = true)
private String description;
@VectorStoreRecordVector(dimensions = 4, indexKind = IndexKind.HNSW, distanceFunction = DistanceFunction.COSINE_DISTANCE)
private List<Float> descriptionEmbedding;
@VectorStoreRecordData(isFilterable = true)
private List<String> tags;
public Hotel() { }
public Hotel(String hotelId, String name, String description, List<Float> descriptionEmbedding, List<String> tags) {
this.hotelId = hotelId;
this.name = name;
this.description = description;
this.descriptionEmbedding = descriptionEmbedding;
this.tags = tags;
}
public String getHotelId() { return hotelId; }
public String getName() { return name; }
public String getDescription() { return description; }
public List<Float> getDescriptionEmbedding() { return descriptionEmbedding; }
public List<String> getTags() { return tags; }
}
Заметки
VectorStoreRecordKey
Используйте эту заметку, чтобы указать, что поле является ключом записи.
@VectorStoreRecordKey
private String hotelId;
Параметры VectorStoreRecordKey
| Параметр | Обязательное поле | Описание |
|---|---|---|
| storageName | нет | Можно использовать для указания альтернативного имени поля в базе данных. Обратите внимание, что этот параметр не поддерживается всеми соединителями, например, где используется Джексон, в этом случае имя хранилища можно указать с помощью заметок Джексона. |
Совет
Дополнительные сведения о том, какие соединители поддерживают storageName и какие альтернативные варианты доступны, см . в документации по каждому соединителю.
VectorStoreRecordData
Используйте эту заметку, чтобы указать, что поле содержит общие данные, которые не являются ключом или вектором.
@VectorStoreRecordData(isFilterable = true)
private String name;
Параметры VectorStoreRecordData
| Параметр | Обязательное поле | Описание |
|---|---|---|
| isFilterable | нет | Указывает, следует ли индексировать поле для фильтрации в случаях, когда для базы данных требуется выбрать индексирование для каждого поля. По умолчанию — false. |
| isFullTextSearchable | нет | Указывает, следует ли индексировать поле для полнотекстового поиска баз данных, поддерживающих полнотекстовый поиск. По умолчанию — false. |
| storageName | нет | Можно использовать для указания альтернативного имени поля в базе данных. Обратите внимание, что этот параметр не поддерживается всеми соединителями, например, где используется Джексон, в этом случае имя хранилища можно указать с помощью заметок Джексона. |
Совет
Дополнительные сведения о том, какие соединители поддерживают storageName и какие альтернативные варианты доступны, см . в документации по каждому соединителю.
VectorStoreRecordVector
Используйте эту заметку, чтобы указать, что поле содержит вектор.
@VectorStoreRecordVector(dimensions = 4, indexKind = IndexKind.HNSW, distanceFunction = DistanceFunction.COSINE_DISTANCE)
private List<Float> descriptionEmbedding;
Параметры VectorStoreRecordVector
| Параметр | Обязательное поле | Описание |
|---|---|---|
| размеры | Да для создания коллекции, необязательно в противном случае | Число измерений, которые имеет вектор. Обычно это необходимо при создании векторного индекса для коллекции. |
| indexKind | нет | Тип индекса для индексирования вектора. Значение по умолчанию зависит от типа векторного хранилища. |
| distanceFunction | нет | Тип функции, используемой при сравнении векторов во время векторного поиска по этому вектору. Значение по умолчанию зависит от типа векторного хранилища. |
| storageName | нет | Можно использовать для указания альтернативного имени поля в базе данных. Обратите внимание, что этот параметр не поддерживается всеми соединителями, например, где используется Джексон, в этом случае имя хранилища можно указать с помощью заметок Джексона. |
Общие типы индексов и типы функций расстояния предоставляются в com.microsoft.semantickernel.data.vectorstorage.definition.IndexKind перечислениях и com.microsoft.semantickernel.data.vectorstorage.definition.DistanceFunction перечислениях.
Отдельные реализации векторного хранилища также могут использовать собственные типы индексов и функции расстояния, где база данных поддерживает необычные типы.
Совет
Дополнительные сведения о том, какие соединители поддерживают storageName и какие альтернативные варианты доступны, см . в документации по каждому соединителю.
Дополнительные сведения в ближайшее время.