Uso del conector weaviate Vector Store (versión preliminar)
Advertencia
La funcionalidad Almacén de vectores de kernel semántico está en versión preliminar y las mejoras que requieren cambios importantes pueden producirse en circunstancias limitadas antes de la versión.
Información general
El conector Weaviate Vector Store se puede usar para acceder a los datos de Weaviate y administrarlos. El conector tiene las siguientes características.
Área de características | Soporte técnico |
---|---|
La colección se asigna a | Colección Weaviate |
Tipos de propiedades de clave admitidos | GUID |
Tipos de propiedad de datos admitidos |
|
Tipos de propiedades vectoriales admitidos |
|
Tipos de índice admitidos |
|
Funciones de distancia admitidas |
|
Admite varios vectores en un registro | Sí |
¿Se admite IsFilterable? | Sí |
¿Se admite IsFullTextSearchable? | Sí |
¿Se admite StoragePropertyName? | No, use JsonSerializerOptions y JsonPropertyNameAttribute en su lugar. Consulta aquí para obtener más información. |
Limitaciones
Limitaciones notables de la funcionalidad del conector weaviate.
Área de características | Solución alternativa |
---|---|
No se admite el uso de la propiedad 'vector' para objetos de vector único | En su lugar, se admite el uso de la propiedad "vectores". |
Introducción
Agregue el paquete NuGet del conector weaviate Vector Store al proyecto.
dotnet add package Microsoft.SemanticKernel.Connectors.Weaviate --prerelease
Puede agregar el almacén de vectores al contenedor de inserción de dependencias disponible en KernelBuilder
o al IServiceCollection
contenedor de inserción de dependencias mediante métodos de extensión proporcionados por kernel semántico.
El almacén de vectores de Weaviate usa un HttpClient
para comunicarse con el servicio Weaviate. Hay dos opciones para proporcionar la dirección URL o el punto de conexión para el servicio Weaviate.
Se puede proporcionar a través de opciones o estableciendo la dirección base de HttpClient
.
En este primer ejemplo se muestra cómo establecer la dirección URL del servicio a través de opciones.
Tenga en cuenta también que estos métodos recuperarán una HttpClient
instancia para realizar llamadas al servicio Weaviate desde el proveedor de servicios de inserción de dependencias.
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/") });
También se proporcionan sobrecargas en las que puede especificar las suyas propias HttpClient
.
En este caso, es posible establecer la dirección URL del servicio a través de la HttpClient
BaseAddress
opción .
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);
También puede construir una instancia de Almacén de vectores weaviate directamente.
using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;
var vectorStore = new WeaviateVectorStore(
new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") });
Es posible construir una referencia directa a una colección con nombre.
using System.Net.Http;
using Microsoft.SemanticKernel.Connectors.Weaviate;
var collection = new WeaviateVectorStoreRecordCollection<Hotel>(
new HttpClient { BaseAddress = new Uri("http://localhost:8080/v1/") },
"skhotels");
Si es necesario, es posible pasar una clave de API, como opción, al usar cualquiera de los mecanismos mencionados anteriormente, por ejemplo.
using Microsoft.SemanticKernel;
var kernelBuilder = Kernel
.CreateBuilder()
.AddWeaviateVectorStore(options: new() { Endpoint = new Uri("http://localhost:8080/v1/"), ApiKey = secretVar });
Asignación de datos
El conector weaviate Vector Store proporciona un asignador predeterminado al asignar desde el modelo de datos al almacenamiento. Weaviate requiere que las propiedades se asignen a agrupaciones id, payload y vectors. El asignador predeterminado usa las anotaciones del modelo o la definición de registro para determinar el tipo de cada propiedad y para realizar esta asignación.
- La propiedad del modelo de datos anotada como clave se asignará a la propiedad Weaviate
id
. - Las propiedades del modelo de datos anotadas como datos se asignarán al objeto Weaviate
properties
. - Las propiedades del modelo de datos anotadas como vectores se asignarán al objeto Weaviate
vectors
.
El asignador predeterminado usa System.Text.Json.JsonSerializer
para convertir en el esquema de almacenamiento.
Esto significa que se admite el uso de si se requiere un nombre de almacenamiento diferente al nombre de JsonPropertyNameAttribute
la propiedad del modelo de datos.
Este es un ejemplo de un modelo de datos con JsonPropertyNameAttribute
conjunto y cómo se representará en 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],
}
}
Próximamente
Más información próximamente.
Próximamente
Más información próximamente.