Dengan penyelesaian obrolan, Anda dapat mensimulasikan percakapan bolak-balik dengan agen AI. Ini tentu saja berguna untuk membuat bot obrolan, tetapi juga dapat digunakan untuk membuat agen otonom yang dapat menyelesaikan proses bisnis, menghasilkan kode, dan banyak lagi. Sebagai jenis model utama yang disediakan oleh OpenAI, Google, Mistral, Facebook, dan lainnya, penyelesaian obrolan adalah layanan AI paling umum yang akan Anda tambahkan ke proyek Kernel Semantik Anda.
Saat memilih model penyelesaian obrolan, Anda harus mempertimbangkan hal berikut:
- Modalitas apa yang didukung model (misalnya, teks, gambar, audio, dll.)?
- Apakah mendukung panggilan fungsi?
- Seberapa cepat menerima dan menghasilkan token?
- Berapa biaya setiap token?
Penting
Dari semua pertanyaan di atas, yang paling penting adalah apakah model mendukung panggilan fungsi. Jika tidak, Anda tidak akan dapat menggunakan model untuk memanggil kode yang ada. Sebagian besar model terbaru dari OpenAI, Google, Mistral, dan Amazon semuanya mendukung panggilan fungsi. Namun, dukungan dari model bahasa kecil masih terbatas.
Menyiapkan lingkungan lokal Anda
Beberapa layanan AI dapat dihosting secara lokal dan mungkin memerlukan beberapa penyiapan. Di bawah ini adalah instruksi bagi mereka yang mendukung ini.
Tidak ada penyiapan lokal.
Tidak ada penyiapan lokal.
Tidak ada penyiapan lokal.
Tidak ada penyiapan lokal.
Tidak ada penyiapan lokal.
Tidak ada penyiapan lokal.
Untuk menjalankan Ollama secara lokal menggunakan docker, gunakan perintah berikut untuk memulai kontainer menggunakan CPU.
docker run -d -v "c:\temp\ollama:/root/.ollama" -p 11434:11434 --name ollama ollama/ollama
Untuk menjalankan Ollama secara lokal menggunakan docker, gunakan perintah berikut untuk memulai kontainer menggunakan GPU.
docker run -d --gpus=all -v "c:\temp\ollama:/root/.ollama" -p 11434:11434 --name ollama ollama/ollama
Setelah kontainer dimulai, luncurkan jendela Terminal untuk kontainer docker, misalnya jika menggunakan desktop docker, pilih Open in Terminal dari tindakan.
Dari terminal ini unduh model yang diperlukan, misalnya di sini kita mengunduh model phi3.
ollama pull phi3
Tidak ada penyiapan lokal.
Tidak ada penyiapan lokal.
Kloning repositori yang berisi model ONNX yang ingin Anda gunakan.
git clone https://huggingface.co/microsoft/Phi-3-mini-4k-instruct-onnx
Tidak ada penyiapan lokal.
Menginstal paket yang diperlukan
Sebelum menambahkan penyelesaian obrolan ke kernel Anda, Anda harus menginstal paket yang diperlukan. Di bawah ini adalah paket yang perlu Anda instal untuk setiap penyedia layanan AI.
dotnet add package Microsoft.SemanticKernel.Connectors.AzureOpenAI
dotnet add package Microsoft.SemanticKernel.Connectors.OpenAI
dotnet add package Microsoft.SemanticKernel.Connectors.MistralAI --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.Google --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.HuggingFace --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.AzureAIInference --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.Ollama --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.Amazon --prerelease
Catatan
Model antropis tersedia di platform Amazon Bedrock. Untuk menggunakan model Antropik, Anda harus menginstal paket konektor Amazon.
dotnet add package Microsoft.SemanticKernel.Connectors.Amazon --prerelease
dotnet add package Microsoft.SemanticKernel.Connectors.Onnx --prerelease
Untuk penyedia layanan AI lain yang mendukung API penyelesaian obrolan OpenAI (misalnya, LLM Studio), Anda dapat menggunakan konektor penyelesaian obrolan OpenAI.
dotnet add package Microsoft.SemanticKernel.Connectors.OpenAI
Membuat layanan penyelesaian obrolan
Setelah menginstal paket yang diperlukan, Anda dapat membuat layanan penyelesaian obrolan. Di bawah ini adalah beberapa cara Anda dapat membuat layanan penyelesaian obrolan menggunakan Semantic Kernel.
Menambahkan langsung ke kernel
Untuk menambahkan layanan penyelesaian obrolan, Anda dapat menggunakan kode berikut untuk menambahkannya ke penyedia layanan dalam kernel.
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();
Penting
Konektor penyelesaian percakapan Mistral saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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();
Penting
Konektor penyelesaian obrolan Google saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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();
Penting
Konektor penyelesaian obrolan Hugging Face saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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();
Penting
Konektor penyelesaian chat Inferensi Azure AI saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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();
Penting
Konektor penyelesaian obrolan Ollama saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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();
Penting
Konektor penyelesaian obrolan Bedrock yang diperlukan untuk Anthropic saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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();
Penting
Konektor penyelesaian obrolan Bedrock saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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();
Penting
Konektor penyelesaian obrolan ONNX saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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();
Untuk penyedia layanan AI lain yang mendukung API penyelesaian obrolan OpenAI (misalnya, LLM Studio), Anda dapat menggunakan kode berikut untuk menggunakan kembali konektor penyelesaian obrolan OpenAI yang ada.
Penting
Menggunakan titik akhir kustom dengan konektor OpenAI saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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();
Menggunakan injeksi dependensi
Jika Anda menggunakan injeksi dependensi, Anda mungkin ingin menambahkan layanan AI langsung ke penyedia layanan. Ini berguna jika Anda ingin membuat singleton layanan AI Anda dan menggunakannya kembali di kernel sementara.
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);
});
Penting
Konektor penyelesaian percakapan Mistral saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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);
});
Penting
Konektor penyelesaian obrolan Google saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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);
});
Penting
Konektor penyelesaian obrolan Hugging Face saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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);
});
Penting
Konektor penyelesaian chat Inferensi Azure AI saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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);
});
Penting
Konektor penyelesaian obrolan Ollama saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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);
});
Penting
Konektor penyelesaian obrolan Bedrock yang diperlukan untuk Anthropic saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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);
});
Penting
Konektor penyelesaian obrolan Bedrock saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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);
});
Penting
Konektor penyelesaian obrolan ONNX saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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);
});
Untuk penyedia layanan AI lain yang mendukung API penyelesaian obrolan OpenAI (misalnya, LLM Studio), Anda dapat menggunakan kode berikut untuk menggunakan kembali konektor penyelesaian obrolan OpenAI yang ada.
Penting
Menggunakan titik akhir kustom dengan konektor OpenAI saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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);
});
Membuat instans mandiri
Terakhir, Anda dapat membuat instans layanan secara langsung sehingga Anda dapat menambahkannya ke kernel nanti atau menggunakannya langsung dalam kode Anda tanpa pernah menyuntikkannya ke kernel atau di penyedia layanan.
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
);
Penting
Konektor penyelesaian percakapan Mistral saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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
);
Penting
Konektor penyelesaian obrolan Google saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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
);
Penting
Konektor penyelesaian obrolan Hugging Face saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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
);
Penting
Konektor penyelesaian chat Inferensi Azure AI saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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
);
Penting
Konektor penyelesaian obrolan Ollama saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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();
Penting
Konektor penyelesaian obrolan Bedrock yang diperlukan untuk Anthropic saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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.
);
Penting
Konektor penyelesaian obrolan Bedrock saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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.
);
Penting
Konektor penyelesaian obrolan ONNX saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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.
);
Untuk penyedia layanan AI lain yang mendukung API penyelesaian obrolan OpenAI (misalnya, LLM Studio), Anda dapat menggunakan kode berikut untuk menggunakan kembali konektor penyelesaian obrolan OpenAI yang ada.
Penting
Menggunakan titik akhir kustom dengan konektor OpenAI saat ini bersifat eksperimental. Untuk menggunakannya, Anda harus menambahkan #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
);
Untuk membuat layanan penyelesaian obrolan, Anda perlu menginstal dan mengimpor modul yang diperlukan dan membuat instans layanan. Di bawah ini adalah langkah-langkah untuk menginstal dan membuat layanan penyelesaian obrolan untuk setiap penyedia layanan AI.
Menginstal paket yang diperlukan
Paket Kernel Semantik dilengkapi dengan semua paket yang diperlukan untuk menggunakan Azure OpenAI. Tidak ada paket tambahan yang diperlukan untuk menggunakan Azure OpenAI.
Paket Kernel Semantik dilengkapi dengan semua paket yang diperlukan untuk menggunakan OpenAI. Tidak ada paket tambahan yang diperlukan untuk menggunakan 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]
Membuat layanan penyelesaian obrolan
Ujung
Ada tiga metode untuk memberikan informasi yang diperlukan ke layanan AI. Anda dapat memberikan informasi secara langsung melalui konstruktor, mengatur variabel lingkungan yang diperlukan, atau membuat file .env dalam direktori proyek Anda yang berisi variabel lingkungan. Anda dapat mengunjungi halaman ini untuk menemukan semua variabel lingkungan yang diperlukan untuk setiap penyedia layanan AI: https://github.com/microsoft/semantic-kernel/blob/main/python/samples/concepts/setup/ALL_SETTINGS.md
Ujung
Layanan OpenAIChatCompletion, AzureChatCompletion, dan AzureAIInferenceChatCompletion memungkinkan Anda mengonfigurasi instruction_role argumen kata kunci. Parameter ini mengontrol bagaimana instruksi sistem disajikan kepada model dan menerima "system" atau "developer". Saat menggunakan model penalaran, Anda harus mengonfigurasikan instruction_role="developer". Setiap pesan peran system yang ditemukan ChatHistory akan secara otomatis dipetakan ke peran developer sebelum permintaan dikirim ke model.
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")
Catatan
Layanan juga mendukung autentikasi Microsoft Entra . Jika Anda tidak memberikan kunci API, layanan akan mencoba mengautentikasi menggunakan token 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"],
),
)
Catatan
Layanan juga mendukung autentikasi Microsoft Entra . Jika Anda tidak memberikan kunci API, layanan akan mencoba mengautentikasi menggunakan token 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
)
Catatan
Amazon Bedrock tidak menerima kunci API. Ikuti panduan ini untuk mengonfigurasi lingkungan Anda.
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
)
Ujung
Pengguna dapat mengakses model Gemini Google melalui google AI Studio atau platform Google Vertex. Ikuti panduan ini untuk mengonfigurasi lingkungan Anda.
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
)
Ujung
Pengguna dapat mengakses model Gemini Google melalui google AI Studio atau platform Google Vertex. Ikuti panduan ini untuk mengonfigurasi lingkungan Anda.
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
)
Ujung
Pelajari lebih lanjut tentang Ollama dan unduh perangkat lunak yang diperlukan dari di sini.
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
)
Anda dapat langsung mulai menggunakan layanan penyelesaian atau menambahkan layanan penyelesaian obrolan ke kernel. Anda dapat menggunakan kode berikut untuk menambahkan layanan ke kernel.
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)
Anda dapat membuat instans layanan penyelesaian obrolan secara langsung dan menambahkannya ke kernel atau menggunakannya langsung dalam kode Anda tanpa menyuntikkannya ke kernel. Kode berikut menunjukkan cara membuat layanan penyelesaian obrolan dan menambahkannya ke kernel.
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();
Mengambil layanan penyelesaian obrolan
Setelah menambahkan layanan penyelesaian obrolan ke kernel, Anda dapat mengambilnya menggunakan metode get service. Di bawah ini adalah contoh bagaimana Anda dapat mengambil layanan penyelesaian obrolan dari kernel.
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")
ChatCompletionService chatCompletionService = kernel.getService(ChatCompletionService.class);
Ujung
Menambahkan layanan penyelesaian obrolan ke kernel tidak diperlukan jika Anda tidak perlu menggunakan layanan lain di kernel. Anda dapat menggunakan layanan penyelesaian obrolan langsung dalam kode Anda.
Menggunakan layanan penyelesaian obrolan
Sekarang setelah Anda memiliki layanan penyelesaian obrolan, Anda dapat menggunakannya untuk menghasilkan respons dari agen AI. Ada dua cara utama untuk menggunakan layanan penyelesaian obrolan:
-
Non-streaming: Anda menunggu layanan menghasilkan seluruh respons sebelum mengembalikannya kepada pengguna.
-
Streaming: Potongan individual dari respons dihasilkan dan dikembalikan kepada pengguna secepatnya setelah dibuat.
Sebelum memulai, Anda harus membuat instans pengaturan eksekusi secara manual untuk menggunakan layanan penyelesaian obrolan jika Anda tidak mendaftarkan layanan dengan kernel.
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()
Ujung
Untuk melihat apa yang dapat Anda konfigurasikan dalam pengaturan eksekusi, Anda dapat memeriksa definisi kelas dalam kode sumber atau memeriksa dokumentasi API .
Di bawah ini adalah dua cara Anda dapat menggunakan layanan penyelesaian obrolan untuk menghasilkan respons.
Penyelesaian obrolan non-streaming
Untuk menggunakan penyelesaian obrolan non-streaming, Anda dapat menggunakan kode berikut untuk menghasilkan respons dari agen AI.
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_service.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
);
Penyelesaian obrolan streaming
Untuk menggunakan penyelesaian obrolan streaming, Anda dapat menggunakan kode berikut untuk menghasilkan respons dari agen AI.
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_service.get_streaming_chat_message_content(
chat_history=history,
settings=execution_settings,
)
async for chunk in response:
print(chunk, end="")
Catatan
Kernel Semantik untuk Java tidak mendukung model respons streaming.
Langkah berikutnya
Setelah menambahkan layanan penyelesaian obrolan ke proyek Semantic Kernel, Anda dapat mulai membuat percakapan dengan agen AI Anda. Untuk mempelajari selengkapnya tentang menggunakan layanan penyelesaian obrolan, lihat artikel berikut ini: