Penyelesaian obrolan

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.

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

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();

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);
});

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
);

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.

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.

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();

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()

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: