Une fois la conversation terminée, vous pouvez simuler une conversation back-and-forth avec un agent IA. Cela est bien sûr utile pour créer des bots de conversation, mais il peut également être utilisé pour créer des agents autonomes qui peuvent terminer des processus métier, générer du code et bien plus encore. Comme type de modèle principal fourni par OpenAI, Google, Mistral, Facebook et d’autres, la saisie semi-automatique de conversation est le service IA le plus courant que vous allez ajouter à votre projet de noyau sémantique.
Lors de la sélection d’un modèle d’achèvement de conversation, vous devez prendre en compte les éléments suivants :
Quelles sont les modalités prises en charge par le modèle (par exemple, texte, image, audio, etc.) ?
Prend-il en charge l’appel de fonction ?
Combien de temps reçoit-il et génère-t-il des jetons ?
Combien coûte chaque jeton ?
Important
Parmi toutes les questions ci-dessus, le plus important est de savoir si le modèle prend en charge l’appel de fonction. Si ce n’est pas le cas, vous ne pourrez pas utiliser le modèle pour appeler votre code existant. La plupart des derniers modèles d’OpenAI, Google, Mistral et Amazon prennent tous en charge les appels de fonction. Toutefois, la prise en charge des modèles de petite langue est encore limitée.
Installation des packages nécessaires
Avant d’ajouter la saisie semi-automatique de conversation à votre noyau, vous devez installer les packages nécessaires. Voici les packages que vous devez installer pour chaque fournisseur de services IA.
Pour les autres fournisseurs de services IA qui prennent en charge l’API d’achèvement de conversation OpenAI (par exemple, LLM Studio), vous pouvez utiliser le connecteur d’achèvement de conversation OpenAI.
Maintenant que vous avez installé les packages nécessaires, vous pouvez créer des services d’achèvement de conversation. Vous trouverez ci-dessous plusieurs façons de créer des services d’achèvement de conversation à l’aide du noyau sémantique.
Ajout direct au noyau
Pour ajouter un service d’achèvement de conversation, vous pouvez utiliser le code suivant pour l’ajouter au fournisseur de services interne du noyau.
using Microsoft.SemanticKernel;
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddAzureOpenAIChatCompletion(
deploymentName: "NAME_OF_YOUR_DEPLOYMENT",
apiKey: "YOUR_API_KEY",
endpoint: "YOUR_AZURE_ENDPOINT",
modelId: "gpt-4", // Optional name of the underlying model if the deployment name doesn't match the model name
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
);
Kernel kernel = kernelBuilder.Build();
using Microsoft.SemanticKernel;
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
orgId: "YOUR_ORG_ID", // Optional
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
);
Kernel kernel = kernelBuilder.Build();
Important
Le connecteur d’achèvement de conversation Mistral est actuellement expérimental. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddMistralChatCompletion(
modelId: "NAME_OF_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();
Important
Le connecteur d’achèvement de conversation Google est actuellement expérimental. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.Google;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddGoogleAIGeminiChatCompletion(
modelId: "NAME_OF_MODEL",
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();
Important
Le connecteur de saisie semi-automatique de conversation visage est actuellement expérimental. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddHuggingFaceChatCompletion(
model: "NAME_OF_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();
Pour les autres fournisseurs de services IA qui prennent en charge l’API d’achèvement de conversation OpenAI (par exemple, LLM Studio), vous pouvez utiliser le code suivant pour réutiliser le connecteur d’achèvement de conversation OpenAI existant.
Important
L’utilisation de points de terminaison personnalisés avec le connecteur OpenAI est actuellement expérimentale. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0010.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0010
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Used to point to your service
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Kernel kernel = kernelBuilder.Build();
Utilisation de l’injection de dépendances
Si vous utilisez l’injection de dépendances, vous souhaiterez probablement ajouter vos services IA directement au fournisseur de services. Cela est utile si vous souhaitez créer des singletons de vos services IA et les réutiliser dans des noyaux temporaires.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddAzureOpenAIChatCompletion(
deploymentName: "NAME_OF_YOUR_DEPLOYMENT",
apiKey: "YOUR_API_KEY",
endpoint: "YOUR_AZURE_ENDPOINT",
modelId: "gpt-4", // Optional name of the underlying model if the deployment name doesn't match the model name
serviceId: "YOUR_SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddOpenAIChatCompletion(
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
orgId: "YOUR_ORG_ID", // Optional; for OpenAI deployment
serviceId: "YOUR_SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Important
Le connecteur d’achèvement de conversation Mistral est actuellement expérimental. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddMistralChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Important
Le connecteur d’achèvement de conversation Google est actuellement expérimental. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.Google;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddGoogleAIGeminiChatCompletion(
modelId: "NAME_OF_MODEL",
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);
});
Important
Le connecteur de saisie semi-automatique de conversation visage est actuellement expérimental. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.Google;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddHuggingFaceChatCompletion(
model: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Pour les autres fournisseurs de services IA qui prennent en charge l’API d’achèvement de conversation OpenAI (par exemple, LLM Studio), vous pouvez utiliser le code suivant pour réutiliser le connecteur d’achèvement de conversation OpenAI existant.
Important
L’utilisation de points de terminaison personnalisés avec le connecteur OpenAI est actuellement expérimentale. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0010.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0010
builder.Services.AddOpenAIChatCompletion(
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Used to point to your service
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);
});
Création d’instances autonomes
Enfin, vous pouvez créer des instances du service directement afin de pouvoir les ajouter à un noyau ultérieurement ou les utiliser directement dans votre code sans jamais les injecter dans le noyau ou dans un fournisseur de services.
using Microsoft.SemanticKernel.Connectors.OpenAI;
AzureOpenAIChatCompletionService chatCompletionService = new (
deploymentName: "NAME_OF_YOUR_DEPLOYMENT",
apiKey: "YOUR_API_KEY",
endpoint: "YOUR_AZURE_ENDPOINT",
modelId: "gpt-4", // Optional name of the underlying model if the deployment name doesn't match the model name
httpClient: new HttpClient() // Optional; if not provided, the HttpClient from the kernel will be used
);
using Microsoft.SemanticKernel.Connectors.OpenAI;
OpenAIChatCompletionService chatCompletionService = new (
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
organization: "YOUR_ORG_ID", // Optional
httpClient: new HttpClient() // Optional; if not provided, the HttpClient from the kernel will be used
);
Important
Le connecteur d’achèvement de conversation Mistral est actuellement expérimental. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.MistralAI;
#pragma warning disable SKEXP0070
MistralAIChatCompletionService chatCompletionService = new (
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT"), // Optional
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Important
Le connecteur d’achèvement de conversation Google est actuellement expérimental. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.Google;
#pragma warning disable SKEXP0070
GoogleAIGeminiChatCompletionService chatCompletionService = new (
modelId: "NAME_OF_MODEL",
apiKey: "API_KEY",
apiVersion: GoogleAIVersion.V1, // Optional
httpClient: new HttpClient() // Optional; for customizing HTTP client
);
Important
Le connecteur de saisie semi-automatique de conversation visage est actuellement expérimental. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.OpenAI;
OpenAIChatCompletionService chatCompletionService = new (
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
organization: "YOUR_ORG_ID", // Optional
httpClient: new HttpClient() // Optional; if not provided, the HttpClient from the kernel will be used
);
Pour les autres fournisseurs de services IA qui prennent en charge l’API d’achèvement de conversation OpenAI (par exemple, LLM Studio), vous pouvez utiliser le code suivant pour réutiliser le connecteur d’achèvement de conversation OpenAI existant.
Important
L’utilisation de points de terminaison personnalisés avec le connecteur OpenAI est actuellement expérimentale. Pour l’utiliser, vous devez ajouter #pragma warning disable SKEXP0010.
using Microsoft.SemanticKernel.Connectors.OpenAI;
#pragma warning disable SKEXP0010
OpenAIChatCompletionService chatCompletionService = new (
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
organization: "YOUR_ORG_ID", // Optional
endpoint: new Uri("YOUR_ENDPOINT"), // Used to point to your service
httpClient: new HttpClient() // Optional; if not provided, the HttpClient from the kernel will be used
);
Pour ajouter un service d’achèvement de conversation, vous pouvez utiliser le code suivant pour l’ajouter au noyau.
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
# Initialize the kernel
kernel = Kernel()
# Add the Azure OpenAI chat completion service
kernel.add_service(AzureChatCompletion(
deployment_name="my-deployment",
api_key="my-api-key",
base_url="https://my-deployment.azurewebsites.net", # Used to point to your service
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
))
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
# Initialize the kernel
kernel = Kernel()
# Add the Azure OpenAI chat completion service
kernel.add_service(OpenAIChatCompletion(
ai_model_id="my-deployment",
api_key="my-api-key",
org_id="my-org-id", # Optional
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
))
Pour les autres fournisseurs de services IA qui prennent en charge l’API d’achèvement de conversation OpenAI (par exemple, LLM Studio), vous pouvez utiliser le code suivant pour réutiliser le connecteur d’achèvement de conversation OpenAI existant.
from semantic_kernel import Kernel
# Initialize the kernel
kernel = Kernel()
# Add the Azure OpenAI chat completion service
kernel.add_service(OpenAIChatCompletion(
ai_model_id="my-deployment",
api_key="my-api-key",
org_id="my-org-id", # Optional
base_url="https://my-custom-deployment.net", # Used to point to your service
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
))
Vous pouvez également créer directement des instances du service afin de pouvoir les ajouter à un noyau ultérieurement ou les utiliser directement dans votre code sans les injecter dans le noyau.
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
chat_completion_service = AzureChatCompletion(
deployment_name="my-deployment",
api_key="my-api-key",
base_url="https://my-deployment.azurewebsites.net", # Used to point to your service
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
chat_completion_service = OpenAIChatCompletion(
ai_model_id="my-deployment",
api_key="my-api-key",
org_id="my-org-id", # Optional
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
Pour les autres fournisseurs de services IA qui prennent en charge l’API d’achèvement de conversation OpenAI (par exemple, LLM Studio), vous pouvez utiliser le code suivant pour réutiliser le connecteur d’achèvement de conversation OpenAI existant.
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
chat_completion_service = OpenAIChatCompletion(
ai_model_id="my-deployment",
api_key="my-api-key",
org_id="my-org-id", # Optional
base_url="https://my-custom-deployment.net", # Used to point to your service
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
Récupération des services d’achèvement de conversation
Une fois que vous avez ajouté des services d’achèvement de conversation à votre noyau, vous pouvez les récupérer à l’aide de la méthode get service. Voici un exemple de la façon dont vous pouvez récupérer un service d’achèvement de conversation à partir du noyau.
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
from semantic_kernel.connectors.ai.chat_completion_client_base import ChatCompletionClientBase
chat_completion_service = kernel.get_service(type=ChatCompletionClientBase)
Utilisation des services d’achèvement de conversation
Maintenant que vous disposez d’un service d’achèvement de conversation, vous pouvez l’utiliser pour générer des réponses à partir d’un agent IA. Il existe deux façons principales d’utiliser un service d’achèvement de conversation :
Non-streaming : vous attendez que le service génère une réponse entière avant de la renvoyer à l’utilisateur.
Streaming : les blocs individuels de la réponse sont générés et retournés à l’utilisateur lors de leur création.
Vous trouverez ci-dessous les deux façons d’utiliser un service d’achèvement de conversation pour générer des réponses.
Fin de la conversation sans diffusion en continu
Pour utiliser la saisie semi-automatique de conversation en continu, vous pouvez utiliser le code suivant pour générer une réponse à partir de l’agent IA.
ChatHistory history = [];
history.AddUserMessage("Hello, how are you?");
var response = await chatCompletionService.GetChatMessageContentAsync(
history,
kernel: kernel
);
chat_history = ChatHistory()
chat_history.add_user_message("Hello, how are you?")
response = (await chat_completion.get_chat_message_contents(
chat_history=history,
kernel=kernel,
))[0]
Fin de la conversation en streaming
Pour utiliser la saisie semi-automatique de conversation en streaming, vous pouvez utiliser le code suivant pour générer une réponse à partir de l’agent IA.
ChatHistory history = [];
history.AddUserMessage("Hello, how are you?");
var response = chatCompletionService.GetStreamingChatMessageContentsAsync(
chatHistory: history,
kernel: kernel
);
await foreach (var chunk in response)
{
Console.Write(chunk);
}
chat_history = ChatHistory()
chat_history.add_user_message("Hello, how are you?")
response = chat_completion.get_streaming_chat_message_contents(
chat_history=history,
kernel=kernel,
)
async for chunk in response:
print(chunk)
Étapes suivantes
Maintenant que vous avez ajouté des services d’achèvement de conversation à votre projet de noyau sémantique, vous pouvez commencer à créer des conversations avec votre agent IA. Pour en savoir plus sur l’utilisation d’un service d’achèvement de conversation, consultez les articles suivants :