Megosztás a következőn keresztül:


Az SQL Server Vector Store-összekötő használata (előzetes verzió)

Figyelmeztetés

Az SQL Server Vector Store funkciója előzetes verzióban érhető el, és a kompatibilitástörő módosításokat igénylő fejlesztések még korlátozott körülmények között előfordulhatnak a kiadás előtt.

Figyelmeztetés

A Szemantic Kernel Vector Store funkció előzetes verzióban érhető el, és a kompatibilitástörő módosításokat igénylő fejlesztések még korlátozott körülmények között előfordulhatnak a kiadás előtt.

Figyelmeztetés

A Szemantic Kernel Vector Store funkció előzetes verzióban érhető el, és a kompatibilitástörő módosításokat igénylő fejlesztések még korlátozott körülmények között előfordulhatnak a kiadás előtt.

Áttekintés

Az SQL Server Vector Store-összekötő az SQL Serveren lévő adatok elérésére és kezelésére használható. Az összekötő a következő jellemzőkkel rendelkezik.

Funkcióterület Támogatás
A gyűjtemény a következőkre vonatkozik: SQL Server-tábla
Támogatott kulcstulajdonság-típusok
  • Int
  • hosszú
  • szál/zsinór
  • Guid
  • Dátum/idő
  • byte[]
Támogatott adattulajdonság-típusok
  • Int
  • rövid
  • bájt
  • hosszú
  • Guid
  • szál/zsinór
  • Bool
  • úsztat
  • dupla
  • decimális
  • byte[]
  • Dátum/idő
  • TimeOnly
Támogatott vektortulajdonság-típusok
  • ReadOnlyMemory
  • Lebegő beágyazás<>
  • lebegőpontos[]
Támogatott indextípusok
  • Lakás
Támogatott távolsági függvények
  • CosinusTávolság
  • Negatív Skalárszorzat Hasonlóság
  • EuclideanDistance
Több vektort támogat egy rekordban Igen
Támogatott az indexeltség? Igen
Támogatott aFullTextIndexed? Nem
A StorageName támogatva van? Igen
"Támogatott a HybridSearch?" Nem

Kezdő lépések

Adja hozzá az SQL Sever Vector Store-összekötő NuGet-csomagját a projekthez.

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

A vektortárat hozzáadhatja a függőséginjektálási tárolóhoz a IServiceCollection Semantic Kernel által biztosított kiterjesztési módszerekkel.

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

Közvetlenül létrehozhat egy Sql Server Vector Store-példányt.

using Microsoft.SemanticKernel.Connectors.SqlServer;

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

Egy nevesített gyűjteményre mutató közvetlen hivatkozás is létrehozható.

using Microsoft.SemanticKernel.Connectors.SqlServer;

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

Adatleképezés

Az SQL Server Vector Store-összekötő alapértelmezett leképezőt biztosít az adatmodellből a tárolóba való leképezéskor. Ez a leképező az adatmodell tulajdonságainak listáját közvetlenül az SQL Server oszlopaira konvertálja.

Tulajdonságnév módosítása

Megadhat felülbírálási tulajdonságneveket a tárban, amelyek eltérnek az adatmodell tulajdonságnevétől. A tulajdonságnév felülírása az StorageName beállítással történik az adatmodell tulajdonságainak attribútumai vagy a rekorddefiníció által.

Íme egy példa egy olyan adatmodellre, amelynek attribútumaira a StorageName van megadva, és amely így jelenik meg egy SQL Server-parancsban.

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

Áttekintés

Az SQL Server Vector Store-összekötő a Szemantic Kernel által biztosított Vector Store-implementáció, amely az Azure SQL-t használja vektortárolóként. Ha a helyszíni SQL Server támogatja a vektorokat, azzal is használható.

Az összekötő a következő jellemzőkkel rendelkezik.

Funkcióterület Támogatás
A gyűjtemény a következőkre vonatkozik: Táblázatos szótár
Támogatott kulcstulajdonság-típusok
  • Str
  • Int
Támogatott adattulajdonság-típusok Bármilyen típus
Támogatott vektortulajdonság-típusok
  • lista[float]
  • numpy tömb
Támogatott indextípusok
  • Lakás
Támogatott távolsági függvények
  • Koszinusz-távolság
  • Skalárszorzat Hasonlóság
  • Euklideszi távolság
Több vektort támogat egy rekordban Igen
Támogatott a szűrhetőség? Igen
Támogatva van a teljes szöveges kereshetőség? Nem

Kezdő lépések

Adja hozzá a szemantikus kernelcsomagot a projekthez.

pip install semantic-kernel[sql]

Az SQL Server-összekötő a pyodbc-csomagot használja az SQL Serverhez való csatlakozáshoz. Az extra telepíti a csomagot, de az SQL Server ODBC-illesztőjét külön kell telepítenie, ez platformonként eltér, a részletekért tekintse meg az Azure SQL dokumentációját .

Ahhoz, hogy a tároló és a gyűjtemény működjön, kapcsolati sztringre van szüksége, ezt átadhatja a konstruktornak, vagy beállíthatja a környezeti változóban SQL_SERVER_CONNECTION_STRING. A vektorok megfelelő kezelése érdekében a LongAsMax=yes beállítás hozzáadódik, ha nem található. Használhatja a felhasználónevet/jelszót vagy az integrált biztonságot; az utóbbi esetben pedig a DefaultAzureCredential kerül használatra.

Az alábbi kódrészletekben feltételezzük, hogy rendelkezik "DataModel" nevű adatmodell-osztálysal.

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)

Egy nevesített gyűjteményre mutató közvetlen hivatkozás is létrehozható.

from semantic_kernel.connectors.sql_server import SqlServerCollection

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

Megjegyzés: A gyűjtemény neve megadható egyszerű sztringként (például table_name) vagy teljes névként (pl. dbo.table_name). Az utóbbi használata javasolt a kétértelműség elkerülése érdekében, ha nincs megadva séma, az alapértelmezett séma (dbo) lesz használva.

Ha a kapcsolatra vonatkozó konkrét követelményekkel rendelkezik, egy objektumot pyodbc.Connection is átadhat a SqlServerStore konstruktornak. Ez lehetővé teszi egyéni kapcsolati sztring vagy más kapcsolati beállítások használatát:

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)

Győződjön meg arról, hogy saját maga zárja be a kapcsolatot, mivel az áruház vagy a gyűjtemény ezt nem teszi meg Önnek.

Egyéni lekérdezések létrehozása

Az SQL Server-összekötő a lapos index típusára korlátozódik.

A ensure_collection_exists metódus SqlServerCollection lehetővé teszi, hogy egyet vagy több egyéni lekérdezést adjon meg a gyűjtemény létrehozásához. A lekérdezések végrehajtása az átadásuk sorrendjében történik, eredmény nem lesz visszaadva.

Ha ez megtörtént, nincs garancia arra, hogy a többi módszer továbbra is a várt módon működik. Az összekötő nem ismeri az egyéni lekérdezéseket, és nem érvényesíti őket.

Ha vannak DataModelid, contentés vector mezők, akkor például létrehozhatja a táblázatot így, hogy a tartalommezőn is létrehozhasson egy indexet:

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

Hamarosan

Hamarosan további információk is érkeznek.