¿Por qué usar la llamada de función con la búsqueda de texto de kernel semántica?
En los ejemplos anteriores de generación aumentada de recuperación (RAG) que el usuario ha usado como consulta de búsqueda al recuperar información relevante. La pregunta del usuario podría ser larga y puede abarcar varios temas o puede haber varias implementaciones de búsqueda diferentes disponibles que proporcionan resultados especializados. Para cualquiera de estos escenarios, puede ser útil permitir que el modelo de IA extraiga la consulta de búsqueda o las consultas del usuario pregunten y usen llamadas de función para recuperar la información pertinente que necesita.
Sugerencia
Para ejecutar los ejemplos que se muestran en esta página, vaya a GettingStartedWithTextSearch/Step3_Search_With_FunctionCalling.cs.
Llamada a funciones con búsqueda de texto de Bing
Sugerencia
Los ejemplos de esta sección usan un IFunctionInvocationFilter
filtro para registrar la función a la que llama el modelo y qué parámetros envía.
Es interesante ver lo que usa el modelo como una consulta de búsqueda al llamar a SearchPlugin
.
Esta es la implementación 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);
}
}
En el ejemplo siguiente se crea un SearchPlugin
mediante bing web search.
Este complemento se anunciará en el modelo de IA para su uso con llamadas automáticas a funciones mediante en FunctionChoiceBehavior
la configuración de ejecución del símbolo del sistema.
Al ejecutar este ejemplo, compruebe la salida de la consola para ver cuál es el modelo usado como consulta de búsqueda.
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));
Llamada a funciones con búsqueda de texto de Bing y citas
En el ejemplo siguiente se incluyen los cambios necesarios para incluir citas:
- Use
CreateWithGetTextSearchResults
para crearSearchPlugin
, esto incluirá el vínculo al origen original de la información. - Modifique el mensaje para indicar al modelo que incluya citas en su respuesta.
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));
Llamada a funciones con búsqueda y filtrado de texto de Bing
En el ejemplo final de esta sección se muestra cómo usar un filtro con llamadas de función.
En este ejemplo solo se incluirán los resultados de búsqueda del sitio blogs para desarrolladores de Microsoft.
Se crea una instancia de TextSearchFilter
y se agrega una cláusula de igualdad para que coincida con el devblogs.microsoft.com
sitio.
El filtro Ths se usará cuando se invoque la función en respuesta a una solicitud de llamada de función desde el modelo.
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));
Próximamente
Más próximamente.
Próximamente
Más próximamente.