Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Advertência
A funcionalidade SQL Server Vector Store está em fase de testes, e melhorias que exigem alterações significativas ainda podem ocorrer em circunstâncias limitadas em espera de lançamento.
Advertência
A funcionalidade Semantic Kernel Vector Store está em fase de testes, e melhorias que exigem alterações significativas ainda podem ocorrer em circunstâncias limitadas antes do lançamento oficial.
Advertência
A funcionalidade Semantic Kernel Vector Store está em fase de testes, e melhorias que exigem alterações significativas ainda podem ocorrer em circunstâncias limitadas antes do lançamento oficial.
Visão geral
O conector do SQL Server Vetor Store pode ser usado para acessar e gerenciar dados no SQL Server. O conector tem as seguintes características.
| Área de Destaque | Apoio |
|---|---|
| A coleção corresponde a | Tabela do SQL Server |
| Tipos de propriedades-chave suportados |
|
| Tipos de propriedade de dados suportados |
|
| Tipos de propriedade vetorial suportados |
|
| Tipos de índice suportados |
|
| Funções de distância suportadas |
|
| Suporta vários vetores em um registro | Sim |
| IsIndexed é suportado? | Sim |
| "É suportado IsFullTextIndexed?" | Não |
| Está StorageName suportado? | Sim |
| O HybridSearch é suportado? | Não |
Como Começar
Adicione o pacote NuGet do conector SQL Server Vector Store ao seu projeto.
dotnet add package Microsoft.SemanticKernel.Connectors.SqlServer --prerelease
Você pode adicionar o armazenamento de vetores ao contêiner de injeção de dependência IServiceCollection usando métodos de extensão fornecidos pelo Semantic Kernel.
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>")
Você pode construir uma instância do Sql Server Vetor Store diretamente.
using Microsoft.SemanticKernel.Connectors.SqlServer;
var vectorStore = new SqlServerVectorStore("<connectionstring>");
É possível construir uma referência direta a uma coleção nomeada.
using Microsoft.SemanticKernel.Connectors.SqlServer;
var collection = new SqlServerCollection<string, Hotel>("<connectionstring>", "skhotels");
Mapeamento de dados
O conector do SQL Server Vetor Store fornece um mapeador padrão ao mapear do modelo de dados para o armazenamento. Esse mapeador faz uma conversão direta da lista de propriedades no modelo de dados para as colunas no SQL Server.
Substituição do nome da propriedade
Você pode fornecer nomes de propriedade de substituição para usar no armazenamento que sejam diferentes dos nomes de propriedade no modelo de dados.
A substituição do nome da propriedade é realizada configurando a opção StorageName nos atributos de propriedade do modelo de dados ou na definição de registo.
Aqui está um exemplo de um modelo de dados com StorageName definido em seus atributos e como isso será representado em um comando do 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])
);
Visão geral
O conector SQL Server do Armazenamento Vetorial é uma implementação fornecida pelo Semantic Kernel que utiliza o Azure SQL como um armazenamento vetorial. Uma vez que o SQL Server on-prem oferece suporte a vetores, ele também pode ser usado com isso.
O conector tem as seguintes características.
| Área de Destaque | Apoio |
|---|---|
| A coleção corresponde a | Dicionário de tabelas |
| Tipos de propriedades-chave suportados |
|
| Tipos de propriedade de dados suportados | Qualquer tipo |
| Tipos de propriedade vetorial suportados |
|
| Tipos de índice suportados |
|
| Funções de distância suportadas |
|
| Suporta vários vetores em um registro | Sim |
| Está is_filterable suportado? | Sim |
| A pesquisa em texto completo é suportada? | Não |
Como Começar
Adicione o pacote Semantic Kernel ao seu projeto.
pip install semantic-kernel[sql]
O conector do SQL Server usa o pacote pyodbc para se conectar ao SQL Server. O extra instalará o pacote, mas você precisará instalar o driver ODBC para SQL Server separadamente, isso difere de acordo com a plataforma, consulte a Documentação do SQL do Azure para obter detalhes.
Para que o armazenamento e a coleção funcionem, ele precisa de uma cadeia de conexão, que pode ser passada para o construtor ou ser definida na variável SQL_SERVER_CONNECTION_STRINGde ambiente. Para lidar adequadamente com vetores, a opção LongAsMax=yes será adicionada se não for encontrada. Ele também pode usar tanto nome de usuário / senha ou segurança integrada, para o último, o DefaultAzureCredential é usado.
Nos trechos abaixo, supõe-se que você tenha uma classe de modelo de dados definida chamada '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)
É possível construir uma referência direta a uma coleção nomeada.
from semantic_kernel.connectors.sql_server import SqlServerCollection
vector_collection = SqlServerCollection("dbo.table_name", DataModel)
Nota: O nome da coleção pode ser especificado como uma cadeia de caracteres simples (por exemplo
table_name) ou como um nome totalmente qualificado (por exemplo).dbo.table_nameEste último é recomendado para evitar ambiguidade, se nenhum esquema for especificado, o esquema padrão (dbo) será usado.
Quando você tem requisitos específicos para a conexão, você também pode passar um pyodbc.Connection objeto para o SqlServerStore construtor. Isso permite que você use uma cadeia de conexão personalizada ou outras opções de conexão:
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)
Você terá que se certificar de fechar a conexão sozinho, pois a loja ou coleção não fará isso por você.
Criar consultas personalizadas
O conector do SQL Server é limitado ao tipo de índice Plano.
O ensure_collection_exists método no SqlServerCollection permite que você passe uma única ou várias consultas personalizadas para criar a coleção. As consultas são executadas na ordem em que são passadas, nenhum resultado é retornado.
Se isso for feito, não há garantia de que os outros métodos ainda funcionem conforme o esperado. O conector não está ciente das consultas personalizadas e não as validará.
Se os DataModel tiverem id, content e vector como campos, então, por exemplo, pode-se criar a tabela da seguinte forma para também criar um índice no campo de conteúdo:
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);"]
)
Brevemente
Mais informações em breve.