Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In den vorherigen Beispielen mit Retrieval-Augmented Generation (RAG) wurde die Benutzeranfrage als Suchabfrage verwendet, um relevante Informationen abzurufen. Die Frage des Benutzers könnte lang sein und kann mehrere Themen umfassen, oder es stehen mehrere verschiedene Suchimplementierungen zur Verfügung, die spezielle Ergebnisse liefern. Für eines dieser Szenarien kann es hilfreich sein, das KI-Modell zu ermöglichen, die Suchabfrage oder Abfragen des Benutzers zu extrahieren und Funktionsaufrufe zu verwenden, um die relevanten Informationen abzurufen, die er benötigt.
Tipp
Um die auf dieser Seite gezeigten Beispiele auszuführen, wechseln Sie zu GettingStartedWithTextSearch/Step3_Search_With_FunctionCalling.cs.
Funktionsaufrufe mit Bing-Textsuche
Tipp
In den Beispielen in diesem Abschnitt wird ein IFunctionInvocationFilter Filter verwendet, um die Funktion zu protokollieren, die das Modell aufruft und welche Parameter gesendet werden.
Es ist interessant zu sehen, was das Modell als Suchabfrage verwendet, wenn es das SearchPlugin aufruft.
Hier ist die IFunctionInvocationFilter Filterimplementierung.
private sealed class FunctionInvocationFilter(TextWriter output) : IFunctionInvocationFilter
{
public async Task OnFunctionInvocationAsync(FunctionInvocationContext context, Func<FunctionInvocationContext, Task> next)
{
if (context.Function.PluginName == "SearchPlugin")
{
output.WriteLine($"{context.Function.Name}:{JsonSerializer.Serialize(context.Arguments)}\n");
}
await next(context);
}
}
Im folgenden Beispiel wird eine Bing-Websuche mit SearchPlugin erstellt.
Dieses Plugin wird dem KI-Modell zur Verwendung mit automatischen Funktionsaufrufen über die Ausführungseinstellungen der Eingabeaufforderung FunctionChoiceBehavior beworben.
Wenn Sie dieses Beispiel ausführen, überprüfen Sie die Konsolenausgabe, um zu sehen, welches Modell als Suchabfrage verwendet wurde.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Bing;
// Create a kernel with OpenAI chat completion
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
modelId: "gpt-4o",
apiKey: "<Your OpenAI API Key>");
kernelBuilder.Services.AddSingleton<ITestOutputHelper>(output);
kernelBuilder.Services.AddSingleton<IFunctionInvocationFilter, FunctionInvocationFilter>();
Kernel kernel = kernelBuilder.Build();
// Create a search service with Bing search
var textSearch = new BingTextSearch(apiKey: "<Your Bing API Key>");
// Build a text search plugin with Bing search and add to the kernel
var searchPlugin = textSearch.CreateWithSearch("SearchPlugin");
kernel.Plugins.Add(searchPlugin);
// Invoke prompt and use text search plugin to provide grounding information
OpenAIPromptExecutionSettings settings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() };
KernelArguments arguments = new(settings);
Console.WriteLine(await kernel.InvokePromptAsync("What is the Semantic Kernel?", arguments));
Funktionsaufrufe mit Bing-Textsuche und Quellenangaben
Das folgende Beispiel enthält die erforderlichen Änderungen, um Zitate einzuschließen:
- Wird
CreateWithGetTextSearchResultsverwendet, um dasSearchPluginElement zu erstellen, enthält dies den Link zur ursprünglichen Quelle der Informationen. - Ändern Sie die Eingabeaufforderung, um das Modell anzuweisen, Zitate in die Antwort aufzunehmen.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Bing;
// Create a kernel with OpenAI chat completion
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
modelId: "gpt-4o",
apiKey: "<Your OpenAI API Key>");
kernelBuilder.Services.AddSingleton<ITestOutputHelper>(output);
kernelBuilder.Services.AddSingleton<IFunctionInvocationFilter, FunctionInvocationFilter>();
Kernel kernel = kernelBuilder.Build();
// Create a search service with Bing search
var textSearch = new BingTextSearch(apiKey: "<Your Bing API Key>");
// Build a text search plugin with Bing search and add to the kernel
var searchPlugin = textSearch.CreateWithGetTextSearchResults("SearchPlugin");
kernel.Plugins.Add(searchPlugin);
// Invoke prompt and use text search plugin to provide grounding information
OpenAIPromptExecutionSettings settings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() };
KernelArguments arguments = new(settings);
Console.WriteLine(await kernel.InvokePromptAsync("What is the Semantic Kernel? Include citations to the relevant information where it is referenced in the response.", arguments));
Funktionsaufrufe mit Bing-Textsuche und -Filterung
Das letzte Beispiel in diesem Abschnitt zeigt, wie Sie einen Filter mit Funktionsaufrufen verwenden.
In diesem Beispiel werden nur Suchergebnisse aus der Microsoft Developer Blogs-Website einbezogen.
Es wird eine Instanz TextSearchFilter erstellt, und es wird eine Gleichheitsklausel hinzugefügt, die mit der devblogs.microsoft.com Website übereinstimmt.
Dieser Filter wird verwendet, wenn die Funktion als Reaktion auf eine Funktionsaufrufanforderung aus dem Modell aufgerufen wird.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Bing;
// Create a kernel with OpenAI chat completion
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
modelId: "gpt-4o",
apiKey: "<Your OpenAI API Key>");
kernelBuilder.Services.AddSingleton<ITestOutputHelper>(output);
kernelBuilder.Services.AddSingleton<IFunctionInvocationFilter, FunctionInvocationFilter>();
Kernel kernel = kernelBuilder.Build();
// Create a search service with Bing search
var textSearch = new BingTextSearch(apiKey: "<Your Bing API Key>");
// Build a text search plugin with Bing search and add to the kernel
var filter = new TextSearchFilter().Equality("site", "devblogs.microsoft.com");
var searchOptions = new TextSearchOptions() { Filter = filter };
var searchPlugin = KernelPluginFactory.CreateFromFunctions(
"SearchPlugin", "Search Microsoft Developer Blogs site only",
[textSearch.CreateGetTextSearchResults(searchOptions: searchOptions)]);
kernel.Plugins.Add(searchPlugin);
// Invoke prompt and use text search plugin to provide grounding information
OpenAIPromptExecutionSettings settings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() };
KernelArguments arguments = new(settings);
Console.WriteLine(await kernel.InvokePromptAsync("What is the Semantic Kernel? Include citations to the relevant information where it is referenced in the response.", arguments));
In Kürze verfügbar
Mehr in Kürze verfügbar.
In Kürze verfügbar
Mehr in Kürze verfügbar.