Pourquoi utiliser l’appel de fonction avec la recherche de texte du noyau sémantique ?
Dans les exemples de génération augmentée de récupération (RAG) précédents, l’utilisateur demande a été utilisé comme requête de recherche lors de la récupération d’informations pertinentes. La demande de l’utilisateur peut être longue et peut s’étendre sur plusieurs rubriques ou il peut y avoir plusieurs implémentations de recherche différentes disponibles qui fournissent des résultats spécialisés. Pour l’un de ces scénarios, il peut être utile de permettre au modèle IA d’extraire la requête de recherche ou les requêtes de l’utilisateur de demander et d’utiliser l’appel de fonction pour récupérer les informations pertinentes dont il a besoin.
Conseil
Pour exécuter les exemples affichés sur cette page, accédez à GettingStartedWithTextSearch/Step3_Search_With_FunctionCalling.cs.
Appel de fonction avec recherche de texte Bing
Conseil
Les exemples de cette section utilisent un IFunctionInvocationFilter
filtre pour consigner la fonction que le modèle appelle et les paramètres qu’il envoie.
Il est intéressant de voir ce que le modèle utilise comme requête de recherche lors de l’appel du SearchPlugin
.
Voici l’implémentation de IFunctionInvocationFilter
filtre.
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);
}
}
L’exemple ci-dessous crée une SearchPlugin
recherche web Bing.
Ce plug-in sera publié sur le modèle IA à utiliser avec l’appel automatique de fonction, à l’aide des FunctionChoiceBehavior
paramètres d’exécution d’invite.
Lorsque vous exécutez cet exemple, vérifiez la sortie de la console pour voir le modèle utilisé comme requête de recherche.
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));
Appel de fonction avec recherche de texte Bing et citations
L’exemple ci-dessous inclut les modifications requises pour inclure des citations :
- Permet
CreateWithGetTextSearchResults
de créer leSearchPlugin
lien vers la source d’origine des informations. - Modifiez l’invite pour indiquer au modèle d’inclure des citations dans sa réponse.
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));
Appel de fonction avec recherche de texte Bing et filtrage
L’exemple final de cette section montre comment utiliser un filtre avec l’appel de fonction.
Pour cet exemple, seuls les résultats de recherche du site Blogs des développeurs Microsoft seront inclus.
Une instance de TextSearchFilter
est créée et une clause d’égalité est ajoutée pour correspondre au devblogs.microsoft.com
site.
Le filtre Ths est utilisé lorsque la fonction est appelée en réponse à une demande d’appel de fonction du modèle.
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));
Bientôt disponible
Plus bientôt.
Bientôt disponible
Plus bientôt.