Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Birden çok eklentiye sahip olduktan sonra yapay zeka aracınızın bir kullanıcının ihtiyacını çözmek için bunları birlikte kullanabilmesi için bir yönteme ihtiyacınız olur. Planlama burada devreye girer.
Semantik Çekirdek daha önce yapay zekadan çağrılacak işlevleri seçmesini istemek için istemleri kullanan planlayıcı kavramını ortaya atmıştı. Anlam Çekirdeği tanıtıldığından beri OpenAI, modelin bir işlevi çağırması için yerel bir yöntem sundu: işlev çağrısı. Gemini, Claude ve Mistral gibi diğer yapay zeka modelleri o zamandan beri işlev çağrılarını çekirdek bir özellik olarak benimseyerek modeller arası desteklenen bir özellik haline getirdi.
Bu ilerlemeler nedeniyle Anlam Çekirdeği, görevleri planlamanın ve yürütmenin birincil yolu olarak işlev çağrısını kullanacak şekilde gelişti.
Önemli
İşlev çağrısı yalnızca 0613 veya daha yeni olan OpenAI modellerinde kullanılabilir. Eski bir model (örneğin, 0314) kullanıyorsanız, bu işlev bir hata döndürür. Bu özelliğin avantajlarından yararlanmak için en son OpenAI modellerini kullanmanızı öneririz.
İşlev çağrısı nasıl "plan" oluşturur?
en basiti, işlev çağrısı yalnızca bir yapay zekanın doğru parametrelerle işlev çağırmak için bir yoldur. Şu örneği ele alalım: Bir kullanıcı ampulü yakmak ister. Yapay zekanın doğru eklentiye sahip olduğunu varsayarsak, ışığı açmak için işlevi çağırabilir.
| Rol | Mesaj |
|---|---|
| 🔵 kullanıcı | Lütfen ışık #1'i açın |
| 🔴 Yardımcısı (işlev çağrısı) | Lights.change_state(1, { "isOn": true }) |
| 🟢 Aracı | { "id": 1, "name": "Table Lamp", "isOn": true, "brightness": 100, "hex": "FF0000" } |
| 🔴 Yardımcısı | Lamba artık açık |
Peki ya kullanıcı ışığın kimliğini bilmiyorsa? Ya da ya kullanıcı tüm ışıkları açmak isterse? Planlama burada devreye girer. Günümüzün LLM modelleri, kullanıcının ihtiyacını çözmek için işlevleri yinelemeli olarak çağırabilir. Bu, yapay zekanın bir işlevi çağırabileceği, sonucu denetleyebileceği ve ardından ne yapılacağına karar verebildiği bir geri bildirim döngüsü oluşturarak gerçekleştirilir.
Örneğin, bir kullanıcı yapay zekadan ampulü "değiştirmesini" isteyebilir. Yapay zekanın açılıp açılmayacağı konusunda karar vermeden önce ampulün durumunu denetlemesi gerekir.
| Rol | Mesaj |
|---|---|
| 🔵 kullanıcı | Lütfen tüm ışıkları açın |
| 🔴 Yardımcısı (işlev çağrısı) | Lights.get_lights() |
| 🟢 Aracı | { "lights": [ { "id": 1, "name": "Table Lamp", "isOn": true, "brightness": 100, "hex": "FF0000" }, { "id": 2, "name": "Ceiling Light", "isOn": false, "brightness": 0, "hex": "FFFFFF" } ] } |
| 🔴 Yardımcısı (işlev çağrısı) |
Lights.change_state(1, { "isOn": false })
Lights.change_state(2, { "isOn": true })
|
| 🟢 Aracı | { "id": 1, "name": "Table Lamp", "isOn": false, "brightness": 0, "hex": "FFFFFF" } |
| 🟢 Aracı | { "id": 2, "name": "Ceiling Light", "isOn": true, "brightness": 100, "hex": "FF0000" } |
| 🔴 Yardımcısı | Işıklar açılıp kapatıldı |
Uyarı
Bu örnekte paralel işlev çağrısı da gördünüz. Burası yapay zekanın aynı anda birden çok işlevi çağırabildiği yerdir. Bu, yapay zekanın karmaşık görevleri daha hızlı çözmesine yardımcı olabilecek güçlü bir özelliktir. 1106'da OpenAI modellerine eklendi.
Otomatik planlama döngüsü
Anlam Çekirdeği olmadan işlev çağrısının desteklenmesi nispeten karmaşıktır. Aşağıdakileri gerçekleştirecek bir döngü yazmanız gerekir:
- İşlevlerinizin her biri için JSON şemaları oluşturma
- LLM'ye önceki sohbet geçmişini ve işlev şemalarını sağlayın
- LLM'nin yanıtını çözümleyerek mesajla yanıt vermek mi yoksa bir işlev çağırmak mı istediğini belirlemek için
- LLM bir işlevi çağırmak istiyorsa, LLM'nin yanıtından işlev adını ve parametrelerini ayrıştırmanız gerekir
- İşlevi doğru parametrelerle çağırma
- LLM'nin bundan sonra ne yapması gerektiğini belirleyebilmesi için işlevin sonuçlarını döndürün
- LLM görevi tamamlayana veya kullanıcının yardımına ihtiyaç duyana kadar 2-6 arası adımları yineleyin
Anlam Çekirdeği'nde, bu döngünün sizin için otomatikleştirilmesiyle işlev çağrısının kullanımını kolaylaştırırız. Bu, kullanıcınızın ihtiyaçlarını çözmek için gereken eklentileri oluşturmaya odaklanmanızı sağlar.
Uyarı
İşlev çağırma döngüsünün nasıl çalıştığını anlamak, yüksek performanslı ve güvenilir yapay zeka aracıları oluşturmak için gereklidir. Döngünün nasıl çalıştığına ayrıntılı bir bakış için işlev çağırma makalesine bakın.
Otomatik işlev çağrısı kullanma
Anlam Çekirdeği'nde otomatik işlev çağrısını kullanmak için aşağıdakileri yapmanız gerekir:
- Eklentiyi çekirdekle kaydetme
- Yapay zekaya işlevleri otomatik olarak çağırmasını söyleyen bir yürütme ayarları nesnesi oluşturma
- Sohbet geçmişini ve çekirdeği kullanarak sohbet tamamlama hizmetini çağırın
Tavsiye
Aşağıdaki kod örneği burada tanımlanan öğesini LightsPlugin kullanır.
using System.ComponentModel;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;
// 1. Create the kernel with the Lights plugin
var builder = Kernel.CreateBuilder().AddAzureOpenAIChatCompletion(modelId, endpoint, apiKey);
builder.Plugins.AddFromType<LightsPlugin>("Lights");
Kernel kernel = builder.Build();
var chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();
// 2. Enable automatic function calling
OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new()
{
FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
};
var history = new ChatHistory();
string? userInput;
do {
// Collect user input
Console.Write("User > ");
userInput = Console.ReadLine();
// Add user input
history.AddUserMessage(userInput);
// 3. Get the response from the AI with automatic function calling
var result = await chatCompletionService.GetChatMessageContentAsync(
history,
executionSettings: openAIPromptExecutionSettings,
kernel: kernel);
// Print the results
Console.WriteLine("Assistant > " + result);
// Add the message from the agent to the chat history
history.AddMessage(result.Role, result.Content ?? string.Empty);
} while (userInput is not null)
import asyncio
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai import FunctionChoiceBehavior
from semantic_kernel.connectors.ai.chat_completion_client_base import ChatCompletionClientBase
from semantic_kernel.connectors.ai.open_ai import (
AzureChatCompletion,
AzureChatPromptExecutionSettings,
)
from semantic_kernel.contents import ChatHistory
from semantic_kernel.functions import kernel_function
async def main():
# 1. Create the kernel with the Lights plugin
kernel = Kernel()
kernel.add_service(AzureChatCompletion())
kernel.add_plugin(
LightsPlugin(),
plugin_name="Lights",
)
chat_completion: AzureChatCompletion = kernel.get_service(type=ChatCompletionClientBase)
# 2. Enable automatic function calling
execution_settings = AzureChatPromptExecutionSettings()
execution_settings.function_choice_behavior = FunctionChoiceBehavior.Auto()
# Create a history of the conversation
history = ChatHistory()
userInput = None
while True:
# Collect user input
userInput = input("User > ")
# Terminate the loop if the user says "exit"
if userInput == "exit":
break
# Add user input to the history
history.add_user_message(userInput)
# 3. Get the response from the AI with automatic function calling
result = await chat_completion.get_chat_message_content(
chat_history=history,
settings=execution_settings,
kernel=kernel,
)
# Print the results
print("Assistant > " + str(result))
# Add the message from the agent to the chat history
history.add_message(result)
# Run the main function
if __name__ == "__main__":
asyncio.run(main())
OpenAIAsyncClient client = new OpenAIClientBuilder()
.credential(new AzureKeyCredential(AZURE_CLIENT_KEY))
.endpoint(CLIENT_ENDPOINT)
.buildAsyncClient();
// Import the LightsPlugin
KernelPlugin lightPlugin = KernelPluginFactory.createFromObject(new LightsPlugin(),
"LightsPlugin");
// Create your AI service client
ChatCompletionService chatCompletionService = OpenAIChatCompletion.builder()
.withModelId(MODEL_ID)
.withOpenAIAsyncClient(client)
.build();
// Create a kernel with Azure OpenAI chat completion and plugin
Kernel kernel = Kernel.builder()
.withAIService(ChatCompletionService.class, chatCompletionService)
.withPlugin(lightPlugin)
.build();
// Add a converter to the kernel to show it how to serialise LightModel objects into a prompt
ContextVariableTypes
.addGlobalConverter(
ContextVariableTypeConverter.builder(LightModel.class)
.toPromptString(new Gson()::toJson)
.build());
// Enable planning
InvocationContext invocationContext = new InvocationContext.Builder()
.withReturnMode(InvocationReturnMode.LAST_MESSAGE_ONLY)
.withToolCallBehavior(ToolCallBehavior.allowAllKernelFunctions(true))
.build();
// Create a history to store the conversation
ChatHistory history = new ChatHistory();
// Initiate a back-and-forth chat
Scanner scanner = new Scanner(System.in);
String userInput;
do {
// Collect user input
System.out.print("User > ");
userInput = scanner.nextLine();
// Add user input
history.addUserMessage(userInput);
// Prompt AI for response to users input
List<ChatMessageContent<?>> results = chatCompletionService
.getChatMessageContentsAsync(history, kernel, invocationContext)
.block();
for (ChatMessageContent<?> result : results) {
// Print the results
if (result.getAuthorRole() == AuthorRole.ASSISTANT && result.getContent() != null) {
System.out.println("Assistant > " + result);
}
// Add the message from the agent to the chat history
history.addMessage(result);
}
} while (userInput != null && !userInput.isEmpty());
Otomatik işlev çağrısı kullandığınızda, otomatik planlama döngüsündeki tüm adımlar sizin için işlenir ve nesneye ChatHistory eklenir. İşlev çağırma döngüsü tamamlandıktan sonra, semantik çekirdek tarafından yapılan tüm işlev çağrılarını ve sonuçları görmek için nesnesini inceleyebilirsiniz ChatHistory .
Stepwise ve Handlebars planlayıcılarına ne oldu?
Stepwise ve Handlebars planlayıcıları kullanım dışı bırakıldı ve Anlam Çekirdeği paketinden kaldırıldı. Bu planlayıcılar artık Python, .NET veya Java'da desteklenmiyor.
Çoğu senaryoda hem daha güçlü hem de kullanımı daha kolay olan işlev çağrısını kullanmanızı öneririz.
Mevcut çözümleri güncelleştirmek için Adım Adım Planner Geçiş Kılavuzumuzu izleyin.
Tavsiye
Yeni yapay zeka aracıları için kullanım dışı bırakılan planlayıcılar yerine işlev çağrısı kullanın. Daha iyi esneklik, yerleşik araç desteği ve daha basit bir geliştirme deneyimi sunar.
Sonraki Adımlar
Planlayıcıların Anlam Çekirdeği'nde nasıl çalıştığını anladığınıza göre yapay zeka aracınızı nasıl etkilediği hakkında daha fazla bilgi edinebilir, böylece kullanıcılarınız adına görevleri en iyi şekilde planlayabilir ve yürütebilirler.