Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Warnung
Die Sql Server-Vektorspeicherfunktion befindet sich in der Vorschau, und Verbesserungen, die einschneidende Änderungen erfordern, können noch unter begrenzten Umständen vor der Veröffentlichung auftreten.
Warnung
Die Funktionalität des Semantic Kernel Vector Store befindet sich in der Vorschau, und Verbesserungen, die einschneidende Änderungen erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung auftreten.
Warnung
Die Funktionalität des Semantic Kernel Vector Store befindet sich in der Vorschau, und Verbesserungen, die einschneidende Änderungen erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung auftreten.
Überblick
Der SQL Server-Vektorspeicherconnector kann verwendet werden, um auf Daten in SQL Server zuzugreifen und sie zu verwalten. Der Verbinder weist die folgenden Merkmale auf.
| Featurebereich | Unterstützung |
|---|---|
| Sammlung wird zugeordnet zu | SQL Server-Tabelle |
| Unterstützte Typen von Schlüsseleigenschaften |
|
| Unterstützte Daten-Eigenschaftstypen |
|
| Unterstützte Typen von Vektoreigenschaften |
|
| Unterstützte Indextypen |
|
| Unterstützte Entfernungsfunktionen |
|
| Unterstützt mehrere Vektoren in einem Datensatz | Ja |
| Wird Indized unterstützt? | Ja |
| WirdFullTextIndexed unterstützt? | Nein |
| Wird StorageName unterstützt? | Ja |
| HybridSearch wird unterstützt? | Nein |
Erste Schritte
Fügen Sie das NuGet-Paket für den SQL Server Vektorspeicher-Connector zu Ihrem Projekt hinzu.
dotnet add package Microsoft.SemanticKernel.Connectors.SqlServer --prerelease
Sie können den Vektorspeicher mithilfe von vom semantischen Kernel bereitgestellten Erweiterungsmethoden zum Dependency-Injection-Container IServiceCollection hinzufügen.
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>")
Sie können eine Sql Server Vector Store-Instanz direkt erstellen.
using Microsoft.SemanticKernel.Connectors.SqlServer;
var vectorStore = new SqlServerVectorStore("<connectionstring>");
Es ist möglich, einen direkten Verweis auf eine benannte Auflistung zu erstellen.
using Microsoft.SemanticKernel.Connectors.SqlServer;
var collection = new SqlServerCollection<string, Hotel>("<connectionstring>", "skhotels");
Datenzuordnung
Der SQL Server-Vektorspeicher-Connector stellt beim Zuordnen des Datenmodells zum Speicher einen Standard-Mapper bereit. Dieser Mapper führt eine direkte Konvertierung der Liste der Eigenschaften im Datenmodell in die Spalten in SQL Server durch.
Eigenschaftsname überschreiben
Sie können überschreibende Eigenschaftsnamen bereitstellen, die in einem Speicher verwendet werden, der sich von den Eigenschaftsnamen im Datenmodell unterscheidet.
Die Überschreibung des Eigenschaftsnamens erfolgt durch das Festlegen der Option „StorageName“ über die Datenmodell-Eigenschaftsattribute oder die Datensatzdefinition.
Nachfolgend finden Sie ein Beispiel für ein Datenmodell, bei dem StorageName auf die Attribute gesetzt ist und wie das in einem SQL Server-Befehl dargestellt wird.
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])
);
Überblick
Der SQL Server-Vektorspeicher-Connector ist eine Vektorspeicherimplementierung, die vom semantischen Kernel bereitgestellt wird, der Azure SQL als Vektorspeicher verwendet. Sobald SQL Server lokal Vektoren unterstützt, kann er auch damit verwendet werden.
Der Verbinder weist die folgenden Merkmale auf.
| Featurebereich | Unterstützung |
|---|---|
| Sammlung wird zugeordnet zu | Tabellenwörterbuch |
| Unterstützte Typen von Schlüsseleigenschaften |
|
| Unterstützte Daten-Eigenschaftstypen | Beliebiger Typ |
| Unterstützte Typen von Vektoreigenschaften |
|
| Unterstützte Indextypen |
|
| Unterstützte Entfernungsfunktionen |
|
| Unterstützt mehrere Vektoren in einem Datensatz | Ja |
| Wird is_filterable unterstützt? | Ja |
| Wird is_full_text_searchable unterstützt? | Nein |
Erste Schritte
Fügen Sie Ihrem Projekt das Semantic Kernel-Paket hinzu.
pip install semantic-kernel[sql]
Der SQL Server-Connector verwendet das Pyodbc-Paket , um eine Verbindung mit SQL Server herzustellen. Das Extra wird das Paket installieren, aber Sie müssen den ODBC-Treiber für SQL Server separat installieren. Dies unterscheidet sich je nach Plattform. Siehe die Azure SQL-Dokumentation für Details.
Damit der Speicher und die Sammlung funktionieren, benötigt sie eine Verbindungszeichenfolge, die an den Konstruktor übergeben oder in der Umgebungsvariable SQL_SERVER_CONNECTION_STRINGfestgelegt werden kann. Um Vektoren ordnungsgemäß zu behandeln, wird die LongAsMax=yes Option hinzugefügt, wenn sie nicht gefunden wird. Es kann auch sowohl Benutzername/Kennwort als auch integrierte Sicherheit verwenden, für letzteres wird die DefaultAzureCredential Verwendet.
In den folgenden Codeausschnitten wird davon ausgegangen, dass Sie eine Datenmodellklasse mit dem Namen "DataModel" definiert haben.
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 ist möglich, einen direkten Verweis auf eine benannte Auflistung zu erstellen.
from semantic_kernel.connectors.sql_server import SqlServerCollection
vector_collection = SqlServerCollection("dbo.table_name", DataModel)
Hinweis: Der Sammlungsname kann als einfache Zeichenfolge (z. B. ) oder als vollqualifizierter Name (z. B.
table_namedbo.table_name) angegeben werden. Letzteres wird empfohlen, Mehrdeutigkeit zu vermeiden, wenn kein Schema angegeben wird, wird das Standardschema (dbo) verwendet.
Wenn Sie bestimmte Anforderungen für die Verbindung haben, können Sie auch ein pyodbc.Connection Objekt an den SqlServerStore Konstruktor übergeben. Auf diese Weise können Sie eine benutzerdefinierte Verbindungszeichenfolge oder andere Verbindungsoptionen verwenden:
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)
Sie müssen sicherstellen, dass Sie die Verbindung selbst schließen, da der Store oder die Sammlung das nicht für Sie übernimmt.
Benutzerdefinierte Erstellen von Abfragen
Der SQL Server-Connector ist auf den Flachindextyp beschränkt.
Mit der Methode ensure_collection_exists können Sie in SqlServerCollection eine oder mehrere benutzerdefinierte Abfragen übergeben, um die Sammlung zu erstellen. Die Abfragen werden in der Reihenfolge ausgeführt, in der sie übergeben werden, es werden keine Ergebnisse zurückgegeben.
Wenn dies geschieht, gibt es keine Garantie dafür, dass die anderen Methoden wie erwartet funktionieren. Der Connector kennt die benutzerdefinierten Abfragen nicht und überprüft sie nicht.
Wenn das DataModel die Felder id, content und vector hat, können Sie beispielsweise die Tabelle so erstellen, um auch einen Index für das Inhaltsfeld zu erstellen:
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);"]
)
In Kürze verfügbar
Weitere Informationen werden in Kürze verfügbar sein.