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.
Anlam Çekirdeği, şu anki işlev çağırma özelliklerini temsil eden ToolCallBehavior sınıfından, yeni ve gelişmiş özellikleri temsil eden FunctionChoiceBehavior sınıfına aşamalı olarak geçiş yapıyor.
Yeni özellik hizmet agnostiktir ve geçerli modelden farklı olarak belirli bir yapay zeka hizmetine bağlı değildir. Bu nedenle Semantik Çekirdek soyutlamalarında bulunur ve işlev çağırma özellikli yapay zeka modelleriyle çalışan tüm yapay zeka bağlayıcıları tarafından kullanılır.
Bu kılavuz, kodunuzu yeni işlev çağırma özelliklerine geçirmenize yardımcı olmak için tasarlanmıştır.
ToolCallBehavior.AutoInvokeKernelFunctions davranışını taşıma
Davranış ToolCallBehavior.AutoInvokeKernelFunctions , yeni modeldeki FunctionChoiceBehavior.Auto davranışla eşdeğerdir.
// Before
var executionSettings = new OpenAIPromptExecutionSettings { ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions };
// After
var executionSettings = new OpenAIPromptExecutionSettings { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() };
ToolCallBehavior.EnableKernelFunctions davranışını aktarma
ToolCallBehavior.EnableKernelFunctions davranışı, devre dışı bırakılmış otomatik çağırma ile FunctionChoiceBehavior.Auto davranışına eşdeğerdir.
// Before
var executionSettings = new OpenAIPromptExecutionSettings { ToolCallBehavior = ToolCallBehavior.EnableKernelFunctions };
// After
var executionSettings = new OpenAIPromptExecutionSettings { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(autoInvoke: false) };
ToolCallBehavior.EnableFunctions davranışını taşımak
Bu ToolCallBehavior.EnableFunctions davranış, devre dışı bırakılmış otomatik çağırmaya sahip işlevlerin listesiyle yapılandırılan davranışa eşdeğerdir FunctionChoiceBehavior.Auto .
var function = kernel.CreateFunctionFromMethod(() => DayOfWeek.Friday, "GetDayOfWeek", "Returns the current day of the week.");
// Before
var executionSettings = new OpenAIPromptExecutionSettings() { ToolCallBehavior = ToolCallBehavior.EnableFunctions(functions: [function.Metadata.ToOpenAIFunction()]) };
// After
var executionSettings = new OpenAIPromptExecutionSettings { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(functions: [function], autoInvoke: false) };
ToolCallBehavior.RequireFunction davranışını aktarma
Bu ToolCallBehavior.RequireFunction davranış, devre dışı bırakılmış otomatik çağırmaya sahip işlevlerin listesiyle yapılandırılan davranışa eşdeğerdir FunctionChoiceBehavior.Required .
var function = kernel.CreateFunctionFromMethod(() => DayOfWeek.Friday, "GetDayOfWeek", "Returns the current day of the week.");
// Before
var executionSettings = new OpenAIPromptExecutionSettings() { ToolCallBehavior = ToolCallBehavior.RequireFunction(functions: [function.Metadata.ToOpenAIFunction()]) };
// After
var executionSettings = new OpenAIPromptExecutionSettings { FunctionChoiceBehavior = FunctionChoiceBehavior.Required(functions: [function], autoInvoke: false) };
Bağlayıcıya özgü işlev çağrısı sınıflarının kullanımını değiştirme
Anlam Çekirdeği'ndeki işlev çağırma işlevi, geliştiricilerin yapay zeka modeli tarafından seçilen işlevlerin listesine iki şekilde erişmesini sağlar:
- OpenAI'ye özgü
ChatToolCallöğesinin sohbet geçmişindekiChatCompletionsFunctionToolCallözelliği aracılığıyla sağlananToolCallsveyaOpenAIChatMessageContentgibi bağlayıcıya özgü işlev çağrı sınıflarını kullanma. - bağlayıcıdan bağımsız
FunctionCallContentişlev çağrı sınıflarını, sohbet geçmişinde yer alan bağlayıcıdan bağımsızItemsnesnesininChatMessageContentözelliği aracılığıyla kullanarak elde edebilirsiniz.
Her iki yol da geçerli ve yeni modeller tarafından şu anda desteklenmektedir. Ancak, daha esnek olduğundan ve kodunuzun yeni işlev çağırma modelini destekleyen tüm yapay zeka bağlayıcılarıyla çalışmasına izin verdiğinden işlev çağrılarına erişmek için bağlayıcıdan bağımsız yaklaşımı kullanmanızı kesinlikle öneririz. Ayrıca, geçerli modelin yakında kullanım dışı bırakılacağını göz önünde bulundurarak, gelecekte hataya neden olan değişiklikleri önlemek için kodunuzu yeni modele geçirmek için iyi bir zaman.
Bu nedenle, bu kod parçacığında olduğu gibi El ile İşlev Çağırma'yı bağlayıcıya özgü işlev çağrı sınıfları ile kullanırsanız:
using System.Text.Json;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using OpenAI.Chat;
var chatHistory = new ChatHistory();
var settings = new OpenAIPromptExecutionSettings() { ToolCallBehavior = ToolCallBehavior.EnableKernelFunctions };
var result = await chatCompletionService.GetChatMessageContentAsync(chatHistory, settings, kernel);
// Current way of accessing function calls using connector specific classes.
var toolCalls = ((OpenAIChatMessageContent)result).ToolCalls.OfType<ChatToolCall>().ToList();
while (toolCalls.Count > 0)
{
// Adding function call from AI model to chat history
chatHistory.Add(result);
// Iterating over the requested function calls and invoking them
foreach (var toolCall in toolCalls)
{
string content = kernel.Plugins.TryGetFunctionAndArguments(toolCall, out KernelFunction? function, out KernelArguments? arguments) ?
JsonSerializer.Serialize((await function.InvokeAsync(kernel, arguments)).GetValue<object>()) :
"Unable to find function. Please try again!";
// Adding the result of the function call to the chat history
chatHistory.Add(new ChatMessageContent(
AuthorRole.Tool,
content,
metadata: new Dictionary<string, object?>(1) { { OpenAIChatMessageContent.ToolIdProperty, toolCall.Id } }));
}
// Sending the functions invocation results back to the AI model to get the final response
result = await chatCompletionService.GetChatMessageContentAsync(chatHistory, settings, kernel);
toolCalls = ((OpenAIChatMessageContent)result).ToolCalls.OfType<ChatToolCall>().ToList();
}
Bağlayıcıdan bağımsız sınıfları kullanmak için yeniden düzenleyebilirsiniz:
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
var chatHistory = new ChatHistory();
var settings = new PromptExecutionSettings() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(autoInvoke: false) };
var messageContent = await chatCompletionService.GetChatMessageContentAsync(chatHistory, settings, kernel);
// New way of accessing function calls using connector agnostic function calling model classes.
var functionCalls = FunctionCallContent.GetFunctionCalls(messageContent).ToArray();
while (functionCalls.Length != 0)
{
// Adding function call from AI model to chat history
chatHistory.Add(messageContent);
// Iterating over the requested function calls and invoking them
foreach (var functionCall in functionCalls)
{
var result = await functionCall.InvokeAsync(kernel);
chatHistory.Add(result.ToChatMessage());
}
// Sending the functions invocation results to the AI model to get the final response
messageContent = await chatCompletionService.GetChatMessageContentAsync(chatHistory, settings, kernel);
functionCalls = FunctionCallContent.GetFunctionCalls(messageContent).ToArray();
}
OpenAI AI bağlayıcısını kullanan kodunuzu nasıl taşıyacağınızı gösteren yukarıdaki kod parçacıkları. İkizler ve Mistral AI bağlayıcıları yeni işlev çağırma modelini destekleyecek şekilde güncelleştirildiğinde benzer bir geçiş süreci uygulanabilir.
Sonraki adımlar
Kodunuzu yeni işlev çağırma modeline geçirdikten sonra işlev çağırma davranışları bölümüne bakarak modelin belirli senaryolarınıza daha uygun olabilecek çeşitli yönlerini yapılandırmayı öğrenmeye devam edebilirsiniz.
Yakında
Daha fazla bilgi yakında sunulacaktır.
Yakında
Daha fazla bilgi yakında sunulacaktır.