Partager via


Qu’est-ce que la recherche de texte du noyau sémantique ?

Avertissement

La fonctionnalité De recherche de texte du noyau sémantique est en préversion et les améliorations qui nécessitent des modifications cassants peuvent toujours se produire dans des circonstances limitées avant la mise en production.

Le noyau sémantique fournit des fonctionnalités qui permettent aux développeurs d’intégrer la recherche lors de l’appel d’un modèle de langage volumineux (LLM). Cela est important, car les LLM sont formés sur des jeux de données fixes et peuvent avoir besoin d’accéder à des données supplémentaires pour répondre avec précision à une demande de l’utilisateur.

Le processus de fourniture d’un contexte supplémentaire lors de l’invite d’un LLM est appelé récupération-génération augmentée (RAG). RAG implique généralement la récupération de données supplémentaires pertinentes pour l’utilisateur actuel et l’augmentation de l’invite envoyée au LLM avec ces données. Le LLM peut utiliser sa formation ainsi que le contexte supplémentaire pour fournir une réponse plus précise.

Un exemple simple du moment où cela devient important est lorsque la demande de l’utilisateur est liée à des informations à jour non incluses dans le jeu de données d’entraînement de LLM. En effectuant une recherche de texte appropriée et en incluant les résultats avec la demande de l’utilisateur, des réponses plus précises seront obtenues.

Le noyau sémantique fournit un ensemble de fonctionnalités de recherche de texte qui permettent aux développeurs d’effectuer des recherches à l’aide de bases de données de recherche web ou de vecteurs et d’ajouter facilement RAG à leurs applications.

Dans l’exemple de code suivant, vous pouvez choisir entre utiliser Bing ou Google pour effectuer des opérations de recherche web.

Conseil

Pour exécuter les exemples affichés sur cette page, accédez à GettingStartedWithTextSearch/Step1_Web_Search.cs.

Créer une instance de recherche de texte

Chaque exemple crée une instance de recherche de texte, puis effectue une opération de recherche pour obtenir les résultats de la requête fournie. Les résultats de la recherche contiennent un extrait de texte de la page web qui décrit son contenu. Cela ne fournit qu’un contexte limité, c’est-à-dire un sous-ensemble du contenu de la page web et aucun lien vers la source des informations. Les exemples ultérieurs montrent comment résoudre ces limitations.

Conseil

L’exemple de code suivant utilise le connecteur OpenAI du noyau sémantique et les plug-ins Web, installez à l’aide des commandes suivantes :

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);
}

Conseil

Pour plus d’informations sur les types de résultats de recherche pouvant être récupérés, reportez-vous à la documentation sur les plug-ins de recherche de texte.

Utiliser les résultats de la recherche de texte pour augmenter une invite

Les étapes suivantes sont de créer un plug-in à partir de la recherche de texte web et d’appeler le plug-in pour ajouter les résultats de recherche à l’invite.

L’exemple de code ci-dessous montre comment procéder comme suit :

  1. Créez un Kernel service OpenAI inscrit. Cela sera utilisé pour appeler le gpt-4o modèle à l’aide de l’invite.
  2. Créez une instance de recherche de texte.
  3. Créez un plug-in de recherche à partir de l’instance de recherche de texte.
  4. Créez un modèle d’invite qui appellera le plug-in de recherche avec la requête et incluez les résultats de recherche dans l’invite, ainsi que la requête d’origine.
  5. Appelez l’invite et affichez la réponse.

Le modèle fournit une réponse qui est ancrée dans les dernières informations disponibles à partir d’une recherche web.

Recherche web 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));

Recherche web 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));

Il existe plusieurs problèmes avec l’exemple ci-dessus :

  1. La réponse n’inclut pas de citations montrant les pages web utilisées pour fournir un contexte de base.
  2. La réponse inclura des données de n’importe quel site web, il serait préférable de limiter cela aux sites approuvés.
  3. Seul un extrait de code de chaque page web est utilisé pour fournir un contexte de base au modèle, l’extrait de code peut ne pas contenir les données requises pour fournir une réponse précise.

Consultez la page qui décrit les plug-ins de recherche de texte pour trouver des solutions à ces problèmes.

Nous vous recommandons ensuite d’examiner les abstractions de recherche de texte.

Bientôt disponible

Plus bientôt.

Bientôt disponible

Plus bientôt.

Étapes suivantes