Metin ekleme oluşturma ile, vektörler (yani eklemeler) oluşturmak için bir yapay zeka modeli kullanabilirsiniz. Bu vektörler, metnin anlamsal anlamını, matematiksel denklemlerin özgün metnin benzerliğini karşılaştırmak için iki vektörde kullanılabilecek şekilde kodlar.
Bu, kullanıcı sorgusuyla ilgili metinler için bilgi veritabanında arama yapmak istediğimiz Alma Artırılmış Oluşturma (RAG) gibi senaryolar için kullanışlıdır.
Ardından, kullanıcı sorgusunu yanıtlarken yapay zeka modelinin daha fazla bağlama sahip olması için eşleşen bilgiler Sohbet Tamamlama'ya giriş olarak sağlanabilir.
Ekleme modelini seçerken aşağıdakileri göz önünde bulundurmanız gerekir:
- Model tarafından oluşturulan vektörlerin boyutu nedir ve bu, vektör depolama maliyetinizi etkileyeceğinden yapılandırılabilir mi?
- Oluşturulan vektörler hangi tür öğeleri içerir, örneğin float32, float16, vb. vektör depolama maliyetinizi etkiler.
- Vektörleri ne kadar hızlı oluşturur?
- Neslin maliyeti ne kadardır?
Yerel ortamınızı ayarlama
Yapay zeka hizmetlerinden bazıları yerel olarak barındırılabilir ve biraz kurulum gerektirebilir. Aşağıda bunu destekleyenler için yönergeler yer almaktadır.
Ollama'yı docker kullanarak yerel olarak çalıştırmak için aşağıdaki komutu kullanarak CPU kullanarak bir kapsayıcı başlatın.
docker run -d -v "c:\temp\ollama:/root/.ollama" -p 11434:11434 --name ollama ollama/ollama
Ollama'yı docker kullanarak yerel olarak çalıştırmak için aşağıdaki komutu kullanarak GPU'ları kullanarak bir kapsayıcı başlatın.
docker run -d --gpus=all -v "c:\temp\ollama:/root/.ollama" -p 11434:11434 --name ollama ollama/ollama
Kapsayıcı başlatıldıktan sonra docker kapsayıcısı için bir Terminal penceresi başlatın; örneğin docker desktop kullanıyorsanız eylemlerden Open in Terminal seçin.
Bu terminalden gerekli modelleri indirin, örneğin burada mxbai-embed-large ekleme modelini indiriyoruz.
ollama pull mxbai-embed-large
Kullanmak istediğiniz ONNX modelini içeren depoyu kopyalayın.
git clone https://huggingface.co/TaylorAI/bge-micro-v2
Gerekli paketleri yükleme
Çekirdeğinize gömme oluşturma işlemi eklemeden önce gerekli paketleri yüklemeniz gerekir. Her bir yapay zeka hizmet sağlayıcısı için yüklemeniz gereken paketler aşağıda belirtilmiştir.
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
Metin gömme oluşturma hizmetleri geliştirme
Artık gerekli paketleri yüklediğinize göre, bir metin ekleme oluşturma hizmeti oluşturabilirsiniz. Anlam Çekirdeği'ni kullanarak metin oluşturan gömme oluşturma hizmetlerini gerçekleştirmek için kullanabileceğiniz çeşitli yollar aşağıda verilmiştir.
Doğrudan çekirdeğe ekleme
Metin ekleme oluşturma hizmeti eklemek için aşağıdaki kodu kullanarak çekirdeğin iç hizmet sağlayıcısına ekleyebilirsiniz.
Önemli
Azure OpenAI gömme oluşturma bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0010eklemeniz gerekir.
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();
Önemli
OpenAI yerleştirme oluşturma bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0010eklemeniz gerekir.
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();
Önemli
Mistral gömme oluşturma bağlantısı şu anda deney aşamasındadır. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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();
Önemli
Google ekleme oluşturma bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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();
Önemli
Hugging Face gömme üretimi bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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();
Önemli
Ollama gömme üretimi bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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();
Önemli
ONNX gömme oluşturma bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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();
Bağımlılık enjeksiyonunu kullanma
Bağımlılık ekleme kullanıyorsanız, büyük olasılıkla metin ekleme oluşturma hizmetlerinizi doğrudan hizmet sağlayıcısına eklemek istersiniz. Yerleştirme oluşturma hizmetlerinizin tekil örneklerini oluşturmak ve bunları geçici çekirdeklerde yeniden kullanmak istiyorsanız bu yararlı olur.
Önemli
Azure OpenAI gömme oluşturma bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0010eklemeniz gerekir.
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);
});
Önemli
OpenAI yerleştirme oluşturma bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0010eklemeniz gerekir.
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);
});
Önemli
Mistral gömme oluşturma bağlantısı şu anda deney aşamasındadır. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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);
});
Önemli
Google ekleme oluşturma bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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);
});
Önemli
Hugging Face gömme üretimi bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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);
});
Önemli
Ollama gömme üretimi bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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);
});
Önemli
ONNX gömme oluşturma bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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);
});
Bağımsız örnekler oluşturma
Son olarak, hizmetin örneklerini doğrudan oluşturabilirsiniz, böylece bunları daha sonra bir çekirdeğe ekleyebilir veya hiç çekirdek ya da hizmet sağlayıcısına enjekte etmeden doğrudan kodunuzda kullanabilirsiniz.
Önemli
Azure OpenAI gömme oluşturma bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0010eklemeniz gerekir.
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.
);
Önemli
OpenAI yerleştirme oluşturma bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0010eklemeniz gerekir.
#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.
);
Önemli
Mistral gömme oluşturma bağlantısı şu anda deney aşamasındadır. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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
);
Önemli
Google ekleme oluşturma bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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
);
Önemli
Hugging Face gömme üretimi bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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
);
Önemli
Ollama gömme üretimi bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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();
Önemli
ONNX gömme oluşturma bağlayıcısı şu anda deneyseldir. Bunu kullanmak için #pragma warning disable SKEXP0070eklemeniz gerekir.
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
);
Metin ekleme oluşturma hizmetlerini kullanma
Tüm metin ekleme oluşturma hizmetleri, sağlanan ITextEmbeddingGenerationService değerlerden GenerateEmbeddingsAsync vektörler oluşturabilen tek bir yöntem ReadOnlyMemory<float> sahip string uygular.
GenerateEmbeddingAsync bir uzantı yöntemi, aynı eylemin tek değerli sürümleri için de kullanılabilir.
Hizmeti birden çok değerle çağırma örneği aşağıda verilmiştir.
IList<ReadOnlyMemory<float>> embeddings =
await textEmbeddingGenerationService.GenerateEmbeddingsAsync(
[
"sample text 1",
"sample text 2"
]);
Burada, hizmeti tek bir değerle çağırma örneği verilmiştir.
using Microsoft.SemanticKernel.Embeddings;
ReadOnlyMemory<float> embedding =
await textEmbeddingGenerationService.GenerateEmbeddingAsync("sample text");
Çok yakında
Daha fazla bilgi yakında sunulacaktır.
Çok yakında
Daha fazla bilgi yakında sunulacaktır.