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?
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.
Tidak ada penyiapan lokal.
Tidak ada penyiapan lokal.
Tidak ada penyiapan lokal.
Tidak ada penyiapan lokal.
Untuk menjalankan Ollama secara lokal menggunakan docker, gunakan perintah berikut untuk memulai kontainer menggunakan CPU.
docker run -d -v "c:\temp\ollama:/root/.ollama" -p 11434:11434 --name ollama ollama/ollama
Untuk menjalankan Ollama secara lokal menggunakan docker, gunakan perintah berikut untuk memulai kontainer menggunakan GPU.
docker run -d --gpus=all -v "c:\temp\ollama:/root/.ollama" -p 11434:11434 --name ollama ollama/ollama
Setelah kontainer dimulai, luncurkan jendela Terminal untuk kontainer docker, misalnya jika menggunakan desktop docker, pilih Open in Terminal
dari tindakan.
Dari terminal ini unduh model yang diperlukan, misalnya di sini kita mengunduh model penyematan mxbai-embed-large.
ollama pull mxbai-embed-large
Kloning repositori yang berisi model ONNX yang ingin Anda gunakan.
git clone https://huggingface.co/TaylorAI/bge-micro-v2
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
dotnet add package Microsoft.SemanticKernel.Connectors.OpenAI
dotnet add package Microsoft.SemanticKernel.Connectors.MistralAI --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.Google --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.HuggingFace --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.Ollama --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.Onnx --prerelease
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();
Penting
Konektor pembentukan embedding OpenAI saat ini dalam tahap eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0010
.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0010
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAITextEmbeddingGeneration(
modelId: "MODEL_ID", // Name of the embedding model, e.g. "text-embedding-ada-002".
apiKey: "YOUR_API_KEY",
orgId: "YOUR_ORG_ID", // Optional organization id.
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();
Penting
Konektor pembuatan embedding Mistral saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddMistralTextEmbeddingGeneration(
modelId: "NAME_OF_MODEL", // Name of the embedding model, e.g. "mistral-embed".
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional uri endpoint including the port where MistralAI server is hosted. Default is https://api.mistral.ai.
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Kernel kernel = kernelBuilder.Build();
Penting
Konektor penyusunan embedding Google saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.Google;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddGoogleAIEmbeddingGeneration(
modelId: "NAME_OF_MODEL", // Name of the embedding model, e.g. "models/text-embedding-004".
apiKey: "API_KEY",
apiVersion: GoogleAIVersion.V1, // Optional
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Kernel kernel = kernelBuilder.Build();
Penting
Konektor generasi embedding Hugging Face saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddHuggingFaceTextEmbeddingGeneration(
model: "NAME_OF_MODEL", // Name of the embedding model.
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Kernel kernel = kernelBuilder.Build();
Penting
Saat ini, konektor pembangkitan embedding Ollama bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOllamaTextEmbeddingGeneration(
modelId: "NAME_OF_MODEL", // E.g. "mxbai-embed-large" if mxbai-embed-large was downloaded as described above.
endpoint: new Uri("YOUR_ENDPOINT"), // E.g. "http://localhost:11434" if Ollama has been started in docker as described above.
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
Kernel kernel = kernelBuilder.Build();
Penting
Konektor generasi embedding ONNX saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddBertOnnxTextEmbeddingGeneration(
onnxModelPath: "PATH_ON_DISK", // Path to the model on disk e.g. C:\Repos\huggingface\microsoft\TaylorAI\bge-micro-v2\onnx\model.onnx
vocabPath: "VOCABULARY_PATH_ON_DISK",// Path to the vocabulary file on disk, e.g. C:\Repos\huggingface\TailorAI\bge-micro-v2\vocab.txt
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
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);
});
Penting
Konektor pembuatan penyematan OpenAI saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0010
.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0010
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddOpenAITextEmbeddingGeneration(
modelId: "MODEL_ID", // Name of the embedding model, e.g. "text-embedding-ada-002".
apiKey: "YOUR_API_KEY",
orgId: "YOUR_ORG_ID", // Optional organization id.
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);
});
Penting
Konektor penyusunan embedding Mistral saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddMistralTextEmbeddingGeneration(
modelId: "NAME_OF_MODEL", // Name of the embedding model, e.g. "mistral-embed".
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional uri endpoint including the port where MistralAI server is hosted. Default is https://api.mistral.ai.
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Penting
Konektor pembuatan penyematan Google saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.Google;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddGoogleAIEmbeddingGeneration(
modelId: "NAME_OF_MODEL", // Name of the embedding model, e.g. "models/text-embedding-004".
apiKey: "API_KEY",
apiVersion: GoogleAIVersion.V1, // Optional
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Penting
Konektor pembuatan embedding Hugging Face saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddHuggingFaceTextEmbeddingGeneration(
model: "NAME_OF_MODEL", // Name of the embedding model.
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Penting
Konektor pembangkit penyematan Ollama saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddOllamaTextEmbeddingGeneration(
modelId: "NAME_OF_MODEL", // E.g. "mxbai-embed-large" if mxbai-embed-large was downloaded as described above.
endpoint: new Uri("YOUR_ENDPOINT"), // E.g. "http://localhost:11434" if Ollama has been started in docker as described above.
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Penting
Konektor pembuatan penyematan ONNX saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddBertOnnxTextEmbeddingGeneration(
onnxModelPath: "PATH_ON_DISK", // Path to the model on disk e.g. C:\Repos\huggingface\microsoft\TaylorAI\bge-micro-v2\onnx\model.onnx
vocabPath: "VOCABULARY_PATH_ON_DISK",// Path to the vocabulary file on disk, e.g. C:\Repos\huggingface\TailorAI\bge-micro-v2\vocab.txt
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
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.
);
Penting
Konektor pembentukan embedding OpenAI saat ini masih bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0010
.
#pragma warning disable SKEXP0010
using Microsoft.SemanticKernel.Connectors.OpenAI;
OpenAITextEmbeddingGenerationService textEmbeddingGenerationService = new (
modelId: "MODEL_ID", // Name of the embedding model, e.g. "text-embedding-ada-002".
apiKey: "YOUR_API_KEY",
organization: "YOUR_ORG_ID", // Optional organization id.
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.
);
Penting
Konektor penghasil embedding Mistral saat ini sedang dalam tahap uji coba. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel.Connectors.MistralAI;
#pragma warning disable SKEXP0070
MistralAITextEmbeddingGenerationService textEmbeddingGenerationService = new (
modelId: "NAME_OF_MODEL", // Name of the embedding model, e.g. "mistral-embed".
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional uri endpoint including the port where MistralAI server is hosted. Default is https://api.mistral.ai.
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Penting
Konektor pengembangan penyematan Google sedang bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel.Connectors.Google;
#pragma warning disable SKEXP0070
GoogleAITextEmbeddingGenerationService textEmbeddingGenerationService = new (
modelId: "NAME_OF_MODEL", // Name of the embedding model, e.g. "models/text-embedding-004".
apiKey: "API_KEY",
apiVersion: GoogleAIVersion.V1, // Optional
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Penting
Konektor pembuatan embedding Hugging Face saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel.Connectors.HuggingFace;
#pragma warning disable SKEXP0070
HuggingFaceTextEmbeddingGenerationService textEmbeddingGenerationService = new (
model: "NAME_OF_MODEL", // Name of the embedding model.
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Penting
Konektor generasi embedding Ollama saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel.Embeddings;
using OllamaSharp;
#pragma warning disable SKEXP0070
using var ollamaClient = new OllamaApiClient(
uriString: "YOUR_ENDPOINT" // E.g. "http://localhost:11434" if Ollama has been started in docker as described above.
defaultModel: "NAME_OF_MODEL" // E.g. "mxbai-embed-large" if mxbai-embed-large was downloaded as described above.
);
ITextEmbeddingGenerationService textEmbeddingGenerationService = ollamaClient.AsTextEmbeddingGenerationService();
Penting
Konektor pembuatan penyematan ONNX saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #pragma warning disable SKEXP0070
.
using Microsoft.SemanticKernel.Connectors.Onnx;
#pragma warning disable SKEXP0070
BertOnnxTextEmbeddingGenerationService textEmbeddingGenerationService = await BertOnnxTextEmbeddingGenerationService.CreateAsync(
onnxModelPath: "PATH_ON_DISK", // Path to the model on disk e.g. C:\Repos\huggingface\microsoft\TaylorAI\bge-micro-v2\onnx\model.onnx
vocabPath: "VOCABULARY_PATH_ON_DISK" // Path to the vocabulary file on disk, e.g. C:\Repos\huggingface\TailorAI\bge-micro-v2\vocab.txt
);
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.