När chatten är klar kan du simulera en konversation fram och tillbaka med en AI-agent. Detta är naturligtvis användbart för att skapa chattrobotar, men det kan också användas för att skapa autonoma agenter som kan slutföra affärsprocesser, generera kod med mera. Som den primära modelltypen som tillhandahålls av OpenAI, Google, Mistral, Facebook och andra är chattavslut den vanligaste AI-tjänsten som du lägger till i ditt Semantic Kernel-projekt.
När du väljer en modell för chattens slutförande måste du överväga följande:
Vilka metoder stöder modellen (t.ex. text, bild, ljud osv.)?
Stöder den funktionsanrop?
Hur snabbt tar den emot och genererar token?
Hur mycket kostar varje token?
Viktigt!
Av alla ovanstående frågor är det viktigaste om modellen stöder funktionsanrop. Om den inte gör det kan du inte använda modellen för att anropa din befintliga kod. De flesta av de senaste modellerna från OpenAI, Google, Mistral och Amazon stöder alla funktionssamtal. Stödet från små språkmodeller är dock fortfarande begränsat.
Konfigurera din lokala miljö
Vissa av AI-tjänsterna kan finnas lokalt och kan kräva viss inställning. Nedan visas instruktioner för dem som stöder detta.
När containern har startat startar du ett terminalfönster för Docker-containern, t.ex. om du använder Docker Desktop väljer du Open in Terminal från åtgärder.
Från den här terminalen laddar vi ned de modeller som krävs, t.ex. här laddar vi ned phi3-modellen.
ollama pull phi3
Ingen lokal installation.
Ingen lokal installation.
Klona lagringsplatsen som innehåller den ONNX-modell som du vill använda.
Innan du lägger till chatten i kerneln måste du installera nödvändiga paket. Nedan visas de paket som du behöver installera för varje AI-tjänstleverantör.
För andra AI-tjänstleverantörer som stöder API:et för att slutföra OpenAI-chatten (t.ex. LLM Studio) kan du använda anslutningsappen för openAI-chattens slutförande.
Nu när du har installerat de nödvändiga paketen kan du skapa tjänster för chattens slutförande. Nedan visas flera sätt att skapa tjänster för chattens slutförande med hjälp av semantisk kernel.
Lägga till direkt i kerneln
Om du vill lägga till en tjänst för chattens slutförande kan du använda följande kod för att lägga till den i kernelns inre tjänstleverantör.
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();
Viktigt!
Anslutningsappen för mistralchattens slutförande är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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();
Viktigt!
Anslutningsappen för Google-chatten är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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();
Viktigt!
Anslutningsappen för slutförande av chatt med kramande ansiktsigenkänning är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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();
Viktigt!
Anslutningsappen för slutförande av Azure AI-slutsatsdragningschatt är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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();
Viktigt!
Anslutningsappen för Ollama-chatten är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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();
Viktigt!
Anslutningsappen för slutförande av Bedrock-chatten som krävs för Anthropic är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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();
Viktigt!
Anslutningsappen för slutförande av Bedrock-chatten är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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();
Viktigt!
Konnektorn för ONNX chattavslutning är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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 andra AI-tjänstleverantörer som stöder API:et för slutförande av OpenAI-chatt (t.ex. LLM Studio) kan du använda följande kod för att återanvända den befintliga anslutningsappen för slutförande av OpenAI-chatt.
Viktigt!
Det är för närvarande experimentellt att använda anpassade slutpunkter med OpenAI-anslutningsappen. Om du vill använda den måste du lägga #pragma warning disable SKEXP0010till .
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();
Använda beroendeinmatning
Om du använder beroendeinmatning vill du förmodligen lägga till dina AI-tjänster direkt till tjänstleverantören. Det här är användbart om du vill skapa singletons av dina AI-tjänster och återanvända dem i tillfälliga kärnor.
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);
});
Viktigt!
Anslutningsappen för mistralchattens slutförande är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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);
});
Viktigt!
Anslutningsappen för Google-chatten är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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);
});
Viktigt!
Anslutningsappen för slutförande av chatt med kramande ansiktsigenkänning är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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);
});
Viktigt!
Anslutningsappen för slutförande av Azure AI-slutsatsdragningschatt är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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);
});
Viktigt!
Anslutningsappen för Ollama-chatten är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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);
});
Viktigt!
Anslutningsappen för slutförande av Bedrock-chatten som krävs för Anthropic är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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);
});
Viktigt!
Anslutningsappen för slutförande av Bedrock-chatten är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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);
});
Viktigt!
Konnektorn för ONNX chattavslutning är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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 andra AI-tjänstleverantörer som stöder API:et för slutförande av OpenAI-chatt (t.ex. LLM Studio) kan du använda följande kod för att återanvända den befintliga anslutningsappen för slutförande av OpenAI-chatt.
Viktigt!
Det är för närvarande experimentellt att använda anpassade slutpunkter med OpenAI-anslutningsappen. Om du vill använda den måste du lägga #pragma warning disable SKEXP0010till .
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);
});
Skapa fristående instanser
Slutligen kan du skapa instanser av tjänsten direkt så att du antingen kan lägga till dem i en kernel senare eller använda dem direkt i koden utan att någonsin mata in dem i kerneln eller i en tjänstleverantör.
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
);
Viktigt!
Anslutningsappen för mistralchattens slutförande är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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
);
Viktigt!
Anslutningsappen för Google-chatten är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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
);
Viktigt!
Anslutningsappen för slutförande av chatt med kramande ansiktsigenkänning är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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
);
Viktigt!
Anslutningsappen för slutförande av Azure AI-slutsatsdragningschatt är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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
);
Viktigt!
Anslutningsappen för Ollama-chatten är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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();
Viktigt!
Anslutningsappen för slutförande av Bedrock-chatten som krävs för Anthropic är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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.
);
Viktigt!
Anslutningsappen för slutförande av Bedrock-chatten är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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.
);
Viktigt!
Konnektorn för ONNX chattavslutning är för närvarande experimentell. Om du vill använda den måste du lägga #pragma warning disable SKEXP0070till .
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 andra AI-tjänstleverantörer som stöder API:et för slutförande av OpenAI-chatt (t.ex. LLM Studio) kan du använda följande kod för att återanvända den befintliga anslutningsappen för slutförande av OpenAI-chatt.
Viktigt!
Det är för närvarande experimentellt att använda anpassade slutpunkter med OpenAI-anslutningsappen. Om du vill använda den måste du lägga #pragma warning disable SKEXP0010till .
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
);
För att skapa en tjänst för chattens slutförande måste du installera och importera nödvändiga moduler och skapa en instans av tjänsten. Nedan följer stegen för att installera och skapa en chatttjänst för varje AI-tjänstleverantör.
Semantic Kernel-paketet levereras med alla nödvändiga paket för att använda Azure OpenAI. Det finns inga ytterligare paket som krävs för att använda Azure OpenAI.
Semantic Kernel-paketet levereras med alla nödvändiga paket för att använda OpenAI. Det finns inga ytterligare paket som krävs för att använda OpenAI.
pip install semantic-kernel[azure]
pip install semantic-kernel[anthropic]
pip install semantic-kernel[aws]
pip install semantic-kernel[google]
pip install semantic-kernel[google]
pip install semantic-kernel[mistralai]
pip install semantic-kernel[ollama]
pip install semantic-kernel[onnx]
Skapa en tjänst för chattens slutförande
Tips
Det finns tre metoder för att tillhandahålla nödvändig information till AI-tjänster. Du kan antingen ange informationen direkt via konstruktorn, ange nödvändiga miljövariabler eller skapa en .env-fil i projektkatalogen som innehåller miljövariablerna. Du kan besöka den här sidan för att hitta alla nödvändiga miljövariabler för varje AI-tjänstleverantör: 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")
Kommentar
Tjänsten AzureChatCompletion stöder även Microsoft Entra-autentisering. Om du inte anger någon API-nyckel försöker tjänsten autentisera med hjälp av Entra-token.
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"],
),
)
Kommentar
Tjänsten AzureAIInferenceChatCompletion stöder även Microsoft Entra-autentisering. Om du inte anger någon API-nyckel försöker tjänsten autentisera med hjälp av Entra-token.
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
)
Kommentar
Amazon Bedrock accepterar inte en API-nyckel. Följ den här guiden för att konfigurera din miljö.
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
)
Tips
Användare kan komma åt Googles Gemini-modeller via Google AI Studio eller Google Vertex-plattformen. Följ den här guiden för att konfigurera din miljö.
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
)
Tips
Användare kan komma åt Googles Gemini-modeller via Google AI Studio eller Google Vertex-plattformen. Följ den här guiden för att konfigurera din miljö.
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
)
Tips
Läs mer om Ollama och ladda ned nödvändig programvara från här.
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
)
Du kan börja använda slutförandetjänsten direkt eller lägga till tjänsten för chattens slutförande i en kernel. Du kan använda följande kod för att lägga till en tjänst i kerneln.
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)
Du kan skapa instanser av tjänsten för chattens slutförande direkt och antingen lägga till dem i en kernel eller använda dem direkt i koden utan att mata in dem i kerneln. Följande kod visar hur du skapar en tjänst för chattens slutförande och lägger till den i kerneln.
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();
Hämtar tjänster för chattens slutförande
När du har lagt till tjänster för chattavslut i kerneln kan du hämta dem med hjälp av metoden hämta tjänst. Nedan visas ett exempel på hur du kan hämta en tjänst för chattens slutförande från kerneln.
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")
Det krävs inte att du lägger till tjänsten för chattens slutförande i kerneln om du inte behöver använda andra tjänster i kerneln. Du kan använda tjänsten för chattens slutförande direkt i koden.
Använda tjänster för chattens slutförande
Nu när du har en chatttjänst kan du använda den för att generera svar från en AI-agent. Det finns två huvudsakliga sätt att använda en tjänst för chattens slutförande:
Icke-strömmande: Du väntar tills tjänsten genererar ett helt svar innan du returnerar det till användaren.
Streaming: Enskilda delar av svaret genereras och returneras till användaren när de skapas.
Innan du kommer igång måste du manuellt skapa en instans av körningsinställningar för att använda tjänsten för chattens slutförande om du inte registrerade tjänsten med kerneln.
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()
Tips
Om du vill se vad du kan konfigurera i körningsinställningarna kan du kontrollera klassdefinitionen i källkoden eller läsa API-dokumentationen.
Nedan visas de två sätt som du kan använda en tjänst för chattens slutförande för att generera svar.
Icke-direktuppspelad chatt har slutförts
Om du vill använda icke-direktuppspelad chatt kan du använda följande kod för att generera ett svar från AI-agenten.
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
);
Slutförande av direktuppspelningschatt
Om du vill använda slutförande av direktuppspelningschatt kan du använda följande kod för att generera ett svar från AI-agenten.
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="")
Kommentar
Semantisk kernel för Java stöder inte strömningssvarsmodellen.
Nästa steg
Nu när du har lagt till tjänster för att slutföra chattar i ditt Semantic Kernel-projekt kan du börja skapa konversationer med din AI-agent. Mer information om hur du använder en tjänst för att slutföra chatten finns i följande artiklar: