Aracılığıyla paylaş


Sohbet tamamlama

Sohbet tamamlandıktan sonra yapay zeka aracısı ile bir ileri geri konuşmanın benzetimini yapabilirsiniz. Bu, sohbet botları oluşturmak için elbette yararlıdır, ancak iş süreçlerini tamamlayabilen, kod oluşturabilen ve daha fazlasını yapabilecek otonom aracılar oluşturmak için de kullanılabilir. OpenAI, Google, Mistral, Facebook ve diğerleri tarafından sağlanan birincil model türü olarak sohbet tamamlama, Anlam Çekirdeği projenize ekleyeceğiniz en yaygın yapay zeka hizmetidir.

Bir sohbet tamamlama modeli seçerken aşağıdakileri göz önünde bulundurmanız gerekir:

  • Model hangi modaliteleri (örneğin, metin, görüntü, ses vb.) destekler?
  • İşlev çağrılarını destekliyor mu?
  • Belirteçleri ne kadar hızlı alır ve oluşturur?
  • Her belirtecin maliyeti ne kadardır?

Önemli

Yukarıdaki tüm sorulardan en önemlisi, modelin işlev çağrısını destekleyip desteklemediğidir. Aksi takdirde, mevcut kodunuzu çağırmak için modeli kullanamazsınız. OpenAI, Google, Mistral ve Amazon'un en son modellerinin çoğu işlev çağrısını destekler. Ancak küçük dil modellerinin desteği hala sınırlıdır.

Yerel ortamınızı ayarlama

Yapay Zeka Hizmetlerinden bazıları yerel olarak barındırılabilir ve biraz kurulum gerektirebilir. Aşağıda bunu destekleyenler için yönergeler yer almaktadır.

Yerel kurulum yok.

Gerekli paketleri yükleme

Çekirdeğinize sohbet tamamlama eklemeden önce gerekli paketleri yüklemeniz gerekir. Her bir yapay zeka hizmet sağlayıcısı için yüklemeniz gereken paketler aşağıda belirtilmiştir.

dotnet add package Microsoft.SemanticKernel.Connectors.AzureOpenAI

Sohbet tamamlama hizmetleri oluşturma

Artık gerekli paketleri yüklediğinize göre sohbet tamamlama hizmetleri oluşturabilirsiniz. Anlam Çekirdeği kullanarak sohbet tamamlama hizmetleri oluşturmanın çeşitli yolları aşağıdadır.

Doğrudan çekreğe ekleme

Sohbet tamamlama hizmeti eklemek için aşağıdaki kodu kullanarak çekirdeğin iç hizmet sağlayıcısına ekleyebilirsiniz.

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

Bağımlılık eklemeyi kullanma

Bağımlılık ekleme kullanıyorsanız yapay zeka hizmetlerinizi doğrudan hizmet sağlayıcısına eklemek isteyebilirsiniz. Yapay zeka hizmetlerinizin tek teklerini oluşturmak ve bunları geçici çekirdeklerde yeniden kullanmak istiyorsanız bu yararlı olur.

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

Tek başına örnekler oluşturma

Son olarak, hizmetin örneklerini doğrudan oluşturabilirsiniz; böylece bunları daha sonra bir çekçek içine ekleyebilir veya bunları hiç çekirdek veya hizmet sağlayıcısına eklemeden doğrudan kodunuz içinde kullanabilirsiniz.

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

Sohbet tamamlama hizmeti oluşturmak için gerekli modülleri yükleyip içeri aktarmanız ve hizmetin bir örneğini oluşturmanız gerekir. Aşağıda, her yapay zeka hizmet sağlayıcısı için bir sohbet tamamlama hizmeti yükleme ve oluşturma adımları yer almaktadır.

Gerekli paketleri yükleme

Anlam Çekirdeği paketi, Azure OpenAI'yi kullanmak için gerekli tüm paketlerle birlikte gelir. Azure OpenAI'yi kullanmak için ek paket gerekmez.

Sohbet tamamlama hizmeti oluşturma

Bahşiş

