Поделиться через


Использование соединителя Weaviate Vector Store (предварительная версия)

Предупреждение

Функциональность Weaviate Vector Store находится на стадии предварительного просмотра, и улучшения, влекущие за собой существенные изменения, могут еще происходить в ограниченных случаях до выпуска.

Предупреждение

Функции хранилища векторов семантического ядра доступны в предварительной версии и улучшения, требующие критических изменений, могут по-прежнему возникать в ограниченных обстоятельствах перед выпуском.

Предупреждение

Функции хранилища векторов семантического ядра доступны в предварительной версии и улучшения, требующие критических изменений, могут по-прежнему возникать в ограниченных обстоятельствах перед выпуском.

Обзор

Соединитель Weaviate Vector Store можно использовать для доступа к данным и управления ими в Weaviate. Соединитель имеет следующие характеристики.

Область функций Поддержка
Коллекция сопоставляется с Коллекция Weaviate
Поддерживаемые типы свойств ключей GUID
Поддерживаемые типы свойств данных
  • строка
  • байт
  • короткий
  • INT
  • длинный
  • двойной
  • с плавающей запятой
  • десятичное
  • булевая переменная (bool)
  • Дата/время
  • DateTimeOffset (смещение даты и времени)
  • GUID
  • и перечисляемые объекты каждого из этих типов
Поддерживаемые типы свойств вектора
  • ПамятьТолькоДляЧтения<float>
  • Внедрение с плавающей запятой<>
  • float[]
Поддерживаемые типы индексов
  • Hnsw
  • Фиксированная
  • Динамический
Поддерживаемые функции расстояния
  • CosineDistance
  • ОтрицательноеСкалярноеУмножениеСходство
  • Евклидово квадратное расстояние
  • HammingDistance
  • Манхэттенское расстояние
Поддерживаемые условия фильтров
  • AnyTagEqualTo
  • EqualTo
Поддержка нескольких векторов в записи Да
Поддерживается ли функция IsIndexed? Да
Поддерживается ли полнотекстовый индекс? Да
Поддерживается StorageName? Нет, используйте JsonSerializerOptions и JsonPropertyNameAttribute вместо этого. Дополнительные сведения см. здесь.
Поддерживается гибридный поиск? Да
Область функций Поддержка
Коллекция сопоставляется с Коллекция Weaviate
Поддерживаемые типы свойств ключей GUID
Поддерживаемые типы свойств данных
  • строка
  • байт
  • короткий
  • INT
  • длинный
  • двойной
  • с плавающей запятой
  • десятичное
  • булевая переменная (bool)
  • и итерируемые объекты каждого из этих типов
Поддерживаемые типы свойств вектора
  • список[float]
  • список[int]
  • ndarray
Поддерживаемые типы индексов
  • Hnsw
  • Фиксированная
  • Динамический
Поддерживаемые функции расстояния
  • CosineDistance
  • ОтрицательноеСкалярноеУмножениеСходство
  • Евклидово квадратное расстояние
  • Хеминг
  • Манхэттенское расстояние
Поддерживаемые условия фильтров
  • AnyTagEqualTo
  • EqualTo
Поддержка нескольких векторов в записи Да
Поддерживается IsFilterable? Да
Поддерживается ЛиFullTextSearchable? Да

Скоро.

Ограничения

Важные ограничения функциональных возможностей соединителя Weaviate.

Область функций Обходное решение
Использование свойства vector для объектов с одним вектором не поддерживается Вместо этого поддерживается использование свойства vectors.

Предупреждение

Weaviate требует, чтобы имена коллекций начинались с заглавной буквы. Если вы не укажете имя коллекции с заглавной буквой, Weaviate вернет ошибку при попытке создать коллекцию. Появится сообщение об ошибке Cannot query field "mycollection" on type "GetObjectsObj". Did you mean "Mycollection"?, а mycollection – это имя вашей коллекции. Если в этом примере изменить имя коллекции на Mycollection, это устранит ошибку.

Начало работы

Добавьте пакет NuGet соединителя Weaviate Vector Store в ваш проект.

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

Можно добавить хранилище векторов в контейнер внедрения зависимостей, доступный в KernelBuilder, или в IServiceCollection с использованием методов расширения, предоставляемых Семантическим Ядром. Хранилище векторов Weaviate использует HttpClient для взаимодействия со службой Weaviate. Существует два варианта предоставления URL-адреса или конечной точки для службы Weaviate. Его можно предоставить с помощью параметров или задать базовый адрес объекта HttpClient.

В первом примере показано, как задать URL-адрес службы с помощью параметров. Кроме того, обратите внимание, что эти методы будут получать экземпляр HttpClient из поставщика внедрения зависимостей для вызова службы Weaviate.

using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder();
kernelBuilder.Services
    .AddWeaviateVectorStore(new Uri("http://localhost:8080/v1/"), apiKey: null);
using Microsoft.Extensions.DependencyInjection;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddWeaviateVectorStore(new Uri("http://localhost:8080/v1/"), apiKey: null);

Также предоставляются перегрузки, в которых можно указать собственные HttpClient . В этом случае можно задать URL-адрес службы с помощью HttpClientBaseAddress параметра.

using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel.CreateBuilder();
using HttpClient client = new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") };
kernelBuilder.Services.AddWeaviateVectorStore(_ => client);
using System.Net.Http;
using Microsoft.Extensions.DependencyInjection;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
using HttpClient client = new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") };
builder.Services.AddWeaviateVectorStore(_ => client);

Вы также можете напрямую создать экземпляр векторного хранилища Weaviate.

using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;

var vectorStore = new WeaviateVectorStore(
    new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") });

Можно создать прямую ссылку на именованную коллекцию.

using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;

var collection = new WeaviateCollection<Guid, Hotel>(
    new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") },
    "Skhotels");

При необходимости можно передать ключ API в качестве параметра при использовании любого из указанных выше механизмов, например.

using Microsoft.SemanticKernel;

var kernelBuilder = Kernel
    .CreateBuilder();
kernelBuilder.Services
    .AddWeaviateVectorStore(new Uri("http://localhost:8080/v1/"), secretVar);

Сопоставление данных

Соединитель Weaviate Vector Store предоставляет мэппер по умолчанию при сопоставлении модели данных с хранилищем. Weaviate требует, чтобы свойства были сопоставлены с идентификаторами, полезной нагрузкой и группами векторов. Средство сопоставления по умолчанию использует аннотации модели или определение записи для определения типа каждого свойства и выполнения этого сопоставления.

  • Свойство модели данных, помеченное как ключ, будет сопоставлено со свойством Weaviate id .
  • Свойства модели данных, аннотированные как данные, будут сопоставлены с объектом Weaviate properties.
  • Свойства модели данных, аннотированные как векторы, будут сопоставлены с объектом Weaviate vectors .

Преобразователь по умолчанию использует System.Text.Json.JsonSerializer для преобразования в схему хранилища. Это означает, что использование объекта JsonPropertyNameAttribute поддерживается, если требуется другое имя хранилища для имени свойства модели данных.

Ниже приведен пример модели данных с JsonPropertyNameAttribute набором и способом представления в Weaviate.

using System.Text.Json.Serialization;
using Microsoft.Extensions.VectorData;

public class Hotel
{
    [VectorStoreKey]
    public Guid HotelId { get; set; }

    [VectorStoreData(IsIndexed = true)]
    public string HotelName { get; set; }

    [VectorStoreData(IsFullTextIndexed = true)]
    public string Description { get; set; }

    [JsonPropertyName("HOTEL_DESCRIPTION_EMBEDDING")]
    [VectorStoreVector(4, DistanceFunction = DistanceFunction.CosineDistance, IndexKind = IndexKind.QuantizedFlat)]
    public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
{
    "id": "11111111-1111-1111-1111-111111111111",
    "properties": { "HotelName": "Hotel Happy", "Description": "A place where everyone can be happy." },
    "vectors": {
        "HOTEL_DESCRIPTION_EMBEDDING": [0.9, 0.1, 0.1, 0.1],
    }
}

Начало работы

Добавьте зависимости для соединителя Weaviate Vector Store в ваш проект.

pip install semantic-kernel[weaviate]

Затем вы можете создать векторное хранилище, используя параметры среды для подключения:

Для использования Weaviate Cloud:

  • URL-адрес: WEAVIATE_URL
  • api_key: WEAVIATE_API_KEY

Для использования Weaviate Local (т. е. Weaviate в контейнере Docker):

  • local_host: WEAVIATE_LOCAL_HOST
  • local_port: WEAVIATE_LOCAL_PORT
  • local_grpc_port: WEAVIATE_LOCAL_GRPC_PORT

Если вы хотите использовать встроенное:

  • use_embed: WEAVIATE_USE_EMBED

Они должны быть заданы исключительно, поэтому существует только один набор из приведенного выше набора, в противном случае это приведет к возникновению исключения.

from semantic_kernel.connectors.weaviate import WeaviateStore

store = WeaviateStore()

Кроме того, вы также можете передать собственный клиент MongoDB, если вы хотите больше контроля над созданием клиента.

import weaviate
from semantic_kernel.connectors.weaviate import WeaviateStore

client = weaviate.WeaviateAsyncClient(...)
store = WeaviateStore(async_client=client)

Вы также можете создать коллекцию напрямую без хранилища.

from semantic_kernel.connectors.weaviate import WeaviateCollection

# `hotel` is a class created with the @vectorstoremodel decorator
collection = WeaviateCollection(
    collection_name="my_collection",
    record_type=hotel
)

Сериализация

Клиент Weaviate возвращает собственные объекты, которые анализируются и преобразуются в словари в обычном порядке. Подробнее об этой концепции см. в документации по сериализации .

Скоро

Дополнительные сведения в ближайшее время.