共用方式為


產生語意核心向量存放區連接器的內嵌

警告

語意核心向量存放區功能處於預覽狀態,且需要重大變更的改善可能仍會在發行前有限的情況下發生。

語意核心支援使用現裝的許多熱門 AI 服務來產生內嵌。

這些服務可以直接建構或新增至相依性插入容器,並從該處解析。

建構內嵌產生器

您可以直接建構 Semantic Kernel 所提供的文字內嵌服務實例。 它們全都實作 ITextEmbeddingGenerationService 介面。

// Constructing an Azure Open AI embedding generation service directly.
ITextEmbeddingGenerationService azureOpenAITES = new AzureOpenAITextEmbeddingGenerationService(
    "text-embedding-ada-002",
    "https://{myservice}.openai.azure.com/",
    "apikey");

// Constructing an Olama embedding generation service directly.
ITextEmbeddingGenerationService olamaTES = new OllamaTextEmbeddingGenerationService(
    "mxbai-embed-large",
    new Uri("http://localhost:11434"));

您也可以使用協助程式向相依性插入容器註冊它們。

// Registering Google AI embedding generation service with a service collection.
var services = new ServiceCollection();
services.AddGoogleAIEmbeddingGeneration("text-embedding-004", "apiKey");

// Registering Mistral AI embedding generation service with the dependency injection container on
// the kernel builder.
var kernelBuilder = Kernel
    .CreateBuilder()
    .AddMistralTextEmbeddingGeneration("mistral-embed", "apiKey");

產生內嵌

若要使用您所建立的 ITextEmbeddingGenerationService ,只要在上面呼叫 GenerateEmbeddingAsync 方法即可。

以下是上傳記錄時產生內嵌的範例。

public async Task GenerateEmbeddingsAndUpsertAsync(
    ITextEmbeddingGenerationService textEmbeddingGenerationService,
    IVectorStoreRecordCollection<ulong, Hotel> collection)
{
    // Upsert a record.
    string descriptionText = "A place where everyone can be happy.";
    ulong hotelId = 1;

    // Generate the embedding.
    ReadOnlyMemory<float> embedding =
        await textEmbeddingGenerationService.GenerateEmbeddingAsync(descriptionText);

    // Create a record and upsert with the already generated embedding.
    await collection.UpsertAsync(new Hotel
    {
        HotelId = hotelId,
        HotelName = "Hotel Happy",
        Description = descriptionText,
        DescriptionEmbedding = embedding,
        Tags = new[] { "luxury", "pool" }
    });
}

以下是在搜尋時產生內嵌的範例。

public async Task GenerateEmbeddingsAndSearchAsync(
    ITextEmbeddingGenerationService textEmbeddingGenerationService,
    IVectorStoreRecordCollection<ulong, Hotel> collection)
{
    // Upsert a record.
    string descriptionText = "Find me a hotel with happiness in mind.";

    // Generate the embedding.
    ReadOnlyMemory<float> searchEmbedding =
        await textEmbeddingGenerationService.GenerateEmbeddingAsync(descriptionText);

    // Search using the already generated embedding.
    List<VectorSearchResult<Hotel>> searchResult = await collection.VectorizedSearchAsync(searchEmbedding).ToListAsync();

    // Print the first search result.
    Console.WriteLine("Score for first result: " + searchResult.FirstOrDefault()?.Score);
    Console.WriteLine("Hotel description for first result: " + searchResult.FirstOrDefault()?.Record.Description);
}

內嵌維度

向量資料庫通常需要您在建立集合時指定每個向量擁有的維度數目。 不同的內嵌模型通常支持產生具有不同維度大小的向量。 例如,Open AI text-embedding-ada-002 會產生具有 1536 個維度的向量。 有些模型也允許開發人員選擇輸出向量中想要的維度數目,例如 Google text-embedding-004 預設會產生具有 768 維度的向量,但可讓開發人員選擇介於 1 到 768 之間的任意數目維度。

請務必確保內嵌模型所產生的向量具有與資料庫中相符向量相同的維度數目。

如果使用語意核心向量存放區抽象概念建立集合,您必須透過註釋或記錄定義指定每個向量屬性所需的維度數目。 以下是將維度數目設定為1536的範例。

[VectorStoreRecordVector(Dimensions: 1536)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
new VectorStoreRecordVectorProperty("DescriptionEmbedding", typeof(float)) { Dimensions = 1536 }

提示

如需如何標註數據模型的詳細資訊,請參閱 定義您的數據模型

提示

如需建立記錄定義的詳細資訊,請參閱 使用記錄定義來定義架構。

即將推出

更多信息即將推出。

即將推出

更多信息即將推出。