Po dokončení chatu můžete simulovat back-and-forth konverzaci s agentem AI. To je samozřejmě užitečné pro vytváření chatovacích robotů, ale dá se použít také k vytváření autonomních agentů, kteří můžou provádět obchodní procesy, generovat kód a provádět další činnosti. Jako primární typ modelu, který poskytuje OpenAI, Google, Mistral, Facebook a další, dokončení chatu je nejběžnější službou AI, kterou přidáte do projektu sémantického jádra.
Při výběru modelu dokončování chatu je potřeba zvážit následující:
Jaké způsoby model podporuje (např. text, obrázek, zvuk atd.)?
Podporuje volání funkcí?
Jak rychle přijímá a generuje tokeny?
Kolik stojí každý token?
Důležité
Z výše uvedených otázek je nejdůležitější, jestli model podporuje volání funkcí. Pokud tomu tak není, nebudete moct model použít k volání existujícího kódu. Většina nejnovějších modelů od OpenAI, Google, Mistral a Amazon podporují volání funkcí. Podpora malých jazykových modelů je ale stále omezená.
Instalace potřebných balíčků
Před přidáním dokončení chatu do jádra budete muset nainstalovat potřebné balíčky. Níže jsou uvedené balíčky, které budete muset nainstalovat pro každého poskytovatele služeb AI.
Pro ostatní poskytovatele služeb AI, kteří podporují rozhraní API pro dokončování chatu OpenAI (např. LLM Studio), můžete použít konektor pro dokončování chatu OpenAI.
Teď, když jste nainstalovali potřebné balíčky, můžete vytvářet služby pro dokončování chatu. Níže je několik způsobů, jak vytvořit služby pro dokončování chatu pomocí sémantického jádra.
Přímé přidání do jádra
Pokud chcete přidat službu pro dokončování chatu, můžete ji pomocí následujícího kódu přidat k poskytovateli vnitřních služeb jádra.
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();
Důležité
Konektor dokončení chatu Mistral je v současné době experimentální. Pokud ho chcete použít, budete muset přidat #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();
Důležité
Konektor pro dokončování chatu Google je momentálně experimentální. Pokud ho chcete použít, budete muset přidat #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();
Důležité
Konektor pro dokončování chatu Hugging Face je aktuálně experimentální. Pokud ho chcete použít, budete muset přidat #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();
U jiných poskytovatelů služeb AI, kteří podporují rozhraní API pro dokončování chatu OpenAI (např. LLM Studio), můžete pomocí následujícího kódu znovu použít stávající konektor pro dokončování chatu OpenAI.
Důležité
Použití vlastních koncových bodů s konektorem OpenAI je aktuálně experimentální. Pokud ho chcete použít, budete muset přidat #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();
Použití injektáže závislostí
Pokud používáte injektáž závislostí, budete pravděpodobně chtít přidat služby AI přímo k poskytovateli služeb. To je užitečné, pokud chcete vytvořit jednotony služeb AI a znovu je použít v přechodných jádrech.
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);
});
Důležité
Konektor dokončení chatu Mistral je v současné době experimentální. Pokud ho chcete použít, budete muset přidat #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);
});
Důležité
Konektor pro dokončování chatu Google je momentálně experimentální. Pokud ho chcete použít, budete muset přidat #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);
});
Důležité
Konektor pro dokončování chatu Hugging Face je aktuálně experimentální. Pokud ho chcete použít, budete muset přidat #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);
});
U jiných poskytovatelů služeb AI, kteří podporují rozhraní API pro dokončování chatu OpenAI (např. LLM Studio), můžete pomocí následujícího kódu znovu použít stávající konektor pro dokončování chatu OpenAI.
Důležité
Použití vlastních koncových bodů s konektorem OpenAI je aktuálně experimentální. Pokud ho chcete použít, budete muset přidat #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);
});
Vytváření samostatných instancí
Nakonec můžete vytvořit instance služby přímo, abyste je mohli později buď přidat do jádra, nebo je použít přímo v kódu, aniž byste je někdy vkládali do jádra nebo poskytovatele služeb.
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
);
Důležité
Konektor dokončení chatu Mistral je v současné době experimentální. Pokud ho chcete použít, budete muset přidat #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
);
Důležité
Konektor pro dokončování chatu Google je momentálně experimentální. Pokud ho chcete použít, budete muset přidat #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
);
Důležité
Konektor pro dokončování chatu Hugging Face je aktuálně experimentální. Pokud ho chcete použít, budete muset přidat #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
);
U jiných poskytovatelů služeb AI, kteří podporují rozhraní API pro dokončování chatu OpenAI (např. LLM Studio), můžete pomocí následujícího kódu znovu použít stávající konektor pro dokončování chatu OpenAI.
Důležité
Použití vlastních koncových bodů s konektorem OpenAI je aktuálně experimentální. Pokud ho chcete použít, budete muset přidat #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
);
Pokud chcete přidat službu pro dokončování chatu, můžete ji do jádra přidat pomocí následujícího kódu.
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
))
U jiných poskytovatelů služeb AI, kteří podporují rozhraní API pro dokončování chatu OpenAI (např. LLM Studio), můžete pomocí následujícího kódu znovu použít stávající konektor pro dokončování chatu OpenAI.
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
))
Můžete také vytvořit instance služby přímo, abyste je mohli později přidat do jádra nebo je použít přímo ve svém kódu, aniž byste je do jádra vkládali.
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
)
U jiných poskytovatelů služeb AI, kteří podporují rozhraní API pro dokončování chatu OpenAI (např. LLM Studio), můžete pomocí následujícího kódu znovu použít stávající konektor pro dokončování chatu OpenAI.
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
)
Načítání služeb pro dokončování chatu
Po přidání služeb pro dokončování chatu do jádra je můžete načíst pomocí metody get. Níže je příklad, jak z jádra načíst službu dokončování chatu.
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
from semantic_kernel.connectors.ai.chat_completion_client_base import ChatCompletionClientBase
chat_completion_service = kernel.get_service(type=ChatCompletionClientBase)
Používání služeb pro dokončování chatu
Teď, když máte službu pro dokončování chatu, můžete ji použít k vygenerování odpovědí z agenta umělé inteligence. Službu pro dokončování chatu můžete použít dvěma hlavními způsoby:
Non-streaming: Před vrácením této odpovědi uživateli počkáte, až služba vygeneruje celou odpověď.
Streamování: Jednotlivé bloky odpovědi se vygenerují a vrátí uživateli při jejich vytváření.
Níže jsou uvedené dva způsoby, jak můžete pomocí služby pro dokončování chatu generovat odpovědi.
Dokončení chatu bez streamování
Pokud chcete použít dokončování chatu bez streamování, můžete k vygenerování odpovědi z agenta AI použít následující kód.
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]
Dokončení chatu streamování
Pokud chcete použít dokončování streamovaného chatu, můžete k vygenerování odpovědi od agenta AI použít následující kód.
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)
Další kroky
Teď, když jste do projektu sémantického jádra přidali služby pro dokončování chatu, můžete začít vytvářet konverzace s vaším agentem AI. Další informace o používání služby pro dokončování chatu najdete v následujících článcích: