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, sınıfı tarafından temsil edilen geçerli işlev çağırma özelliklerinden sınıfı tarafından ToolCallBehavior temsil FunctionChoiceBehavior edilen yeni gelişmiş özelliklere 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ı geçirme
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ı geçirme
Bu ToolCallBehavior.EnableKernelFunctions davranış, devre dışı bırakılmış otomatik çağırma ile davranışa eşdeğerdir FunctionChoiceBehavior.Auto .
// Before
var executionSettings = new OpenAIPromptExecutionSettings { ToolCallBehavior = ToolCallBehavior.EnableKernelFunctions };
// After
var executionSettings = new OpenAIPromptExecutionSettings { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(autoInvoke: false) };
ToolCallBehavior.EnableFunctions davranışını geçirme
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ı geçirme
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:
- Sohbet geçmişinde OpenAI'ye özgü öğenin özelliği aracılığıyla
ToolCallssağlanan veyaChatCompletionsFunctionToolCallgibiChatToolCallbağlayıcıya özgüOpenAIChatMessageContentişlev çağrı sınıflarını kullanma. - gibi
FunctionCallContentbağlayıcıdan bağımsız işlev çağrı sınıflarını kullanarak sohbet geçmişindekiItemsbağlayıcıdan bağımsızChatMessageContentöğenin özelliği aracılığıyla kullanılabilir.
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 bağlayıcıya özgü işlev çağrı sınıfları ile El ile İşlev Çağırma'yı 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();
}
Yukarıdaki kod parçacıkları, OpenAI AI bağlayıcısını kullanan kodunuzun nasıl geçirildiğini gösterir. İ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.