Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.
Implémentation de RAG à l’aide de la recherche de texte web
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
Recherche web Bing
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);
}
Recherche web Google
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 :
- Créez un
Kernelservice OpenAI inscrit. Cela sera utilisé pour appeler legpt-4omodèle à l’aide de l’invite. - Créez une instance de recherche de texte.
- Créez un plug-in de recherche à partir de l’instance de recherche de texte.
- 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.
- 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 :
- La réponse n’inclut pas de citations montrant les pages web utilisées pour fournir un contexte de base.
- 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.
- 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.