Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Man mano che il Kernel Semantico sposta le sue astrazioni fondamentali in Microsoft.Extensions.AI, stiamo rendendo obsolete e abbandonando le nostre interfacce di incorporamento sperimentali a favore delle nuove astrazioni standardizzate che offrono un modo più coerente e potente per lavorare con i servizi di intelligenza artificiale nell'ecosistema .NET.
Questa guida consente di eseguire la migrazione dall'interfaccia obsoleta ITextEmbeddingGenerationService
alla nuova Microsoft.Extensions.AI.IEmbeddingGenerator<string, Embedding<float>>
interfaccia.
Perché apportare la modifica?
La transizione a Microsoft.Extensions.AI.IEmbeddingGenerator
offre diversi vantaggi:
- Standardizzazione: è in linea con modelli di ecosistema .NET più ampi e convenzioni Microsoft.Extensions
-
Sicurezza dei tipi: Tipizzazione più rigorosa con il tipo di ritorno generico
Embedding<float>
- Flessibilità: supporto per diversi tipi di input e formati di incorporamento
- Coerenza: approccio uniforme tra diversi provider di servizi di intelligenza artificiale
- Integrazione: integrazione facile con altre librerie Microsoft.Extensions
Aggiornamenti dei pacchetti
Prima di eseguire la migrazione del codice, assicurarsi di avere il kernel 1.51.0
semantico o i pacchetti successivi.
Migrazione di Kernel Builder
Prima: Uso di ITextEmbeddingGenerationService
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0010
// Create a kernel builder
var builder = Kernel.CreateBuilder();
// Add the OpenAI embedding service
builder.Services.AddOpenAITextEmbeddingGeneration(
modelId: "text-embedding-ada-002",
apiKey: "your-api-key");
Dopo l'uso di IEmbeddingGenerator
using Microsoft.Extensions.AI;
using Microsoft.SemanticKernel;
// Create a kernel builder
var builder = Kernel.CreateBuilder();
// Add the OpenAI embedding generator
builder.Services.AddOpenAIEmbeddingGenerator(
modelId: "text-embedding-ada-002",
apiKey: "your-api-key");
Migrazione della raccolta di servizi/inserimento delle dipendenze
Prima: Uso di ITextEmbeddingGenerationService
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0010
// Create or use an existing service collection (WebApplicationBuilder.Services)
var services = new ServiceCollection();
// Add the OpenAI embedding service
services.AddOpenAITextEmbeddingGeneration(
modelId: "text-embedding-ada-002",
apiKey: "your-api-key");
Dopo: Uso di IEmbeddingGenerator
using Microsoft.Extensions.AI;
using Microsoft.SemanticKernel;
// Create or use an existing service collection (WebApplicationBuilder.Services)
var services = new ServiceCollection();
// Add the OpenAI embedding generator
services.AddOpenAIEmbeddingGenerator(
modelId: "text-embedding-ada-002",
apiKey: "your-api-key");
Migrazione dell'utilizzo dell'interfaccia
Prima: Uso di ITextEmbeddingGenerationService
using Microsoft.SemanticKernel.Embeddings;
// Get the embedding service from the kernel
var embeddingService = kernel.GetRequiredService<ITextEmbeddingGenerationService>();
// Generate embeddings
var text = "Semantic Kernel is a lightweight SDK that integrates Large Language Models (LLMs) with conventional programming languages.";
var embedding = await embeddingService.GenerateEmbeddingAsync(text);
// Work with the embedding vector
Console.WriteLine($"Generated embedding with {embedding.Length} dimensions");
Dopo: Utilizzo di IEmbeddingGenerator
using Microsoft.Extensions.AI;
// Get the embedding generator from the kernel
var embeddingGenerator = kernel.GetRequiredService<IEmbeddingGenerator<string, Embedding<float>>>();
// Generate embeddings
var text = "Semantic Kernel is a lightweight SDK that integrates Large Language Models (LLMs) with conventional programming languages.";
var embedding = await embeddingGenerator.GenerateAsync(text);
// Work with the embedding vector
Console.WriteLine($"Generated embedding with {embedding.Vector.Length} dimensions");
Differenze principali
-
Nomi dei metodi:
GenerateEmbeddingAsync
diventaGenerateAsync
-
Tipo restituito: invece di restituire
ReadOnlyMemory<float>
, la nuova interfaccia restituisceGeneratedEmbeddings<Embedding<float>>
-
Accesso vettoriale: accedere all'incorporamento
ReadOnlyMemory<float>
tramite la.Vector
proprietà dellaEmbedding<float>
classe -
Opzioni: la nuova interfaccia accetta un parametro facoltativo
EmbeddingGenerationOptions
per un maggiore controllo
Migrazione di più incorporamenti
Prima: Generazione di più incorporamenti
using Microsoft.SemanticKernel.Embeddings;
var embeddingService = kernel.GetRequiredService<ITextEmbeddingGenerationService>();
var texts = new[]
{
"First text to embed",
"Second text to embed",
"Third text to embed"
};
IList<ReadOnlyMemory<float>> embeddings = await embeddingService.GenerateEmbeddingsAsync(texts);
foreach (var embedding in embeddings)
{
Console.WriteLine($"Generated embedding with {embedding.Length} dimensions");
}
Dopo: Generazione di più incorporamenti
using Microsoft.Extensions.AI;
var embeddingGenerator = kernel.GetRequiredService<IEmbeddingGenerator<string, Embedding<float>>>();
var texts = new[]
{
"First text to embed",
"Second text to embed",
"Third text to embed"
};
var embeddings = await embeddingGenerator.GenerateAsync(texts);
foreach (var embedding in embeddings)
{
Console.WriteLine($"Generated embedding with {embedding.Vector.Length} dimensions");
}
Sostegno transitorio
Per semplificare la transizione, semantic kernel fornisce metodi di estensione che consentono di eseguire la conversione tra le interfacce precedenti e nuove:
using Microsoft.Extensions.AI;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Embeddings;
// Create a kernel with the old embedding service
var builder = Kernel.CreateBuilder();
#pragma warning disable SKEXP0010
builder.Services.AddOpenAITextEmbeddingGeneration(
modelId: "text-embedding-ada-002",
apiKey: "your-api-key");
#pragma warning restore SKEXP0010
var kernel = builder.Build();
// Get the old embedding service
var oldEmbeddingService = kernel.GetRequiredService<ITextEmbeddingGenerationService>();
// Convert from old to new using extension method
IEmbeddingGenerator<string, Embedding<float>> newGenerator =
oldEmbeddingService.AsEmbeddingGenerator();
// Use the new generator
var newEmbedding = await newGenerator.GenerateAsync("Converting from old to new");
Console.WriteLine($"Generated embedding with {newEmbedding.Vector.Length} dimensions");
Supporto del connettore
Tutti i connettori Semantic Kernel sono stati aggiornati per supportare la nuova interfaccia:
-
OpenAI e Azure OpenAI: usare
AddOpenAIEmbeddingGenerator
eAddAzureOpenAIEmbeddingGenerator
-
Google AI e Vertex AI: usare
AddGoogleAIEmbeddingGenerator
eAddVertexAIEmbeddingGenerator
-
Amazon Bedrock: Usa
AddBedrockEmbeddingGenerator
-
Hugging Face:Use
AddHuggingFaceEmbeddingGenerator
-
MistralAI: Usare
AddMistralEmbeddingGenerator
-
Ollama: Utilizza
AddOllamaEmbeddingGenerator
-
ONNX: Usare
AddBertOnnxEmbeddingGenerator
Ogni connettore ora fornisce sia il servizio legacy (contrassegnato come obsoleto) che la nuova implementazione del generatore.
Esempio di OpenAI di Azure
Prima di: Azure OpenAI con ITextEmbeddingGenerationService
using Microsoft.SemanticKernel;
var builder = Kernel.CreateBuilder();
#pragma warning disable SKEXP0010
builder.Services.AddAzureOpenAITextEmbeddingGeneration(
deploymentName: "text-embedding-ada-002",
endpoint: "https://myaiservice.openai.azure.com",
apiKey: "your-api-key");
#pragma warning restore SKEXP0010
var kernel = builder.Build();
var embeddingService = kernel.GetRequiredService<ITextEmbeddingGenerationService>();
Dopo: Azure OpenAI con IEmbeddingGenerator
using Microsoft.Extensions.AI;
using Microsoft.SemanticKernel;
var builder = Kernel.CreateBuilder();
builder.Services.AddAzureOpenAIEmbeddingGenerator(
deploymentName: "text-embedding-ada-002",
endpoint: "https://myaiservice.openai.azure.com",
apiKey: "your-api-key");
var kernel = builder.Build();
var embeddingGenerator = kernel.GetRequiredService<IEmbeddingGenerator<string, Embedding<float>>>();
Uso delle opzioni di generazione di embedding
La nuova interfaccia supporta opzioni aggiuntive per un maggiore controllo sulla generazione di incorporamenti.
Prima: Opzioni limitate
// The old interface had limited options, mostly configured during service registration
var embedding = await embeddingService.GenerateEmbeddingAsync(text);
Dopo: Supporto delle opzioni avanzate
using Microsoft.Extensions.AI;
// Example 1: Specify custom dimensions for the embedding
var options = new EmbeddingGenerationOptions
{
Dimensions = 512 // Request a smaller embedding size for efficiency
};
var embedding = await embeddingGenerator.GenerateAsync(text, options);
// Example 2: Override the model for a specific request
var modelOptions = new EmbeddingGenerationOptions
{
ModelId = "text-embedding-3-large" // Use a different model than the default
};
var largeEmbedding = await embeddingGenerator.GenerateAsync(text, modelOptions);
// Example 3: Combine multiple options
var combinedOptions = new EmbeddingGenerationOptions
{
Dimensions = 1024,
ModelId = "text-embedding-3-small"
};
var customEmbedding = await embeddingGenerator.GenerateAsync(text, combinedOptions);
Lavorare con store vettoriali
La nuova IEmbeddingGenerator
interfaccia si integra perfettamente con gli archivi vettoriali del kernel semantico:
using Microsoft.Extensions.AI;
using Microsoft.SemanticKernel.Connectors.InMemory;
// Create an embedding generator
var embeddingGenerator = kernel.GetRequiredService<IEmbeddingGenerator<string, Embedding<float>>>();
// Use with vector stores
var vectorStore = new InMemoryVectorStore(new() { EmbeddingGenerator = embeddingGenerator });
var collection = vectorStore.GetCollection<string, MyRecord>("myCollection");
// The vector store will automatically use the embedding generator for text properties
await collection.UpsertAsync(new MyRecord
{
Id = "1",
Text = "This text will be automatically embedded"
});
internal class MyRecord
{
[VectorStoreKey]
public string Id { get; set; }
[VectorStoreData]
public string Text { get; set; }
// Note that the vector property is typed as a string, and
// its value is derived from the Text property. The string
// value will however be converted to a vector on upsert and
// stored in the database as a vector.
[VectorStoreVector(1536)]
public string Embedding => this.Text;
}
Creazione di istanze di servizio diretto
Prima: Creazione diretta del servizio
using Microsoft.SemanticKernel.Connectors.OpenAI;
#pragma warning disable SKEXP0010
var embeddingService = new OpenAITextEmbeddingGenerationService(
modelId: "text-embedding-ada-002",
apiKey: "your-api-key");
#pragma warning restore SKEXP0010
Dopo: Uso di Microsoft.Extensions.AI.OpenAI
using Microsoft.Extensions.AI;
using OpenAI;
// Create using the OpenAI SDK directly
var openAIClient = new OpenAIClient("your-api-key");
var embeddingGenerator = openAIClient
.GetEmbeddingClient("text-embedding-ada-002")
.AsIEmbeddingGenerator();
Passaggi successivi
- Aggiornare i riferimenti al pacchetto alle versioni più recenti del kernel semantico
- Sostituire
ITextEmbeddingGenerationService
conIEmbeddingGenerator<string, Embedding<float>>
- Aggiorna la registrazione del servizio per utilizzare i nuovi metodi del generatore di embedding (ad esempio,
AddOpenAIEmbeddingGenerator
) - Aggiornare le chiamate al metodo da
GenerateEmbeddingAsync
/GenerateEmbeddingsAsync
aGenerateAsync
- Aggiornare la modalità di accesso ai vettori di incorporamento (ora tramite la
.Vector
proprietà ) - Prendere in considerazione l'uso del nuovo parametro di opzioni per un controllo aggiuntivo
- Testare l'applicazione per assicurarsi che la migrazione sia riuscita
L'interfaccia precedente continuerà a funzionare per il momento, ma è contrassegnata come obsoleta e verrà rimossa in una versione futura. Si consiglia a tutti gli utenti del kernel semantico di eseguire la migrazione alla nuova IEmbeddingGenerator<string, Embedding<float>>
interfaccia il prima possibile.
Per altre informazioni su Microsoft.Extensions.AI, vedere l'annuncio ufficiale.