Bagikan melalui


Pembuatan Penyematan Teks di Kernel Semantik

Dengan generasi penyematan teks, Anda dapat menggunakan model AI untuk menghasilkan vektor (atau penyematan). Vektor ini mengodekan makna semantik dari teks dengan cara sehingga persamaan matematika dapat digunakan pada dua vektor untuk membandingkan kesamaan teks asli. Ini berguna untuk skenario seperti Retrieval Augmented Generation (RAG), di mana kita ingin mencari teks dalam database informasi yang terkait dengan kueri pengguna. Informasi apa pun yang cocok kemudian dapat diberikan sebagai input ke Penyelesaian Obrolan, sehingga Model AI memiliki lebih banyak konteks saat menjawab kueri pengguna.

Saat memilih model penyematan, Anda harus mempertimbangkan hal berikut:

  • Berapa ukuran vektor yang dihasilkan oleh model, dan apakah dapat dikonfigurasi, karena ini akan memengaruhi biaya penyimpanan vektor Anda.
  • Jenis elemen apa yang dikandung vektor yang dihasilkan, misalnya float32, float16, dll, karena ini akan memengaruhi biaya penyimpanan vektor Anda.
  • Seberapa cepat ia menghasilkan vektor?
  • Berapa biaya produksi?

Tips

Untuk informasi selengkapnya tentang menyimpan dan mencari vektor, lihat Apa itu konektor Semantic Kernel Vector Store?

Tips

Untuk informasi selengkapnya tentang menggunakan RAG dengan penyimpanan vektor di Kernel Semantik, lihat Cara menggunakan Penyimpanan Vektor dengan Pencarian Teks Kernel Semantik dan Apa itu plugin Pencarian Teks Kernel Semantik?

Menyiapkan lingkungan lokal Anda

Beberapa Layanan AI dapat dihosting secara lokal dan mungkin memerlukan beberapa penyiapan. Di bawah ini adalah instruksi bagi mereka yang mendukung ini.

Tidak ada penyiapan lokal.

Menginstal paket yang diperlukan

Sebelum menambahkan pembuatan embedding ke kernel Anda, Anda harus menginstal paket yang diperlukan. Di bawah ini adalah paket yang perlu Anda instal untuk setiap penyedia layanan AI.

dotnet add package Microsoft.SemanticKernel.Connectors.AzureOpenAI

Membuat layanan pembuatan penyematan teks

Setelah menginstal paket yang diperlukan, Anda dapat membuat layanan pembuatan penyematan teks. Di bawah ini adalah beberapa cara Anda dapat membuat teks untuk layanan pembuatan embedding menggunakan Semantic Kernel.

Menambahkan langsung ke kernel

Untuk menambahkan layanan pembuatan penyematan teks, Anda dapat menggunakan kode berikut untuk menambahkannya ke penyedia layanan dalam kernel.

Penting

Konektor pembuatan embedding Azure OpenAI pada saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0010.

using Microsoft.SemanticKernel;

#pragma warning disable SKEXP0010
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddAzureOpenAITextEmbeddingGeneration(
    deploymentName: "NAME_OF_YOUR_DEPLOYMENT", // Name of deployment, e.g. "text-embedding-ada-002".
    endpoint: "YOUR_AZURE_ENDPOINT",           // Name of Azure OpenAI service endpoint, e.g. https://myaiservice.openai.azure.com.
    apiKey: "YOUR_API_KEY",
    modelId: "MODEL_ID",          // Optional name of the underlying model if the deployment name doesn't match the model name, e.g. text-embedding-ada-002.
    serviceId: "YOUR_SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel.
    httpClient: new HttpClient(), // Optional; if not provided, the HttpClient from the kernel will be used.
    dimensions: 1536              // Optional number of dimensions to generate embeddings with.
);
Kernel kernel = kernelBuilder.Build();

Menggunakan penyuntikan dependensi

Jika Anda menggunakan injeksi dependensi, Anda mungkin ingin menambahkan layanan pembuatan penyematan teks langsung ke penyedia layanan. Ini berguna jika Anda ingin membuat singleton dari layanan pembangkitan embedding Anda dan menggunakannya kembali pada kernel sementara.

Penting

Konektor embeddasi Azure OpenAI yang bersifat eksperimental saat ini sedang dalam tahap pengujian. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0010.

using Microsoft.SemanticKernel;

var builder = Host.CreateApplicationBuilder(args);

#pragma warning disable SKEXP0010
builder.Services.AddAzureOpenAITextEmbeddingGeneration(
    deploymentName: "NAME_OF_YOUR_DEPLOYMENT", // Name of deployment, e.g. "text-embedding-ada-002".
    endpoint: "YOUR_AZURE_ENDPOINT",           // Name of Azure OpenAI service endpoint, e.g. https://myaiservice.openai.azure.com.
    apiKey: "YOUR_API_KEY",
    modelId: "MODEL_ID",          // Optional name of the underlying model if the deployment name doesn't match the model name, e.g. text-embedding-ada-002.
    serviceId: "YOUR_SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel.
    dimensions: 1536              // Optional number of dimensions to generate embeddings with.
);

builder.Services.AddTransient((serviceProvider)=> {
    return new Kernel(serviceProvider);
});

Membuat instans mandiri

Terakhir, Anda dapat membuat instans layanan secara langsung sehingga Anda dapat menambahkannya ke kernel nanti atau menggunakannya langsung dalam kode Anda tanpa pernah menyuntikkannya ke kernel atau di penyedia layanan.

Penting

Konektor pembuat embedding Azure OpenAI pada saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0010.

using Microsoft.SemanticKernel.Connectors.AzureOpenAI;

#pragma warning disable SKEXP0010
AzureOpenAITextEmbeddingGenerationService textEmbeddingGenerationService = new (
    deploymentName: "NAME_OF_YOUR_DEPLOYMENT", // Name of deployment, e.g. "text-embedding-ada-002".
    endpoint: "YOUR_AZURE_ENDPOINT",           // Name of Azure OpenAI service endpoint, e.g. https://myaiservice.openai.azure.com.
    apiKey: "YOUR_API_KEY",
    modelId: "MODEL_ID",          // Optional name of the underlying model if the deployment name doesn't match the model name, e.g. text-embedding-ada-002.
    httpClient: new HttpClient(), // Optional; if not provided, the HttpClient from the kernel will be used.
    dimensions: 1536              // Optional number of dimensions to generate embeddings with.
);

Menggunakan layanan pembuatan penyematan teks

Semua layanan pembuatan penyematan teks menerapkan ITextEmbeddingGenerationService yang memiliki satu metode GenerateEmbeddingsAsync yang dapat menghasilkan vektor ReadOnlyMemory<float> dari nilai string yang disediakan. Metode ekstensi GenerateEmbeddingAsync juga tersedia untuk versi nilai tunggal dari tindakan yang sama.

Berikut adalah contoh cara memanggil layanan dengan beberapa nilai.

IList<ReadOnlyMemory<float>> embeddings =
    await textEmbeddingGenerationService.GenerateEmbeddingsAsync(
    [
        "sample text 1",
        "sample text 2"
    ]);

Berikut adalah contoh cara memanggil layanan dengan satu nilai.

using Microsoft.SemanticKernel.Embeddings;

ReadOnlyMemory<float> embedding =
    await textEmbeddingGenerationService.GenerateEmbeddingAsync("sample text");

Segera datang

Informasi lebih lanjut akan segera hadir.

Segera datang

Informasi lebih lanjut akan segera hadir.