Aracılığıyla paylaş


SQL Server Vektör Deposu bağlayıcısını kullanma (Önizleme)

Uyarı

Sql Server Vektör Deposu işlevselliği önizleme aşamasındadır ve uyumluluğu bozabilecek değişiklikler gerektiren iyileştirmeler, sürümden önce sınırlı durumlarda yine de gerçekleşebilir.

Uyarı

Semantik Çekirdek Vektör Deposu işlevselliği önizleme aşamasındadır ve köklü değişiklikler gerektiren iyileştirmeler, sürümden önce sınırlı durumlarda yine de gerçekleşebilir.

Uyarı

Semantik Çekirdek Vektör Deposu işlevselliği önizleme aşamasındadır ve köklü değişiklikler gerektiren iyileştirmeler, sürümden önce sınırlı durumlarda yine de gerçekleşebilir.

Genel Bakış

SQL Server Vektör Deposu bağlayıcısı, SQL Server'daki verilere erişmek ve verileri yönetmek için kullanılabilir. Bağlayıcı aşağıdaki özelliklere sahiptir.

Özellik Alanı Destek
Koleksiyon şu öğeleri haritalıyor SQL Server tablosu
Desteklenen anahtar özellik türleri
  • Int
  • uzun
  • String
  • Kılavuz
  • Tarih ve Saat
  • byte[]
Desteklenen veri özelliği türleri
  • Int
  • kısa
  • bayt
  • uzun
  • Kılavuz
  • String
  • Boole
  • yüzmek
  • iki katı
  • ondalık
  • byte[]
  • Tarih ve Saat
  • TimeOnly
Desteklenen vektör özelliği türleri
  • Sadece Okunabilir Bellek<float>
  • Float ekleme<>
  • float[]
Desteklenen dizin türleri
  • Daire
Desteklenen uzaklık işlevleri
  • CosineDistance
  • Negatif Nokta Çarpımı Benzerliği
  • Öklid uzaklığı
Bir kayıtta birden çok vektör destekler Evet
Indexed destekleniyor mu? Evet
IsFullTextIndexed destekleniyor mu? Hayı
StorageName destekleniyor mu? Evet
HybridSearch destekleniyor mu? Hayı

Başlangıç Yapmak

PROJEnize SQL Sever Vektör Deposu bağlayıcısı NuGet paketini ekleyin.

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

Anlam Çekirdeği tarafından sağlanan uzantı yöntemlerini kullanarak vektör depoyu IServiceCollection bağımlılık ekleme kapsayıcısına ekleyebilirsiniz.

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>")

Doğrudan bir Sql Server Vektör Deposu örneği oluşturabilirsiniz.

using Microsoft.SemanticKernel.Connectors.SqlServer;

var vectorStore = new SqlServerVectorStore("<connectionstring>");

Adlandırılmış bir koleksiyona doğrudan başvuru oluşturmak mümkündür.

using Microsoft.SemanticKernel.Connectors.SqlServer;

var collection = new SqlServerCollection<string, Hotel>("<connectionstring>", "skhotels");

Veri eşleme

SQL Server Vektör Deposu bağlayıcısı, veri modelinden depolamaya eşlerken varsayılan bir eşleyici sağlar. Bu eşleyici, veri modelindeki özellik listesini SQL Server'daki sütunlara doğrudan dönüştürme işlemi yapar.

Özellik adı geçersiz kılma

Farklı bir depolama alanında kullanmak için, veri modelindeki özellik adlarından farklı geçersiz kılma özellik adları sağlayabilirsiniz. Özellik adının geçersiz kılınması, StorageName seçeneğinin veri modeli özellik öznitelikleri veya kayıt tanımını kullanarak ayarlanması ile yapılır.

Öznitelikleri üzerinde ayarlanmış bir veri modeli StorageName örneği ve bunun SQL Server komutunda nasıl gösterileceği aşağıda verilmiştir.

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

Genel Bakış

SQL Server Vektör Deposu bağlayıcısı, Vektör Deposu olarak Azure SQL kullanan Anlam Çekirdeği tarafından sağlanan bir Vektör Deposu uygulamasıdır. SQL Server yerel sunucularda vektörleri desteklediğinde bununla da kullanılabilir.

Bağlayıcı aşağıdaki özelliklere sahiptir.

Özellik Alanı Destek
Koleksiyon şu öğeleri haritalıyor Tablo biçiminde sözlük
Desteklenen anahtar özellik türleri
  • str
  • Int
Desteklenen veri özelliği türleri Herhangi bir tür
Desteklenen vektör özelliği türleri
  • liste[float]
  • numpy dizisi
Desteklenen dizin türleri
  • Daire
Desteklenen uzaklık işlevleri
  • Kosinüs Uzaklığı
  • NoktaLı Ürün Benzerliği
  • Öklid Uzaklığı
Bir kayıtta birden çok vektör destekler Evet
is_filterable özelliği destekleniyor mu? Evet
Tam metin araması yapılabiliyor mu? Hayı

Başlangıç Yapmak

Semantik Çekirdek paketini projenize ekleyin.

pip install semantic-kernel[sql]

SQL Server bağlayıcısı, SQL Server'a bağlanmak için pyodbc paketini kullanır. Ek paket yüklenir, ancak SQL Server için ODBC sürücüsünü ayrı olarak yüklemeniz gerekir, bu platforma göre farklılık gösterir, ayrıntılar için Azure SQL Belgeleri'ne bakın .

Deponun ve koleksiyonun çalışması için bir bağlantı dizesi gerekir; bu oluşturucuya geçirilebilir veya ortam değişkeninde SQL_SERVER_CONNECTION_STRINGayarlanabilir. Vektörlerle düzgün şekilde başa çıkmak için, LongAsMax=yes bulunamazsa seçenek eklenir. Ayrıca hem kullanıcı adı/parola hem de tümleşik güvenlik kullanabilir, ikincisi DefaultAzureCredential için kullanılır.

Aşağıdaki kod parçacıklarında, 'DataModel' adlı bir veri modeli sınıfı tanımladığınız varsayılır.

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)

Adlandırılmış bir koleksiyona doğrudan başvuru oluşturmak mümkündür.

from semantic_kernel.connectors.sql_server import SqlServerCollection

vector_collection = SqlServerCollection("dbo.table_name", DataModel)

Not: Koleksiyon adı basit bir dize (örn. table_name) veya tam ad (örneğin dbo.table_name) olarak belirtilebilir. İkincinin belirsizlikten kaçınması önerilir, şema belirtilmezse varsayılan şema (dbo) kullanılır.

Bağlantı için belirli gereksinimleriniz olduğunda, bir pyodbc.Connection nesneyi SqlServerStore oluşturucuya geçirebilirsiniz. Bu, özel bir bağlantı dizesi veya diğer bağlantı seçeneklerini kullanmanıza olanak tanır:

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)

Mağaza veya koleksiyon sizin için bunu yapmayacağı için bağlantıyı kendiniz kapatmanız gerekir.

Özel sorgular oluşturma

SQL Server bağlayıcısı Düz dizin türüyle sınırlıdır.

ensure_collection_exists üzerindeki SqlServerCollection yöntemi, koleksiyonu oluşturmak için tek veya birden çok özel sorgu geçirmenizi sağlar. Sorgular verildikleri sırayla yürütülür, sonuç döndürülmez.

Bu yapılırsa, diğer yöntemlerin beklendiği gibi çalışmaya devam ettiğinin garantisi yoktur. Bağlayıcı özel sorguların farkında değildir ve bunları doğrulamaz.

DataModel, id, content ve vector alanları varsa, örneğin içerik alanında da bir dizin oluşturmak için tabloyu aşağıdaki gibi oluşturabilirsiniz:

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);"]
    )

Çok yakında

Daha fazla bilgi yakında sunulacaktır.