Condividi tramite


Che cos'è la ricerca di testo del kernel semantico?

Avviso

La funzionalità Ricerca testo del kernel semantico è in anteprima e i miglioramenti che richiedono modifiche di rilievo possono verificarsi in circostanze limitate prima del rilascio.

Il kernel semantico offre funzionalità che consentono agli sviluppatori di integrare la ricerca quando si chiama un modello LLM (Large Language Model). Questo aspetto è importante perché il training di LLM viene eseguito su set di dati fissi e potrebbe dover accedere ad altri dati per rispondere in modo accurato a una richiesta dell'utente.

Il processo di fornitura di contesto aggiuntivo quando viene richiesto un LLM è denominato Retrieval-Augmented Generation (RAG). Rag prevede in genere il recupero di dati aggiuntivi rilevanti per l'utente corrente richiesto e l'aumento della richiesta inviata all'LLM con questi dati. LLM può usare il training e il contesto aggiuntivo per fornire una risposta più accurata.

Un semplice esempio di quando questo diventa importante è quando la richiesta dell'utente è correlata alle informazioni aggiornate non incluse nel set di dati di training LLM. Eseguendo una ricerca di testo appropriata e includendo i risultati con la richiesta dell'utente, verranno ottenute risposte più accurate.

Il kernel semantico offre un set di funzionalità di ricerca testo che consentono agli sviluppatori di eseguire ricerche usando Ricerca Web o Database vettoriali e aggiungere facilmente RAG alle applicazioni.

Nel codice di esempio seguente è possibile scegliere tra l'uso di Bing o Google per eseguire operazioni di ricerca Web.

Suggerimento

Per eseguire gli esempi visualizzati in questa pagina, passare a GettingStartedWithTextSearch/Step1_Web_Search.cs.

Creare un'istanza di ricerca di testo

Ogni esempio crea un'istanza di ricerca di testo e quindi esegue un'operazione di ricerca per ottenere i risultati per la query fornita. I risultati della ricerca conterranno un frammento di testo dalla pagina Web che ne descrive il contenuto. Ciò fornisce solo un contesto limitato, ad esempio un subset del contenuto della pagina Web e nessun collegamento all'origine delle informazioni. Gli esempi successivi illustrano come risolvere queste limitazioni.

Suggerimento

Il codice di esempio seguente usa il connettore OpenAI semantic kernel e i plug-in Web, installare usando i comandi seguenti:

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

Suggerimento

Per altre informazioni sui tipi di risultati della ricerca che è possibile recuperare, vedere la documentazione relativa ai plug-in di ricerca testo.

Usare i risultati della ricerca di testo per aumentare una richiesta

I passaggi successivi sono creare un plug-in dalla ricerca di testo Web e richiamare il plug-in per aggiungere i risultati della ricerca al prompt.

Il codice di esempio seguente illustra come ottenere questo risultato:

  1. Creare un Kernel oggetto con un servizio OpenAI registrato. Verrà usato per chiamare il modello con il gpt-4o prompt.
  2. Creare un'istanza di ricerca di testo.
  3. Creare un plug-in di ricerca dall'istanza di ricerca di testo.
  4. Creare un modello di richiesta che richiamerà il plug-in di ricerca con la query e includerà i risultati della ricerca nella richiesta insieme alla query originale.
  5. Richiamare il prompt e visualizzare la risposta.

Il modello fornirà una risposta in base alle informazioni più recenti disponibili in una ricerca Web.

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

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

Esistono diversi problemi con l'esempio precedente:

  1. La risposta non include citazioni che mostrano le pagine Web usate per fornire contesto di base.
  2. La risposta includerà i dati di qualsiasi sito Web, sarebbe preferibile limitarlo a siti attendibili.
  3. Solo un frammento di pagina Web viene usato per fornire contesto di base al modello, il frammento di codice potrebbe non contenere i dati necessari per fornire una risposta accurata.

Vedere la pagina che descrive i plug-in di ricerca di testo per le soluzioni a questi problemi.

È quindi consigliabile esaminare le astrazioni della ricerca di testo.

Presto disponibile

Altre informazioni saranno presto disponibili.

Presto disponibile

Altre informazioni saranno presto disponibili.

Passaggi successivi