Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Las bases de datos vectoriales almacenan y administran las incrustaciones de vectores. Las incrustaciones son representaciones numéricas de datos que conservan el significado semántico. Palabras, documentos, imágenes, audio y otros tipos de datos se pueden vectorizar. Puede usar inserciones para ayudar a un modelo de inteligencia artificial a comprender el significado de las entradas para que pueda realizar comparaciones y transformaciones, como resumir texto, buscar datos relacionados contextualmente o crear imágenes a partir de descripciones de texto.
Por ejemplo, puede usar una base de datos vectorial para:
- Identifique imágenes, documentos y canciones similares en función de su contenido, temas, sentimientos y estilos.
- Identifique productos similares en función de sus características, funciones y grupos de usuarios.
- Recomiende el contenido, productos o servicios en función de las preferencias del usuario.
- Identifique las mejores opciones posibles de un gran grupo de opciones para cumplir los requisitos complejos.
- Identifique anomalías de datos o actividades fraudulentas que no sean similares a los patrones predominantes o normales.
Descripción del vector de búsqueda
Las bases de datos vectoriales proporcionan capacidades de búsqueda de vectores para encontrar elementos similares según sus características de datos, en lugar de coincidencias exactas en un campo de propiedades. La búsqueda de vectores funciona mediante el análisis de las representaciones vectoriales de tus datos que has creado mediante un modelo de generación de incrustaciones de IA, como los modelos de incrustación de Azure OpenAI. El proceso de búsqueda mide la distancia entre los vectores de datos y el vector de consulta. Los vectores de datos más cercanos al vector de consulta son los que son más similares semánticamente.
La mayoría de los productos de base de datos modernos admiten la búsqueda vectorial junto con consultas tradicionales; este es el caso de Azure SQL/SQL Server, Azure Cosmos DB, PostgreSQL y muchos otros productos principales. Como alternativa, existe una amplia gama de productos dedicados y especializados de base de datos vectoriales. Estos productos están altamente optimizados para realizar búsquedas vectoriales y normalmente se instalan junto con una base de datos tradicional exclusivamente para controlar las cargas de trabajo de búsqueda vectorial.
Flujos de trabajo de búsqueda vectorial con .NET y OpenAI
Las bases de datos vectoriales y sus características de búsqueda son especialmente útiles en flujos de trabajo de patrón RAG con Azure OpenAI. Este patrón le permite mejorar su modelo de inteligencia artificial con conocimientos adicionales semánticamente ricos de sus datos. Un flujo de trabajo de IA común mediante bases de datos vectoriales incluye estos pasos:
- Cree embeddings para sus datos mediante un modelo de embeddings de OpenAI.
- Almacene e indexe las inserciones en una base de datos de vectores o un servicio de búsqueda.
- Convierta las solicitudes de usuario de tu aplicación en embeddings.
- Ejecute una búsqueda de vectores en los datos, comparando la inserción del usuario con las incrustaciones de la base de datos.
- Use un modelo de lenguaje como gpt-4o para ensamblar una finalización fácil de usar a partir de los resultados de la búsqueda vectorial.
Para obtener un ejemplo práctico de este flujo, consulte el tutorial Implement Azure OpenAI con RAG mediante la búsqueda de vectores en una aplicación de .NET.
Entre otras ventajas del patrón RAG se incluyen:
- La generación de respuestas contextualmente relevantes y precisas a las solicitudes del usuario a partir de modelos de inteligencia artificial.
- Superar los límites de token de LLM: el trabajo pesado se realiza a través de la búsqueda de vectores de base de datos.
- La reducción de los costos del ajuste frecuente de los datos actualizados.
biblioteca Microsoft.Extensions.VectorData
Para usar la búsqueda de vectores desde .NET, puede usar el controlador de base de datos normal o el SDK sin necesidad de ninguna biblioteca o API adicional. Por ejemplo, en SQL Server, la búsqueda de vectores se puede realizar en T-SQL cuando se usa el controlador .NET estándar, SqlClient. Sin embargo, el acceso a la búsqueda de vectores de esta manera suele ser bastante bajo, requiere una ceremonia considerable para controlar la serialización o deserialización, y el código resultante no es portátil entre bases de datos.
Como alternativa, la biblioteca Microsoft.Extensions.VectorData proporciona una capa unificada de abstracciones para interactuar con almacenes vectoriales en .NET.
Abstracciones clave
Este es un ejemplo mínimo de extremo a extremo que crea una colección, realiza upserts de registros, y ejecuta una búsqueda vectorial.
using Microsoft.Extensions.AI;
using Microsoft.Extensions.VectorData;
using Microsoft.SemanticKernel.Connectors.InMemory;
// Configure an embedding generator to transform text to embeddings
IEmbeddingGenerator<string, Embedding<float>> embeddingGenerator = ...;
// Create a vector store and get a collection with the embedding generator
var vectorStore = new InMemoryVectorStore(new() { EmbeddingGenerator = embeddingGenerator });
var collection = vectorStore.GetCollection<int, Movie>("movies");
await collection.EnsureCollectionExistsAsync();
// Upsert some records
await collection.UpsertAsync(new Movie { Key = 1, Title = "The Lion King", Description = "An animated film about a young lion prince" });
await collection.UpsertAsync(new Movie { Key = 2, Title = "Inception", Description = "A thief who steals corporate secrets through dream-sharing technology" });
await collection.UpsertAsync(new Movie { Key = 3, Title = "Finding Nemo", Description = "A fish searches the ocean for his lost son" });
// Search for movies similar to the query text
await foreach (var result in collection.SearchAsync("animals in the wild", top: 2))
{
Console.WriteLine($"{result.Record.Title} (score: {result.Score})");
}
// Define the data model
class Movie
{
[VectorStoreKey]
public int Key { get; set; }
[VectorStoreData]
public string Title { get; set; }
[VectorStoreVector(Dimensions: 1536)]
public string Description { get; set; }
}
Proveedores de almacén de vectores
El paquete Microsoft.Extensions.VectorData.Abstractions define las abstracciones, y los paquetes de proveedor proporcionan implementaciones para bases de datos vectoriales específicas. Elija el proveedor que coincida con la base de datos vectorial, por ejemplo, Microsoft. SemanticKernel.Connectors.AzureAISearch.
Nota:
A pesar de la inclusión de "SemanticKernel" en los nombres de paquete, estos proveedores no tienen nada que ver con Kernel semántico y se pueden usar en cualquier parte de .NET, incluido El marco de trabajo del agente.
Todos los proveedores implementan las mismas VectorStore clases abstractas y VectorStoreCollection<TKey,TRecord> , por lo que puede cambiar entre ellos sin cambiar la lógica de la aplicación.
Sugerencia
Use el proveedor en memoria (Microsoft. SemanticKernel.Connectors.InMemory) durante el desarrollo inicial o la creación de prototipos: no requiere ningún servicio externo ni configuración, y puede intercambiarlo para un proveedor de producción más adelante. Evite usar el proveedor InMemory para las pruebas, ya que puede haber diferencias importantes entre este proveedor y la base de datos de producción. Considere la posibilidad de usar testcontainers para ejecutar pruebas en el sistema de base de datos de producción.