Perché usare la chiamata di funzione con La ricerca di testo del kernel semantico?
Negli esempi precedenti basati su Recupero-Generazione aumentata (RAG) l'utente richiesto è stato usato come query di ricerca durante il recupero di informazioni pertinenti. L'utente chiede potrebbe essere lungo e può estendersi su più argomenti o potrebbero essere disponibili più implementazioni di ricerca diverse che forniscono risultati specializzati. Per uno di questi scenari può essere utile consentire al modello di intelligenza artificiale di estrarre la query di ricerca o le query dall'utente chiedere e usare la chiamata di funzione per recuperare le informazioni pertinenti necessarie.
Suggerimento
Per eseguire gli esempi visualizzati in questa pagina, passare a GettingStartedWithTextSearch/Step3_Search_With_FunctionCalling.cs.
Chiamata di funzioni con ricerca di testo Bing
Suggerimento
Gli esempi in questa sezione usano un IFunctionInvocationFilter
filtro per registrare la funzione chiamata dal modello e i parametri inviati.
È interessante vedere cosa usa il modello come query di ricerca quando si chiama .SearchPlugin
Ecco l'implementazione del IFunctionInvocationFilter
filtro.
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'esempio seguente crea un SearchPlugin
oggetto usando ricerca Web Bing.
Questo plug-in verrà annunciato al modello di intelligenza artificiale per l'uso con chiamate di funzione automatiche, usando nelle FunctionChoiceBehavior
impostazioni di esecuzione della richiesta.
Quando si esegue questo esempio, controllare l'output della console per visualizzare il modello usato come query di ricerca.
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));
Chiamata di funzioni con ricerca e citazioni di testo Bing
L'esempio seguente include le modifiche necessarie per includere le citazioni:
- Usare
CreateWithGetTextSearchResults
per creare ,SearchPlugin
che includerà il collegamento all'origine originale delle informazioni. - Modificare il prompt per indicare al modello di includere le citazioni nella risposta.
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));
Chiamata di funzioni con ricerca e filtro di testo Bing
L'esempio finale di questa sezione illustra come usare un filtro con chiamate di funzione.
Per questo esempio verranno inclusi solo i risultati della ricerca del sito Microsoft Developer Blogs.
Viene creata un'istanza di TextSearchFilter
e viene aggiunta una clausola di uguaglianza per trovare una corrispondenza con il devblogs.microsoft.com
sito.
Il filtro Ths verrà usato quando la funzione viene richiamata in risposta a una richiesta di chiamata di funzione dal modello.
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));
Presto disponibile
Altre informazioni saranno presto disponibili.
Presto disponibile
Altre informazioni saranno presto disponibili.