Nach Abschluss des Chats können Sie eine Hin- und Her-Unterhaltung mit einem KI-Agent simulieren. Dies ist natürlich nützlich für das Erstellen von Chat-Bots, kann aber auch zum Erstellen autonomer Agents verwendet werden, die Geschäftsprozesse abschließen, Code generieren und vieles mehr. Als primärer Modelltyp, der von OpenAI, Google, Mistral, Facebook und anderen bereitgestellt wird, ist der Chatabschluss der am häufigsten verwendete KI-Dienst, den Sie Ihrem Semantik Kernel-Projekt hinzufügen werden.
Beim Auswählen eines Chatabschlussmodells müssen Sie Folgendes berücksichtigen:
Welche Modalitäten unterstützt das Modell (z. B. Text, Bild, Audio usw.)?
Unterstützt es Funktionsaufrufe?
Wie schnell empfangen und generieren Sie Token?
Wie viel kostet jedes Token?
Wichtig
Von allen oben genannten Fragen ist am wichtigsten, ob das Modell Funktionsaufrufe unterstützt. Wenn dies nicht der Fall ist, können Sie das Modell nicht verwenden, um Ihren vorhandenen Code aufzurufen. Die meisten der neuesten Modelle von OpenAI, Google, Mistral und Amazon unterstützen funktionsaufrufe. Die Unterstützung von kleinen Sprachmodellen ist jedoch weiterhin begrenzt.
Einrichten Ihrer lokalen Umgebung
Einige der KI-Dienste können lokal gehostet werden und erfordern möglicherweise ein Setup. Nachfolgend finden Sie Anweisungen für diejenigen, die dies unterstützen.
Nachdem der Container gestartet wurde, starten Sie ein Terminalfenster für den Docker-Container, z. B. wenn Sie Docker-Desktop verwenden, wählen Sie Open in Terminal aus Aktionen aus.
Von diesem Terminal laden sie die erforderlichen Modelle herunter, z.B. hier laden wir das phi3-Modell herunter.
ollama pull phi3
Keine lokale Einrichtung.
Keine lokale Einrichtung.
Klonen Sie das Repository mit dem ONNX-Modell, das Sie verwenden möchten.
Vor dem Hinzufügen des Chatabschlusses zu Ihrem Kernel müssen Sie die erforderlichen Pakete installieren. Nachfolgend finden Sie die Pakete, die Sie für jeden KI-Dienstanbieter installieren müssen.
Anthropische Modelle sind auf der Amazon Bedrock-Plattform erhältlich. Um anthropische Modelle zu verwenden, müssen Sie das Amazon Connector-Paket installieren.
Für andere KI-Dienstanbieter, die die OpenAI-Chatabschluss-API (z. B. LLM Studio) unterstützen, können Sie den OpenAI-Chatabschlussconnector verwenden.
Nachdem Sie nun die erforderlichen Pakete installiert haben, können Sie Chatabschlussdienste erstellen. Nachfolgend finden Sie die verschiedenen Möglichkeiten zum Erstellen von Chatabschlussdiensten mithilfe des semantischen Kernels.
Direktes Hinzufügen zum Kernel
Um einen Chatabschlussdienst hinzuzufügen, können Sie ihn mit dem folgenden Code dem internen Dienstanbieter des Kernels hinzufügen.
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();
Wichtig
Der Mistral-Chat-Vervollständigungsconnector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #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();
Wichtig
Der Google-Chat-Vervollständigungsconnector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #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();
Wichtig
Der Hugging Face Chat-Vervollständigungsconnector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #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();
Wichtig
Der Azure AI Inference-Chat-Vervollständigungsconnector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddAzureAIInferenceChatCompletion(
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();
Wichtig
Der Ollama-Chat-Vervollständigungsconnector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOllamaChatCompletion(
modelId: "NAME_OF_MODEL", // E.g. "phi3" if phi3 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();
Wichtig
Der Bedrock-Chat-Vervollständigungs-Connector, der für Anthropic erforderlich ist, befindet sich derzeit im experimentellen Stadium. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddBedrockChatCompletionService(
modelId: "NAME_OF_MODEL",
bedrockRuntime: amazonBedrockRuntime, // Optional; An instance of IAmazonBedrockRuntime, used to communicate with Azure Bedrock.
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
Kernel kernel = kernelBuilder.Build();
Wichtig
Der Bedrock-Chat-Vervollständigungs-Connector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddBedrockChatCompletionService(
modelId: "NAME_OF_MODEL",
bedrockRuntime: amazonBedrockRuntime, // Optional; An instance of IAmazonBedrockRuntime, used to communicate with Azure Bedrock.
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
Kernel kernel = kernelBuilder.Build();
Wichtig
Der ONNX-Chat-Vervollständigungskonnektor ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
#pragma warning disable SKEXP0070
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOnnxRuntimeGenAIChatCompletion(
modelId: "NAME_OF_MODEL", // E.g. phi-3
modelPath: "PATH_ON_DISK", // Path to the model on disk e.g. C:\Repos\huggingface\microsoft\Phi-3-mini-4k-instruct-onnx\cpu_and_mobile\cpu-int4-rtn-block-32
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
jsonSerializerOptions: customJsonSerializerOptions // Optional; for providing custom serialization settings for e.g. function argument / result serialization and parsing.
);
Kernel kernel = kernelBuilder.Build();
Für andere KI-Dienstanbieter, die die OpenAI-Chatabschluss-API (z. B. LLM Studio) unterstützen, können Sie den folgenden Code verwenden, um den vorhandenen OpenAI-Chatabschlussconnector wiederzuverwenden.
Wichtig
Die Verwendung von benutzerdefinierten Endpunkten mit dem OpenAI-Connector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #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();
Verwenden der Abhängigkeitsinjektion
Wenn Sie abhängigkeitsinjektion verwenden, sollten Sie Ihre KI-Dienste wahrscheinlich direkt dem Dienstanbieter hinzufügen. Dies ist hilfreich, wenn Sie Singletons Ihrer KI-Dienste erstellen und sie in vorübergehenden Kerneln wiederverwenden möchten.
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);
});
Wichtig
Der Mistral-Chat-Vervollständigungsconnector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #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);
});
Wichtig
Der Google-Chat-Vervollständigungsconnector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #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);
});
Wichtig
Der Hugging Face Chat-Vervollständigungsconnector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
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);
});
Wichtig
Der Azure AI Inference-Chat-Vervollständigungsconnector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddAzureAIInferenceChatCompletion(
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);
});
Wichtig
Der Ollama-Chat-Vervollständigungs-Connector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddOllamaChatCompletion(
modelId: "NAME_OF_MODEL", // E.g. "phi3" if phi3 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);
});
Wichtig
Der für Anthropic erforderliche Bedrock-Chat-Vervollständigungsconnector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddBedrockChatCompletionService(
modelId: "NAME_OF_MODEL",
bedrockRuntime: amazonBedrockRuntime, // Optional; An instance of IAmazonBedrockRuntime, used to communicate with Azure Bedrock.
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Wichtig
Der Bedrock-Chat-Abschluss-Connector ist momentan experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddBedrockChatCompletionService(
modelId: "NAME_OF_MODEL",
bedrockRuntime: amazonBedrockRuntime, // Optional; An instance of IAmazonBedrockRuntime, used to communicate with Azure Bedrock.
serviceId: "SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Wichtig
Der ONNX-Chat-Vervollständigungskonnektor ist zurzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
#pragma warning disable SKEXP0070
builder.Services.AddOnnxRuntimeGenAIChatCompletion(
modelId: "NAME_OF_MODEL", // E.g. phi-3
modelPath: "PATH_ON_DISK", // Path to the model on disk e.g. C:\Repos\huggingface\microsoft\Phi-3-mini-4k-instruct-onnx\cpu_and_mobile\cpu-int4-rtn-block-32
serviceId: "SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel
jsonSerializerOptions: customJsonSerializerOptions // Optional; for providing custom serialization settings for e.g. function argument / result serialization and parsing.
);
builder.Services.AddTransient((serviceProvider)=> {
return new Kernel(serviceProvider);
});
Für andere KI-Dienstanbieter, die die OpenAI-Chatabschluss-API (z. B. LLM Studio) unterstützen, können Sie den folgenden Code verwenden, um den vorhandenen OpenAI-Chatabschlussconnector wiederzuverwenden.
Wichtig
Die Verwendung von benutzerdefinierten Endpunkten mit dem OpenAI-Connector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #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);
});
Erstellen eigenständiger Instanzen
Schließlich können Sie Instanzen des Diensts direkt erstellen, damit Sie sie einem Kernel später hinzufügen oder direkt in Ihrem Code verwenden können, ohne sie jemals in den Kernel oder in einen Dienstanbieter einzufügen.
using Microsoft.SemanticKernel.Connectors.AzureOpenAI;
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
);
Wichtig
Der Mistral-Chat-Vervollständigungsconnector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #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
);
Wichtig
Der Google-Chat-Vervollständigungsconnector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #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
);
Wichtig
Der Hugging Face Chat-Vervollständigungsconnector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.HuggingFace;
#pragma warning disable SKEXP0070
HuggingFaceChatCompletionService chatCompletionService = new (
model: "NAME_OF_MODEL",
apiKey: "API_KEY",
endpoint: new Uri("YOUR_ENDPOINT") // Optional
);
Wichtig
Der Azure AI Inference-Chat-Vervollständigungsconnector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.AzureAIInference;
#pragma warning disable SKEXP0070
AzureAIInferenceChatCompletionService chatCompletionService = new (
modelId: "YOUR_MODEL_ID",
apiKey: "YOUR_API_KEY",
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
);
Wichtig
Der Ollama-Chat-Vervollständigungs-Connector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.ChatCompletion;
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. "phi3" if phi3 was downloaded as described above.
);
IChatCompletionService chatCompletionService = ollamaClient.AsChatCompletionService();
Wichtig
Der Bedrock-Chat-Vervollständigungsconnector, der für Anthropic erforderlich ist, ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.Amazon;
#pragma warning disable SKEXP0070
BedrockChatCompletionService chatCompletionService = new BedrockChatCompletionService(
modelId: "NAME_OF_MODEL",
bedrockRuntime: amazonBedrockRuntime // Optional; An instance of IAmazonBedrockRuntime, used to communicate with Azure Bedrock.
);
Wichtig
Der Bedrock-Chat-Vervollständigungskonnektor ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.Amazon;
#pragma warning disable SKEXP0070
BedrockChatCompletionService chatCompletionService = new BedrockChatCompletionService(
modelId: "NAME_OF_MODEL",
bedrockRuntime: amazonBedrockRuntime // Optional; An instance of IAmazonBedrockRuntime, used to communicate with Azure Bedrock.
);
Wichtig
Der ONNX-Chat-Vervollständigungskonnektor ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #pragma warning disable SKEXP0070.
using Microsoft.SemanticKernel.Connectors.Onnx;
#pragma warning disable SKEXP0070
OnnxRuntimeGenAIChatCompletionService chatCompletionService = new OnnxRuntimeGenAIChatCompletionService(
modelId: "NAME_OF_MODEL", // E.g. phi-3
modelPath: "PATH_ON_DISK", // Path to the model on disk e.g. C:\Repos\huggingface\microsoft\Phi-3-mini-4k-instruct-onnx\cpu_and_mobile\cpu-int4-rtn-block-32
jsonSerializerOptions: customJsonSerializerOptions // Optional; for providing custom serialization settings for e.g. function argument / result serialization and parsing.
);
Für andere KI-Dienstanbieter, die die OpenAI-Chatabschluss-API (z. B. LLM Studio) unterstützen, können Sie den folgenden Code verwenden, um den vorhandenen OpenAI-Chatabschlussconnector wiederzuverwenden.
Wichtig
Die Verwendung von benutzerdefinierten Endpunkten mit dem OpenAI-Connector ist derzeit experimentell. Um es zu verwenden, müssen Sie hinzufügen #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
);
Um einen Chatabschlussdienst zu erstellen, müssen Sie die erforderlichen Module importieren und eine Instanz des Diensts erstellen. Nachfolgend sind die Schritte zum Erstellen eines Chatabschlussdiensts für jeden KI-Dienstanbieter aufgeführt.
Trinkgeld
Es gibt drei Methoden, um die erforderlichen Informationen an KI-Dienste zu liefern. Sie können die Informationen entweder direkt über den Konstruktor bereitstellen, die erforderlichen Umgebungsvariablen festlegen oder eine env-Datei in Ihrem Projektverzeichnis erstellen, die die Umgebungsvariablen enthält. Sie können diese Seite besuchen, um alle erforderlichen Umgebungsvariablen für jeden KI-Dienstanbieter zu finden: https://github.com/microsoft/semantic-kernel/blob/main/python/samples/concepts/setup/ALL_SETTINGS.md
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
chat_completion_service = AzureChatCompletion(
deployment_name="my-deployment",
api_key="my-api-key",
endpoint="my-api-endpoint", # Used to point to your service
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
# You can do the following if you have set the necessary environment variables or created a .env file
chat_completion_service = AzureChatCompletion(service_id="my-service-id")
Hinweis
Der AzureChatCompletion–Dienst unterstützt auch die Microsoft Entra–Authentifizierung. Wenn Sie keinen API-Schlüssel bereitstellen, versucht der Dienst, sich mit dem Entra-Token zu authentifizieren.
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
chat_completion_service = OpenAIChatCompletion(
ai_model_id="my-deployment",
api_key="my-api-key",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
# You can do the following if you have set the necessary environment variables or created a .env file
chat_completion_service = OpenAIChatCompletion(service_id="my-service-id")
from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceChatCompletion
chat_completion_service = AzureAIInferenceChatCompletion(
ai_model_id="my-deployment",
api_key="my-api-key",
endpoint="my-api-endpoint", # Used to point to your service
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
# You can do the following if you have set the necessary environment variables or created a .env file
chat_completion_service = AzureAIInferenceChatCompletion(ai_model_id="my-deployment", service_id="my-service-id")
# You can also use an Azure OpenAI deployment with the Azure AI Inference service
from azure.ai.inference.aio import ChatCompletionsClient
from azure.identity.aio import DefaultAzureCredential
chat_completion_service = AzureAIInferenceChatCompletion(
ai_model_id="my-deployment",
client=ChatCompletionsClient(
endpoint=f"{str(endpoint).strip('/')}/openai/deployments/{deployment_name}",
credential=DefaultAzureCredential(),
credential_scopes=["https://cognitiveservices.azure.com/.default"],
),
)
Hinweis
Der AzureAIInferenceChatCompletion Dienst unterstützt auch Microsoft Entra-Authentifizierung. Wenn Sie keinen API-Schlüssel bereitstellen, versucht der Dienst, sich mit dem Entra-Token zu authentifizieren.
from semantic_kernel.connectors.ai.anthropic import AnthropicChatCompletion
chat_completion_service = AnthropicChatCompletion(
chat_model_id="model-id",
api_key="my-api-key",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
from semantic_kernel.connectors.ai.bedrock import BedrockChatCompletion
chat_completion_service = BedrockChatCompletion(
model_id="model-id",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
Hinweis
Amazon Bedrock akzeptiert keinen API-Schlüssel. Folgen Sie diesem Leitfaden, um Ihre Umgebung zu konfigurieren.
from semantic_kernel.connectors.ai.google.google_ai import GoogleAIChatCompletion
chat_completion_service = GoogleAIChatCompletion(
gemini_model_id="model-id",
api_key="my-api-key",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
Tipp
Benutzer können auf Die Gemini-Modelle von Google über Google AI Studio oder die Google Vertex-Plattform zugreifen. Folgen Sie diesem Leitfaden, um Ihre Umgebung zu konfigurieren.
from semantic_kernel.connectors.ai.google.vertex_ai import VertexAIChatCompletion
chat_completion_service = VertexAIChatCompletion(
project_id="my-project-id",
gemini_model_id="model-id",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
Trinkgeld
Benutzer können auf Die Gemini-Modelle von Google über Google AI Studio oder die Google Vertex-Plattform zugreifen. Folgen Sie diesem Leitfaden, um Ihre Umgebung zu konfigurieren.
from semantic_kernel.connectors.ai.mistral_ai import MistralAIChatCompletion
chat_completion_service = MistralAIChatCompletion(
ai_model_id="model-id",
api_key="my-api-key",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
from semantic_kernel.connectors.ai.ollama import OllamaChatCompletion
chat_completion_service = OllamaChatCompletion(
ai_model_id="model-id",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
Tipp
Erfahren Sie mehr über Ollama und laden Sie die notwendige Software von hier.
from semantic_kernel.connectors.ai.onnx import OnnxGenAIChatCompletion
chat_completion_service = OnnxGenAIChatCompletion(
template="phi3v",
ai_model_path="model-path",
service_id="my-service-id", # Optional; for targeting specific services within Semantic Kernel
)
Sie können sofort mit der Verwendung des Abschlussdiensts beginnen oder den Chatabschlussdienst zu einem Kernel hinzufügen. Sie können den folgenden Code verwenden, um dem Kernel einen Dienst hinzuzufügen.
from semantic_kernel import Kernel
# Initialize the kernel
kernel = Kernel()
# Add the chat completion service created above to the kernel
kernel.add_service(chat_completion_service)
Sie können Instanzen des Chatabschlussdiensts direkt erstellen und entweder einem Kernel hinzufügen oder sie direkt in Ihrem Code verwenden, ohne sie in den Kernel einzufügen. Der folgende Code zeigt, wie Sie einen Chatabschlussdienst erstellen und dem Kernel hinzufügen.
import com.azure.ai.openai.OpenAIAsyncClient;
import com.azure.ai.openai.OpenAIClientBuilder;
import com.microsoft.semantickernel.Kernel;
import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;
// Create the client
OpenAIAsyncClient client = new OpenAIClientBuilder()
.credential(azureOpenAIClientCredentials)
.endpoint(azureOpenAIClientEndpoint)
.buildAsyncClient();
// Create the chat completion service
ChatCompletionService openAIChatCompletion = OpenAIChatCompletion.builder()
.withOpenAIAsyncClient(client)
.withModelId(modelId)
.build();
// Initialize the kernel
Kernel kernel = Kernel.builder()
.withAIService(ChatCompletionService.class, openAIChatCompletion)
.build();
import com.azure.ai.openai.OpenAIAsyncClient;
import com.azure.ai.openai.OpenAIClientBuilder;
import com.microsoft.semantickernel.Kernel;
import com.microsoft.semantickernel.services.chatcompletion.ChatCompletionService;
// Create the client
OpenAIAsyncClient client = new OpenAIClientBuilder()
.credential(openAIClientCredentials)
.buildAsyncClient();
// Create the chat completion service
ChatCompletionService openAIChatCompletion = OpenAIChatCompletion.builder()
.withOpenAIAsyncClient(client)
.withModelId(modelId)
.build();
// Initialize the kernel
Kernel kernel = Kernel.builder()
.withAIService(ChatCompletionService.class, openAIChatCompletion)
.build();
Abrufen von Chatabschlussdiensten
Nachdem Sie Ihrem Kernel Chatabschlussdienste hinzugefügt haben, können Sie sie mithilfe der Get-Service-Methode abrufen. Nachfolgend finden Sie ein Beispiel, wie Sie einen Chatabschlussdienst aus dem Kernel abrufen können.
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
from semantic_kernel.connectors.ai.chat_completion_client_base import ChatCompletionClientBase
# Retrieve the chat completion service by type
chat_completion_service = kernel.get_service(type=ChatCompletionClientBase)
# Retrieve the chat completion service by id
chat_completion_service = kernel.get_service(service_id="my-service-id")
# Retrieve the default inference settings
execution_settings = kernel.get_prompt_execution_settings_from_service_id("my-service-id")
Das Hinzufügen des Chatabschlussdiensts zum Kernel ist nicht erforderlich, wenn Sie keine anderen Dienste im Kernel verwenden müssen. Sie können den Chatabschlussdienst direkt in Ihrem Code verwenden.
Verwenden von Chatabschlussdiensten
Nachdem Sie nun über einen Chatabschlussdienst verfügen, können Sie ihn verwenden, um Antworten von einem KI-Agent zu generieren. Es gibt zwei Hauptmethoden für die Verwendung eines Chatabschlussdiensts:
Nicht-Streaming-: Sie warten, bis der Dienst eine vollständige Antwort generiert, bevor er sie dem Benutzer zurückgibt.
Streaming: Einzelne Teile der Antwort werden generiert und dem Benutzer zurückgegeben, sobald sie erstellt werden.
Bevor Sie beginnen, müssen Sie manuell eine Ausführungseinstellungsinstanz erstellen, um den Chatabschlussdienst zu verwenden, wenn Sie den Dienst nicht beim Kernel registriert haben.
from semantic_kernel.connectors.ai.open_ai import OpenAIChatPromptExecutionSettings
execution_settings = OpenAIChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.open_ai import OpenAIChatPromptExecutionSettings
execution_settings = OpenAIChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.azure_ai_inference import AzureAIInferenceChatPromptExecutionSettings
execution_settings = AzureAIInferenceChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.anthropic import AnthropicChatPromptExecutionSettings
execution_settings = AnthropicChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.bedrock import BedrockChatPromptExecutionSettings
execution_settings = BedrockChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.google.google_ai import GoogleAIChatPromptExecutionSettings
execution_settings = GoogleAIChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.google.vertex_ai import VertexAIChatPromptExecutionSettings
execution_settings = VertexAIChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.mistral_ai import MistralAIChatPromptExecutionSettings
execution_settings = MistralAIChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.ollama import OllamaChatPromptExecutionSettings
execution_settings = OllamaChatPromptExecutionSettings()
from semantic_kernel.connectors.ai.onnx import OnnxGenAIPromptExecutionSettings
execution_settings = OnnxGenAIPromptExecutionSettings()
Trinkgeld
Um zu sehen, was Sie in den Ausführungseinstellungen konfigurieren können, können Sie die Klassendefinition im Quellcode überprüfen oder die API-Dokumentationauschecken.
Im Folgenden finden Sie die beiden Möglichkeiten, wie Sie einen Chatabschlussdienst verwenden können, um Antworten zu generieren.
Abschluss des Nicht-Streaming-Chats
Um den Abschluss eines Nicht-Streaming-Chats zu verwenden, können Sie den folgenden Code verwenden, um eine Antwort vom KI-Agent zu generieren.
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_content(
chat_history=history,
settings=execution_settings,
)
ChatHistory history = new ChatHistory();
history.addUserMessage("Hello, how are you?");
InvocationContext optionalInvocationContext = null;
List<ChatMessageContent<?>> response = chatCompletionService.getChatMessageContentsAsync(
history,
kernel,
optionalInvocationContext
);
Abschluss des Streaming-Chats
Um den Abschluss des Streamingchats zu verwenden, können Sie den folgenden Code verwenden, um eine Antwort vom KI-Agent zu generieren.
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_content(
chat_history=history,
settings=execution_settings,
)
async for chunk in response:
print(chunk, end="")
Hinweis
Der semantische Kernel für Java unterstützt das Streaming-Antwortmodell nicht.
Nächste Schritte
Nachdem Sie Ihrem semantischen Kernelprojekt Chatabschlussdienste hinzugefügt haben, können Sie mit dem Erstellen von Unterhaltungen mit Ihrem KI-Agent beginnen. Weitere Informationen zur Verwendung eines Chatabschlussdiensts finden Sie in den folgenden Artikeln: