Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En los ejemplos anteriores basados en la generación aumentada por recuperación (RAG), la pregunta del usuario se ha utilizado 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 que hace el usuario y utilice llamadas de función para recuperar la información relevante que necesita.
Sugerencia
Para ejecutar los ejemplos que se muestran en esta página, vaya a GettingStartedWithTextSearch/Step3_Search_With_FunctionCalling.cs.
Invocación de 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 la configuración de ejecución del indicador.
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 mediante búsqueda de texto de Bing y citas
En el ejemplo siguiente se incluyen los cambios necesarios para incluir citas:
- Use
CreateWithGetTextSearchResultspara 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 de función 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.
Este filtro 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.