Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Advertencia
La funcionalidad del almacén de vectores de Sql Server se encuentra en versión preliminar y las mejoras que requieren modificaciones significativas pueden producirse en circunstancias limitadas antes de su lanzamiento.
Advertencia
La funcionalidad del Semantic Kernel Vector Store está en fase de prueba, y las mejoras que requieran cambios importantes pueden ocurrir en circunstancias limitadas antes de su lanzamiento.
Advertencia
La funcionalidad del Semantic Kernel Vector Store está en fase de prueba, y las mejoras que requieran cambios importantes pueden ocurrir en circunstancias limitadas antes de su lanzamiento.
Información general
El conector del almacén de vectores de SQL Server se puede usar para acceder a los datos y administrarlos en SQL Server. El conector tiene las siguientes características.
| Área de características | Apoyo |
|---|---|
| La colección asigna a | Tabla de SQL Server |
| Tipos de propiedades de clave admitidos |
|
| Tipos de propiedad de datos admitidos |
|
| Tipos de propiedades vectoriales admitidos |
|
| Tipos de índice admitidos |
|
| Funciones de distancia compatibles |
|
| Admite varios vectores en un registro | Sí |
| ¿Está IsIndexed soportado? | Sí |
| ¿Está IsFullTextIndexed soportado? | No |
| ¿Se admite StorageName? | Sí |
| ¿Se admite HybridSearch? | No |
Cómo empezar
Agregue el paquete NuGet del conector del almacén de vectores de SQL Server a su proyecto.
dotnet add package Microsoft.SemanticKernel.Connectors.SqlServer --prerelease
Puede agregar el almacén de vectores al contenedor de inserción de dependencias IServiceCollection mediante métodos de extensión proporcionados por el Kernel Semántico.
using Microsoft.Extensions.DependencyInjection;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSqlServerVectorStore(_ => "<connectionstring>");
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel;
// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSqlServerVectorStore(_ => "<connectionstring>")
Puede construir una instancia de Almacén de vectores de Sql Server directamente.
using Microsoft.SemanticKernel.Connectors.SqlServer;
var vectorStore = new SqlServerVectorStore("<connectionstring>");
Es posible construir una referencia directa a una colección con nombre.
using Microsoft.SemanticKernel.Connectors.SqlServer;
var collection = new SqlServerCollection<string, Hotel>("<connectionstring>", "skhotels");
Mapeo de datos
El conector de almacén de vectores de SQL Server proporciona un mapeador predeterminado al mapear desde el modelo de datos al almacenamiento. Este mapeador realiza una conversión sin intermediarios de la lista de propiedades del modelo de datos a las columnas de SQL Server.
Anulación del nombre de propiedad
Puede proporcionar nombres de propiedad de anulación para usar en el almacenamiento que sean diferentes de los nombres de propiedad del modelo de datos.
La anulación del nombre de propiedad se realiza al establecer la opción StorageName a través de los atributos de propiedad del modelo de datos o de la definición de registro.
Este es un ejemplo de un modelo de datos con StorageName establecido en sus atributos y cómo se representará en un comando de SQL Server.
using Microsoft.Extensions.VectorData;
public class Hotel
{
[VectorStoreKey]
public ulong HotelId { get; set; }
[VectorStoreData(StorageName = "hotel_name")]
public string? HotelName { get; set; }
[VectorStoreData(StorageName = "hotel_description")]
public string? Description { get; set; }
[VectorStoreVector(Dimensions: 4, DistanceFunction = DistanceFunction.CosineDistance)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}
CREATE TABLE Hotel (
[HotelId] BIGINT NOT NULL,
[hotel_name] NVARCHAR(MAX),
[hotel_description] NVARCHAR(MAX),
[DescriptionEmbedding] VECTOR(4),
PRIMARY KEY ([HotelId])
);
Información general
El conector del almacén de vectores de SQL Server es una implementación del almacén de vectores proporcionada por el kernel semántico que usa Azure SQL como almacén de vectores. Una vez que SQL Server local admite vectores, también se puede usar así.
El conector tiene las siguientes características.
| Área de características | Apoyo |
|---|---|
| La colección asigna a | Diccionario de tablas |
| Tipos de propiedades de clave admitidos |
|
| Tipos de propiedad de datos admitidos | Cualquier tipo |
| Tipos de propiedades vectoriales admitidos |
|
| Tipos de índice admitidos |
|
| Funciones de distancia compatibles |
|
| Admite varios vectores en un registro | Sí |
| ¿is_filterable es compatible? | Sí |
| ¿is_full_text_searchable es compatible? | No |
Cómo empezar
Agregue el paquete kernel semántico al proyecto.
pip install semantic-kernel[sql]
El conector de SQL Server usa el paquete pyodbc para conectarse a SQL Server. El adicional instalará el paquete, pero tendrá que instalar el controlador ODBC para SQL Server por separado, lo que difiere en función de la plataforma, consulte la documentación de Azure SQL para obtener más información.
Para que el almacén y la colección funcionen, necesita una cadena de conexión, se puede pasar al constructor o establecerse en la variable SQL_SERVER_CONNECTION_STRINGde entorno . Para tratar correctamente los vectores, se agregará la LongAsMax=yes opción si no se encuentra. Además, puede usar tanto el conjunto nombre de usuario/contraseña como la seguridad integrada; en el caso de la última, se utiliza DefaultAzureCredential.
En los fragmentos de código siguientes, se supone que tiene una clase de modelo de datos definida denominada "DataModel".
from semantic_kernel.connectors.sql_server import SqlServerStore
vector_store = SqlServerStore()
# OR
vector_store = SqlServerStore(connection_string="Driver={ODBC Driver 18 for SQL Server};Server=server_name;Database=database_name;UID=user;PWD=password;LongAsMax=yes;")
vector_collection = vector_store.get_collection("dbo.table_name", DataModel)
Es posible construir una referencia directa a una colección con nombre.
from semantic_kernel.connectors.sql_server import SqlServerCollection
vector_collection = SqlServerCollection("dbo.table_name", DataModel)
Nota: El nombre de la colección se puede especificar como una cadena simple (por ejemplo
table_name, ) o como un nombre completo (por ejemplo,dbo.table_name). Se recomienda evitar ambigüedad, si no se especifica ningún esquema, se usará el esquema predeterminado (dbo).
Cuando tenga requisitos específicos para la conexión, también puede pasar un pyodbc.Connection objeto al SqlServerStore constructor. Esto le permite usar una cadena de conexión personalizada u otras opciones de conexión:
from semantic_kernel.connectors.sql_server import SqlServerStore
import pyodbc
# Create a connection to the SQL Server database
connection = pyodbc.connect("Driver={ODBC Driver 18 for SQL Server};Server=server_name;Database=database_name;UID=user;PWD=password;LongAsMax=yes;")
# Create a SqlServerStore with the connection
vector_store = SqlServerStore(connection=connection)
Tendrá que asegurarse de cerrar la conexión usted mismo, ya que la tienda o la colección no lo harán por usted.
Creación personalizada de consultas
El conector de SQL Server está limitado al tipo de índice plano.
El método ensure_collection_exists en el SqlServerCollection te permite pasar una o varias consultas personalizadas para crear la colección. Las consultas se ejecutan en el orden en que se pasan, no se devuelve ningún resultado.
Si esto se hace, no hay ninguna garantía de que los otros métodos sigan funcionando según lo previsto. El conector no es consciente de las consultas personalizadas y no las validará.
Si tiene DataModelid, contenty vector como campos, por ejemplo, podría crear la tabla como esta para crear también un índice en el campo de contenido:
from semantic_kernel.connectors.sql_server import SqlServerCollection
# Create a collection with a custom query
async with SqlServerCollection("dbo.table_name", DataModel) as collection:
collection.ensure_collection_exists(
queries=["CREATE TABLE dbo.table_name (id INT PRIMARY KEY, content NVARCHAR(3000) NULL, vector VECTOR(1536) NULL ) PRIMARY KEY (id);",
"CREATE INDEX idx_content ON dbo.table_name (content);"]
)
Próximamente
Más información próximamente.