Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Negli esempi precedenti basati su Generazione Aumentata da Recupero (RAG), la richiesta dell'utente è stata usata come la 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 ognuno di questi scenari, può essere utile consentire al modello di intelligenza artificiale di estrarre la query o le query di ricerca dalla richiesta dell'utente e utilizzare 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 il 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 usando la ricerca web di Bing.
Questo plug-in verrà comunicato al modello di intelligenza artificiale per l'uso con chiamate di funzione automatiche, usando FunctionChoiceBehavior nelle impostazioni di esecuzione della richiesta.
Quando esegui questo esempio, verifica l'output della console per vedere quale modello è stato 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
CreateWithGetTextSearchResultsper creareSearchPlugin, che includerà il collegamento alla fonte 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 la ricerca di testo e il filtraggio di 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.
Questo filtro 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.