Yapay zeka hizmetlerine gerekli bilgileri sağlamak için üç yöntem vardır. Bilgileri doğrudan oluşturucu aracılığıyla sağlayabilir, gerekli ortam değişkenlerini ayarlayabilir veya proje dizininizde ortam değişkenlerini içeren bir .env dosyası oluşturabilirsiniz. Her yapay zeka hizmet sağlayıcısı için gerekli tüm ortam değişkenlerini bulmak için bu sayfayı ziyaret edebilirsiniz: 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")

Not

AzureChatCompletion hizmeti Microsoft Entra kimlik doğrulamasını da destekler. BIR API anahtarı sağlamazsanız hizmet, Entra belirtecini kullanarak kimlik doğrulamayı dener.

Tamamlama hizmetini hemen kullanmaya başlayabilir veya sohbet tamamlama hizmetini bir çekırdeğe ekleyebilirsiniz. Çekirdeğine hizmet eklemek için aşağıdaki kodu kullanabilirsiniz.

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)

Sohbet tamamlama hizmetinin örneklerini doğrudan oluşturabilir ve bunları bir çekreğe ekleyebilir veya çekirdeğinize eklemeden doğrudan kodunuzda kullanabilirsiniz. Aşağıdaki kod, bir sohbet tamamlama hizmetinin nasıl oluşturulacağını ve çekirdeğine nasıl ekleneceğini gösterir.

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

Sohbet tamamlama hizmetlerini alma

Sohbet tamamlama hizmetlerini çekirdeğinize ekledikten sonra get service yöntemini kullanarak bunları alabilirsiniz. Aşağıda çekirdekten bir sohbet tamamlama hizmetini nasıl alabileceğinize ilişkin bir örnek verilmiştir.

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

Bahşiş

Çekirdekteki diğer hizmetleri kullanmanız gerekmiyorsa sohbet tamamlama hizmetini çekirdekte eklemek gerekmez. Sohbet tamamlama hizmetini doğrudan kodunuzda kullanabilirsiniz.

Sohbet tamamlama hizmetlerini kullanma

Artık bir sohbet tamamlama hizmetiniz olduğuna göre, yapay zeka aracısından yanıtlar oluşturmak için bunu kullanabilirsiniz. Sohbet tamamlama hizmetini kullanmanın iki ana yolu vardır:

  • Akışsız: Kullanıcıya döndürmeden önce hizmetin yanıtın tamamını oluşturmasını beklersiniz.
  • Akış: Yanıtın tek tek öbekleri oluşturulur ve oluşturuldukları anda kullanıcıya döndürülür.

Başlamadan önce, hizmeti çekirdekle kaydetmediyseniz sohbet tamamlama hizmetini kullanmak için el ile bir yürütme ayarları örneği oluşturmanız gerekir.

from semantic_kernel.connectors.ai.open_ai import OpenAIChatPromptExecutionSettings

execution_settings = OpenAIChatPromptExecutionSettings()

Bahşiş

Yürütme ayarlarında neler yapılandırabileceğinizi görmek için kaynak kodundaki sınıf tanımını denetleyebilirsiniz veyaAPI belgelerine göz atabilirsiniz.

Yanıt oluşturmak için sohbet tamamlama hizmetini kullanmanın iki yolu aşağıdadır.

Akışsız sohbet tamamlama

Akışsız sohbet tamamlama özelliğini kullanmak için aşağıdaki kodu kullanarak yapay zeka aracısından bir yanıt oluşturabilirsiniz.

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

Akış sohbeti tamamlama

Akış sohbeti tamamlama özelliğini kullanmak için aşağıdaki kodu kullanarak yapay zeka aracısından bir yanıt oluşturabilirsiniz.

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="")

Not

Java için Anlam Çekirdeği akış yanıt modelini desteklemez.

Sonraki adımlar

Artık Semantik Çekirdek projenize sohbet tamamlama hizmetleri eklediğinize göre yapay zeka aracınızla konuşmalar oluşturmaya başlayabilirsiniz. Sohbet tamamlama hizmetini kullanma hakkında daha fazla bilgi edinmek için aşağıdaki makalelere göz atın: