Partilhar via


Usando o conector Weaviate Vetor Store (Visualização)

Aviso

A funcionalidade Semantic Kernel Vetor Store está em pré-visualização, e melhorias que exigem alterações de quebra ainda podem ocorrer em circunstâncias limitadas antes do lançamento.

Descrição geral

O conector Weaviate Vetor Store pode ser usado para acessar e gerenciar dados no Weaviate. O conector tem as seguintes características.

Área de funcionalidades Suporte
Mapas da coleção para Coleção Weaviate
Tipos de propriedade de chave suportados GUID
Tipos de propriedade de dados suportados
  • string
  • byte
  • curtas
  • número inteiro
  • long
  • duplo
  • flutuante
  • decimal
  • booleano
  • DateTime
  • DateTimeOffset
  • GUID
  • e enumeráveis de cada um destes tipos
Tipos de propriedade vetorial suportados
  • Float ReadOnlyMemory<>
  • ReadOnlyMemory<duplo>
Tipos de índice suportados
  • Hnsw
  • Apartamento
  • Dinâmica
Funções de distância suportadas
  • CosineDistância
  • NegativeDotProductSimilarity
  • EuclideanSquaredDistância
  • Hamming
  • ManhattanDistância
Cláusulas de filtro suportadas
  • AnyTagEqualTo
  • EqualTo
Suporta vários vetores em um registro Sim
IsFilterable suportado? Sim
IsFullTextSearchable suportado? Sim
StoragePropertyName suportado? Não, use JsonSerializerOptions e JsonPropertyNameAttribute em vez disso. Veja aqui mais informações.

Limitações

Limitações notáveis da funcionalidade do conector Weaviate.

Área de funcionalidades Solução
Não há suporte para o uso da propriedade 'vector' para objetos de vetor único Em vez disso, há suporte para o uso da propriedade 'vectors'.

Aviso

Weaviate requer que os nomes das coleções comecem com uma letra maiúscula. Se você não fornecer um nome de coleção com uma letra maiúscula, o Weaviate retornará um erro quando você tentar criar sua coleção. O erro que você verá é Cannot query field "mycollection" on type "GetObjectsObj". Did you mean "Mycollection"? onde mycollection é o nome da sua coleção. Neste exemplo, se você alterar o nome da coleção para Mycollection, isso corrigirá o erro.

Introdução

Adicione o pacote NuGet do conector Weaviate Vetor Store ao seu projeto.

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

Você pode adicionar o armazenamento vetorial ao contêiner de injeção de dependência disponível no KernelBuilder ou ao contêiner de IServiceCollection injeção de dependência usando métodos de extensão fornecidos pelo Semantic Kernel. O repositório de vetores Weaviate usa um HttpClient para se comunicar com o serviço Weaviate. Há duas opções para fornecer a URL/ponto de extremidade para o serviço Weaviate. Pode ser fornecido através de opções ou definindo o endereço base do HttpClient.

Este primeiro exemplo mostra como definir a URL do serviço por meio de opções. Observe também que esses métodos recuperarão uma HttpClient instância para fazer chamadas para o serviço Weaviate do provedor de serviços de injeção de dependência.

using Microsoft.SemanticKernel;

// Using Kernel Builder.
var kernelBuilder = Kernel
    .CreateBuilder()
    .AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/") });
using Microsoft.SemanticKernel;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/") });

Sobrecargas onde você pode especificar o seu próprio HttpClient também são fornecidas. Neste caso, é possível definir o URL do serviço através da HttpClientBaseAddress opção.

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

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

// 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);

Você também pode construir uma instância do Weaviate Vetor Store diretamente.

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

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

É possível construir uma referência direta a uma coleção nomeada.

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

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

Se necessário, é possível passar uma chave de api, como opção, ao usar qualquer um dos mecanismos acima mencionados, por exemplo.

using Microsoft.SemanticKernel;

var kernelBuilder = Kernel
    .CreateBuilder()
    .AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/"), ApiKey = secretVar });

Mapeamento de dados

O conector Weaviate Vetor Store fornece um mapeador padrão ao mapear do modelo de dados para o armazenamento. Weaviate requer que as propriedades sejam mapeadas em id, carga útil e agrupamentos de vetores. O mapeador padrão usa as anotações de modelo ou a definição de registro para determinar o tipo de cada propriedade e fazer esse mapeamento.

  • A propriedade do modelo de dados anotada como uma chave será mapeada para a propriedade Weaviate id .
  • As propriedades do modelo de dados anotadas como dados serão mapeadas para o objeto Weaviate properties .
  • As propriedades do modelo de dados anotadas como vetores serão mapeadas para o objeto Weaviate vectors .

O mapeador padrão usa System.Text.Json.JsonSerializer para converter para o esquema de armazenamento. Isso significa que o JsonPropertyNameAttribute uso do é suportado se um nome de armazenamento diferente para o nome da propriedade do modelo de dados for necessário.

Aqui está um exemplo de um modelo de dados com JsonPropertyNameAttribute conjunto e como isso será representado no Weaviate.

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

public class Hotel
{
    [VectorStoreRecordKey]
    public ulong HotelId { get; set; }

    [VectorStoreRecordData(IsFilterable = true)]
    public string HotelName { get; set; }

    [VectorStoreRecordData(IsFullTextSearchable = true)]
    public string Description { get; set; }

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

Brevemente

Mais informações em breve.

Brevemente

Mais informações em breve.