Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A szemantikus kernel fokozatosan vált át az osztály által képviselt aktuális függvényhívási képességekről az osztály által ToolCallBehaviorFunctionChoiceBehavior képviselt új továbbfejlesztett képességekre.
Az új képesség szolgáltatásfüggő, és az aktuális modellel ellentétben nem kötődik egy adott AI-szolgáltatáshoz sem. Ezért szemantikus kernel absztrakciókban található, és minden AI-összekötő használni fogja, amely függvényhívásra képes AI-modellekkel dolgozik.
Ez az útmutató segít áttelepíteni a kódot az új függvényhívási képességekre.
ToolCallBehavior.AutoInvokeKernelFunctions viselkedésének migrálása
A ToolCallBehavior.AutoInvokeKernelFunctions viselkedés egyenértékű az FunctionChoiceBehavior.Auto új modell viselkedésével.
// Before
var executionSettings = new OpenAIPromptExecutionSettings { ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions };
// After
var executionSettings = new OpenAIPromptExecutionSettings { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() };
ToolCallBehavior.EnableKernelFunctions viselkedésének migrálása
A ToolCallBehavior.EnableKernelFunctions viselkedés egyenértékű a FunctionChoiceBehavior.Auto letiltott automatikus hívással.
// Before
var executionSettings = new OpenAIPromptExecutionSettings { ToolCallBehavior = ToolCallBehavior.EnableKernelFunctions };
// After
var executionSettings = new OpenAIPromptExecutionSettings { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(autoInvoke: false) };
ToolCallBehavior.EnableFunctions viselkedésének migrálása
A ToolCallBehavior.EnableFunctions viselkedés egyenértékű a FunctionChoiceBehavior.Auto letiltott automatikus hívással rendelkező függvények listájával konfigurált viselkedéssel.
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) };
A ToolCallBehavior.RequireFunction viselkedés migrálása
A ToolCallBehavior.RequireFunction viselkedés egyenértékű a FunctionChoiceBehavior.Required letiltott automatikus hívással rendelkező függvények listájával konfigurált viselkedéssel.
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) };
Összekötőspecifikus függvényhívási osztályok használatának cseréje
A Szemantic Kernel függvényhívási funkciói lehetővé teszik a fejlesztők számára, hogy az AI-modell által kiválasztott függvények listáját kétféleképpen érhessék el:
- Az összekötő-specifikus függvényhívási osztályok, mint például a
ChatToolCallvagyChatCompletionsFunctionToolCall, az OpenAI-specifikusToolCallselemOpenAIChatMessageContenttulajdonságán keresztül érhetők el a csevegési előzményekben. - Az összekötő-agnosztikus függvényhívási osztályok, mint például a
FunctionCallContent, elérhetők a csevegési előzmények összekötő-agnosztikusItemseleménekChatMessageContenttulajdonságán keresztül.
A jelenlegi és az új modellek jelenleg mindkét módszert támogatják. Erősen javasoljuk azonban az összekötő-agnosztikus megközelítés használatát a függvényhívások eléréséhez, mivel rugalmasabb, és lehetővé teszi, hogy a kód bármilyen olyan AI-összekötővel működjön, amely támogatja az új függvényhívási modellt. Továbbá, figyelembe véve, hogy a jelenlegi modell hamarosan elavult lesz, itt az ideje, hogy áttelepítse a kódot az új modellbe, hogy elkerülje a jövőbeni kompatibilitástörő változásokat.
Ha tehát a kézi függvényhívást az összekötő-specifikus függvényhívási osztályokkal használja, például ebben a kódrészletben:
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();
}
Átalakítással használhatja az összekötő-agnosztikus osztályokat:
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();
}
A fenti kódrészletek bemutatják, hogyan migrálhatja az OpenAI AI-összekötőt használó kódot. Hasonló migrálási folyamat alkalmazható a Gemini és a Mistral AI-összekötőkre az új függvényhívási modell támogatása érdekében.
Következő lépések
Miután migrálta a kódot az új függvényhívási modellbe, a függvényhívási viselkedések szakaszra hivatkozva megtudhatja, hogyan konfigurálhatja a modell különböző aspektusait, amelyek jobban megfelelnek az adott forgatókönyveknek.
Hamarosan
Hamarosan további információk is érkeznek.
Hamarosan
Hamarosan további információk is érkeznek.