Po zakończeniu czatu można symulować rozmowę z agentem sztucznej inteligencji. Jest to oczywiście przydatne do tworzenia czatbotów, ale może być również używany do tworzenia autonomicznych agentów, którzy mogą wykonywać procesy biznesowe, generować kod i nie tylko. Jako podstawowy typ modelu udostępniany przez openAI, Google, Mistral, Facebook i inne, uzupełnianie czatu jest najpopularniejszą usługą sztucznej inteligencji, którą dodasz do projektu Semantic Kernel.
Podczas wybierania modelu uzupełniania czatu należy wziąć pod uwagę następujące kwestie:
Jakie modalności obsługuje model (np. tekst, obraz, dźwięk itp.)?
Czy obsługuje ona wywoływanie funkcji?
Jak szybko odbiera i generuje tokeny?
Ile kosztuje każdy token?
Ważne
Spośród wszystkich powyższych pytań najważniejsze jest to, czy model obsługuje wywoływanie funkcji. Jeśli tak nie jest, nie będzie można wywołać istniejącego kodu przy użyciu modelu. Większość najnowszych modeli z platform OpenAI, Google, Mistral i Amazon obsługuje wywoływanie funkcji. Obsługa modeli małych języków jest jednak nadal ograniczona.
Konfigurowanie środowiska lokalnego
Niektóre usługi sztucznej inteligencji mogą być hostowane lokalnie i mogą wymagać konfiguracji. Poniżej znajdują się instrukcje dla tych, którzy to wspierają.
Po uruchomieniu kontenera uruchom okno terminalu dla kontenera platformy Docker, np. w przypadku korzystania z pulpitu platformy Docker, wybierz pozycję Open in Terminal z akcji.
Z tego terminalu pobierz wymagane modele, np. w tym miejscu pobieramy model phi3.
ollama pull phi3
Brak konfiguracji lokalnej.
Brak konfiguracji lokalnej.
Sklonuj repozytorium zawierające model ONNX, którego chcesz użyć.
Przed dodaniem ukończenia czatu do jądra należy zainstalować niezbędne pakiety. Poniżej przedstawiono pakiety, które należy zainstalować dla każdego dostawcy usług sztucznej inteligencji.
W przypadku innych dostawców usług sztucznej inteligencji, którzy obsługują interfejs API uzupełniania czatu OpenAI (np. LLM Studio), możesz użyć łącznika uzupełniania czatu OpenAI.
Po zainstalowaniu niezbędnych pakietów możesz utworzyć usługi uzupełniania czatów. Poniżej przedstawiono kilka sposobów tworzenia usług uzupełniania czatów przy użyciu semantycznego jądra.
Dodawanie bezpośrednio do jądra
Aby dodać usługę uzupełniania czatu, możesz użyć następującego kodu, aby dodać go do wewnętrznego dostawcy usług 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();
Ważne
Łącznik uzupełniania czatu Mistral jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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();
Ważne
Łącznik uzupełniania czatu Google jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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();
Ważne
Łącznik uściślenia czatu rozpoznawania twarzy jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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();
Ważne
Łącznik uzupełniania czatu wnioskowania usługi Azure AI jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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();
Ważne
Łącznik uzupełniania czatu Ollama jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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();
Ważne
Łącznik uzupełniania czatu Bedrock, który jest wymagany dla języka Anthropic, jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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();
Ważne
Łącznik uzupełniania czatu Bedrock jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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();
Ważne
Łącznik uzupełniania czatu ONNX jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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();
W przypadku innych dostawców usług sztucznej inteligencji, którzy obsługują interfejs API uzupełniania czatu OpenAI (np. LLM Studio), możesz użyć następującego kodu, aby ponownie użyć istniejącego łącznika uzupełniania czatu OpenAI.
Ważne
Używanie niestandardowych punktów końcowych z łącznikiem OpenAI jest obecnie eksperymentalne. Aby go użyć, należy dodać #pragma warning disable SKEXP0010element .
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();
Korzystanie z wstrzykiwania zależności
Jeśli używasz wstrzykiwania zależności, prawdopodobnie chcesz dodać usługi sztucznej inteligencji bezpośrednio do dostawcy usług. Jest to przydatne, jeśli chcesz utworzyć pojedynczetony usług sztucznej inteligencji i użyć ich ponownie w przejściowych jądrach.
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);
});
Ważne
Łącznik uzupełniania czatu Mistral jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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);
});
Ważne
Łącznik uzupełniania czatu Google jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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);
});
Ważne
Łącznik uściślenia czatu rozpoznawania twarzy jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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);
});
Ważne
Łącznik uzupełniania czatu wnioskowania usługi Azure AI jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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);
});
Ważne
Łącznik uzupełniania czatu Ollama jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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);
});
Ważne
Obecnie konektor uzupełniania czatu Bedrock, który jest wymagany dla Anthropic, jest eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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);
});
Ważne
Konektor uzupełniania czatu Bedrock jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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);
});
Ważne
Łącznik uzupełniania czatu ONNX jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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);
});
W przypadku innych dostawców usług sztucznej inteligencji, którzy obsługują interfejs API uzupełniania czatu OpenAI (np. LLM Studio), możesz użyć następującego kodu, aby ponownie użyć istniejącego łącznika uzupełniania czatu OpenAI.
Ważne
Używanie niestandardowych punktów końcowych z łącznikiem OpenAI jest obecnie eksperymentalne. Aby go użyć, należy dodać #pragma warning disable SKEXP0010element .
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);
});
Tworzenie wystąpień autonomicznych
Na koniec możesz utworzyć wystąpienia usługi bezpośrednio, aby można było dodać je do jądra później lub użyć ich bezpośrednio w kodzie, nie wstrzykiwając ich do jądra lub dostawcy usług.
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
);
Ważne
Łącznik uzupełniania czatu Mistral jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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
);
Ważne
Łącznik uzupełniania czatu Google jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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
);
Ważne
Łącznik uściślenia czatu rozpoznawania twarzy jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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
);
Ważne
Łącznik uzupełniania czatu wnioskowania usługi Azure AI jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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
);
Ważne
Łącznik do uzupełniania czatu Ollama jest obecnie w fazie eksperymentalnej. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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();
Ważne
Łącznik uzupełniania czatu Bedrock, który jest wymagany dla systemu Anthropic, jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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.
);
Ważne
Łącznik uzupełniania czatu Bedrock jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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.
);
Ważne
Łącznik uzupełniania czatu ONNX jest obecnie eksperymentalny. Aby go użyć, należy dodać #pragma warning disable SKEXP0070element .
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.
);
W przypadku innych dostawców usług sztucznej inteligencji, którzy obsługują interfejs API uzupełniania czatu OpenAI (np. LLM Studio), możesz użyć następującego kodu, aby ponownie użyć istniejącego łącznika uzupełniania czatu OpenAI.
Ważne
Używanie niestandardowych punktów końcowych z łącznikiem OpenAI jest obecnie eksperymentalne. Aby go użyć, należy dodać #pragma warning disable SKEXP0010element .
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
);
Aby utworzyć usługę uzupełniania czatów, musisz zaimportować niezbędne moduły i utworzyć wystąpienie usługi. Poniżej przedstawiono kroki tworzenia usługi uzupełniania czatu dla każdego dostawcy usług sztucznej inteligencji.
Napiwek
Istnieją trzy metody dostarczania wymaganych informacji do usług sztucznej inteligencji. Możesz przekazać informacje bezpośrednio za pośrednictwem konstruktora, ustawić niezbędne zmienne środowiskowe lub utworzyć plik env w katalogu projektu zawierający zmienne środowiskowe. Możesz odwiedzić tę stronę, aby znaleźć wszystkie wymagane zmienne środowiskowe dla każdego dostawcy usług sztucznej inteligencji: 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")
Uwaga
Usługa AzureChatCompletion obsługuje również uwierzytelnianie Microsoft Entra. Jeśli nie podasz klucza interfejsu API, usługa podejmie próbę uwierzytelnienia przy użyciu tokenu Entra.
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"],
),
)
Uwaga
Usługa AzureAIInferenceChatCompletion obsługuje również uwierzytelnianie Microsoft Entra. Jeśli nie podasz klucza interfejsu API, usługa podejmie próbę uwierzytelnienia przy użyciu tokenu Entra.
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
)
Uwaga
Usługa Amazon Bedrock nie akceptuje klucza API. Postępuj zgodnie z tym przewodnikiem , aby skonfigurować środowisko.
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
)
Napiwek
Użytkownicy mogą uzyskiwać dostęp do modeli Gemini firmy Google za pośrednictwem platformy Google AI Studio lub Google Vertex. Postępuj zgodnie z tym przewodnikiem , aby skonfigurować środowisko.
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
)
Napiwek
Użytkownicy mogą uzyskiwać dostęp do modeli Gemini firmy Google za pośrednictwem platformy Google AI Studio lub Google Vertex. Postępuj zgodnie z tym przewodnikiem , aby skonfigurować środowisko.
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
)
Napiwek
Dowiedz się więcej o Ollama i pobierz niezbędne oprogramowanie tutaj .
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
)
Możesz od razu rozpocząć korzystanie z usługi uzupełniania lub dodać usługę uzupełniania czatu do jądra. Aby dodać usługę do jądra, możesz użyć następującego kodu.
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)
Możesz utworzyć wystąpienia usługi uzupełniania czatu bezpośrednio i dodać je do jądra lub użyć ich bezpośrednio w kodzie bez wstrzykiwania ich do jądra. Poniższy kod pokazuje, jak utworzyć usługę uzupełniania czatu i dodać ją do jądra.
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();
Pobieranie usług uzupełniania czatów
Po dodaniu usług uzupełniania czatów do jądra można je pobrać przy użyciu metody get service. Poniżej przedstawiono przykład sposobu pobierania usługi uzupełniania czatu z jądra.
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")
Dodanie usługi uzupełniania czatu do jądra nie jest wymagane, jeśli nie musisz używać innych usług w jądrze. Możesz użyć usługi uzupełniania czatu bezpośrednio w kodzie.
Korzystanie z usług uzupełniania czatu
Teraz, gdy masz usługę uzupełniania czatów, możesz jej użyć do generowania odpowiedzi z agenta sztucznej inteligencji. Istnieją dwa główne sposoby korzystania z usługi uzupełniania czatu:
bez przesyłania strumieniowego: czekasz, aż usługa wygeneruje całą odpowiedź przed zwróceniem jej do użytkownika.
przesyłanie strumieniowe: poszczególne fragmenty odpowiedzi są generowane i zwracane do użytkownika w miarę ich tworzenia.
Przed rozpoczęciem należy ręcznie utworzyć wystąpienie ustawień wykonywania, aby korzystać z usługi uzupełniania czatów, jeśli usługa nie została zarejestrowana w jądrze.
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()
Napiwek
Aby zobaczyć, co można skonfigurować w ustawieniach wykonywania, możesz sprawdzić definicję klasy w kodu źródłowego lub zapoznać się z dokumentacją interfejsu API .
Poniżej przedstawiono dwa sposoby generowania odpowiedzi przy użyciu usługi uzupełniania czatów.
Uzupełnianie czatu bez przesyłania strumieniowego
Aby użyć uzupełniania czatu bez przesyłania strumieniowego, możesz użyć następującego kodu, aby wygenerować odpowiedź od agenta sztucznej inteligencji.
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
);
Uzupełnianie czatu przesyłania strumieniowego
Aby użyć uzupełniania czatu przesyłania strumieniowego, możesz użyć następującego kodu, aby wygenerować odpowiedź od agenta sztucznej inteligencji.
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="")
Uwaga
Semantyczne jądro dla języka Java nie obsługuje modelu odpowiedzi przesyłania strumieniowego.
Następne kroki
Po dodaniu usług uzupełniania czatu do projektu Semantic Kernel możesz rozpocząć tworzenie konwersacji z agentem sztucznej inteligencji. Aby dowiedzieć się więcej na temat korzystania z usługi uzupełniania czatów, zapoznaj się z następującymi artykułami: