Partilhar via


O que é Semantic Kernel Text Search?

Aviso

A funcionalidade de Pesquisa de Texto do Kernel Semântico é visualizada, e melhorias que exigem alterações significativas ainda podem ocorrer em circunstâncias limitadas antes do lançamento.

O Kernel Semântico fornece recursos que permitem aos desenvolvedores integrar a pesquisa ao chamar um Large Language Model (LLM). Isso é importante porque os LLMs são treinados em conjuntos de dados fixos e podem precisar de acesso a dados adicionais para responder com precisão a uma pergunta do usuário.

O processo de fornecer contexto adicional ao solicitar um LLM é chamado de Geração Aumentada de Recuperação (RAG). O RAG normalmente envolve a recuperação de dados adicionais que são relevantes para a solicitação do usuário atual e o aumento do prompt enviado ao LLM com esses dados. O LLM pode usar seu treinamento mais o contexto adicional para fornecer uma resposta mais precisa.

Um exemplo simples de quando isso se torna importante é quando a pergunta do usuário está relacionada a informações atualizadas não incluídas no conjunto de dados de treinamento do LLM. Ao realizar uma pesquisa de texto apropriada e incluir os resultados com a pergunta do usuário, respostas mais precisas serão alcançadas.

O Kernel Semântico fornece um conjunto de recursos de Pesquisa de Texto que permitem aos desenvolvedores realizar pesquisas usando Pesquisa na Web ou Bancos de Dados Vetoriais e adicionar facilmente RAG aos seus aplicativos.

No código de exemplo a seguir, você pode escolher entre usar o Bing ou o Google para executar operações de pesquisa na Web.

Gorjeta

Para executar os exemplos mostrados nesta página, vá para GettingStartedWithTextSearch/Step1_Web_Search.cs.

Criar instância de pesquisa de texto

Cada exemplo cria uma instância de pesquisa de texto e, em seguida, executa uma operação de pesquisa para obter resultados para a consulta fornecida. Os resultados da pesquisa conterão um trecho de texto da página da Web que descreve seu conteúdo. Isso fornece apenas um contexto limitado, ou seja, um subconjunto do conteúdo da página da Web e nenhum link para a fonte da informação. Exemplos posteriores mostram como lidar com essas limitações.

Gorjeta

O código de exemplo a seguir usa o conector OpenAI do kernel semântico e plug-ins da Web, instalar usando os seguintes comandos:

dotnet add package Microsoft.SemanticKernel
dotnet add package Microsoft.SemanticKernel.Plugins.Web

using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Bing;

// Create an ITextSearch instance using Bing search
var textSearch = new BingTextSearch(apiKey: "<Your Bing API Key>");

var query = "What is the Semantic Kernel?";

// Search and return results
KernelSearchResults<string> searchResults = await textSearch.SearchAsync(query, new() { Top = 4 });
await foreach (string result in searchResults.Results)
{
    Console.WriteLine(result);
}
using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Google;

// Create an ITextSearch instance using Google search
var textSearch = new GoogleTextSearch(
    searchEngineId: "<Your Google Search Engine Id>",
    apiKey: "<Your Google API Key>");

var query = "What is the Semantic Kernel?";

// Search and return results
KernelSearchResults<string> searchResults = await textSearch.SearchAsync(query, new() { Top = 4 });
await foreach (string result in searchResults.Results)
{
    Console.WriteLine(result);
}

Gorjeta

Para obter mais informações sobre os tipos de resultados de pesquisa que podem ser recuperados, consulte a documentação em Plug-ins de pesquisa de texto.

Usar resultados de pesquisa de texto para aumentar um prompt

As próximas etapas são criar um plug-in a partir da pesquisa de texto na web e invocar o plug-in para adicionar os resultados da pesquisa ao prompt.

O código de exemplo abaixo mostra como conseguir isso:

  1. Crie um Kernel que tenha um serviço OpenAI registrado. Isso será usado para chamar o gpt-4o modelo com o prompt.
  2. Crie uma instância de pesquisa de texto.
  3. Crie um plug-in de pesquisa a partir da instância de pesquisa de texto.
  4. Crie um modelo de prompt que invocará o plug-in de pesquisa com a consulta e incluirá os resultados da pesquisa no prompt junto com a consulta original.
  5. Invoque o prompt e exiba a resposta.

O modelo fornecerá uma resposta fundamentada nas informações mais recentes disponíveis a partir de uma pesquisa na web.

Pesquisa na Web do Bing

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>");
Kernel kernel = kernelBuilder.Build();

// Create a text search using 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
var query = "What is the Semantic Kernel?";
var prompt = "{{SearchPlugin.Search $query}}. {{$query}}";
KernelArguments arguments = new() { { "query", query } };
Console.WriteLine(await kernel.InvokePromptAsync(prompt, arguments));

Pesquisa na Web do Google

using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Google;

// Create a kernel with OpenAI chat completion
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
        modelId: "gpt-4o",
        apiKey: "<Your OpenAI API Key>");
Kernel kernel = kernelBuilder.Build();

// Create an ITextSearch instance using Google search
var textSearch = new GoogleTextSearch(
    searchEngineId: "<Your Google Search Engine Id>",
    apiKey: "<Your Google API Key>");

// Build a text search plugin with Google 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
var query = "What is the Semantic Kernel?";
var prompt = "{{SearchPlugin.Search $query}}. {{$query}}";
KernelArguments arguments = new() { { "query", query } };
Console.WriteLine(await kernel.InvokePromptAsync(prompt, arguments));

Há uma série de problemas com o exemplo acima:

  1. A resposta não inclui citações mostrando as páginas da Web que foram usadas para fornecer contexto de fundamentação.
  2. A resposta incluirá dados de qualquer site, seria melhor limitar isso a sites confiáveis.
  3. Apenas um trecho de cada página da Web está sendo usado para fornecer contexto de aterramento para o modelo, o trecho pode não conter os dados necessários para fornecer uma resposta precisa.

Consulte a página que descreve os Plugins de Pesquisa de Texto para obter soluções para estes problemas.

Em seguida, recomendamos olhar para Abstrações de Pesquisa de Texto.

Brevemente

Mais em breve.

Brevemente

Mais em breve.

Próximos passos