Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Nos exemplos anteriores baseados em RAG (Geração Aumentada por Recuperação), a solicitação do usuário foi usada como consulta de pesquisa para recuperar informações relevantes. A pergunta do usuário pode ser longa e abranger vários tópicos ou pode haver várias implementações de pesquisa diferentes disponíveis que fornecem resultados especializados. Para qualquer um desses cenários, pode ser útil permitir que o modelo de IA extraia a consulta ou consultas de pesquisa do pedido do usuário e use a chamada de função para recuperar as informações relevantes necessárias.
Dica
Para executar os exemplos mostrados nesta página, acesse GettingStartedWithTextSearch/Step3_Search_With_FunctionCalling.cs.
Chamada de função com pesquisa de texto do Bing
Dica
Os exemplos nesta seção usam um IFunctionInvocationFilter filtro para registrar a função que o modelo chama e quais parâmetros ele envia.
É interessante ver o que o modelo usa como uma consulta de pesquisa ao chamar o SearchPlugin.
Aqui está a implementação do 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);
}
}
O exemplo abaixo cria um SearchPlugin usando a pesquisa na web do Bing.
Este plug-in será anunciado ao modelo de IA para uso com chamada automática de função, usando o FunctionChoiceBehavior nas configurações de execução de prompt.
Ao executar este exemplo, verifique a saída do console para ver o que o modelo usou como consulta de pesquisa.
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));
Chamada de função com pesquisa de texto do Bing e citações
O exemplo abaixo inclui as alterações necessárias para incluir citações:
- Use
CreateWithGetTextSearchResultspara criar oSearchPlugin, isso incluirá o link para a fonte original da informação. - Modifique o prompt para instruir o modelo a incluir citações em sua resposta.
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));
Chamada de função para pesquisa de texto e filtragem no Bing
O exemplo final nesta seção mostra como usar um filtro com chamada de função.
Para este exemplo, somente os resultados da pesquisa do site Microsoft Developer Blogs serão incluídos.
Uma instância de TextSearchFilter é criada, e uma cláusula de igualdade é adicionada para coincidir com o site devblogs.microsoft.com.
Esse filtro será usado quando a função for invocada em resposta a uma solicitação de chamada de função do 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));
Em breve
Mais em breve.
Em breve
Mais em breve.