Delen via


Wat is Semantische kerneltekst zoeken?

Waarschuwing

De Semantic Kernel Text Search-functionaliteit is preview en verbeteringen waarvoor wijzigingen die fouten veroorzaken, kunnen nog steeds optreden in beperkte omstandigheden voordat ze worden uitgebracht.

Semantic Kernel biedt mogelijkheden waarmee ontwikkelaars zoekopdrachten kunnen integreren bij het aanroepen van een Large Language Model (LLM). Dit is belangrijk omdat LLM's zijn getraind op vaste gegevenssets en mogelijk toegang nodig hebben tot aanvullende gegevens om nauwkeurig te kunnen reageren op een vraag van een gebruiker.

Het proces voor het bieden van extra context bij het vragen van een LLM wordt RAG (Retrieval-Augmented Generation) genoemd. RAG omvat meestal het ophalen van aanvullende gegevens die relevant zijn voor de huidige gebruiker die de vraag vraagt en de prompt die met deze gegevens naar de LLM wordt verzonden, vergroot. De LLM kan de training gebruiken plus de aanvullende context om een nauwkeuriger antwoord te bieden.

Een eenvoudig voorbeeld van wanneer dit belangrijk wordt, is wanneer de vraag van de gebruiker betrekking heeft op actuele informatie die niet is opgenomen in de trainingsgegevensset van de LLM. Door een geschikte tekstzoekopdracht uit te voeren en de resultaten op te halen met de vraag van de gebruiker, worden nauwkeurigere antwoorden bereikt.

Semantische kernel biedt een set mogelijkheden voor tekst zoeken waarmee ontwikkelaars zoekopdrachten kunnen uitvoeren met webzoekopdrachten of vectordatabases en eenvoudig RAG aan hun toepassingen kunnen toevoegen.

In de volgende voorbeeldcode kunt u kiezen tussen het gebruik van Bing of Google om webzoekbewerkingen uit te voeren.

Tip

Als u de voorbeelden wilt uitvoeren die op deze pagina worden weergegeven, gaat u naar GettingStartedWithTextSearch/Step1_Web_Search.cs.

Exemplaar voor tekstzoekopdrachten maken

Elk voorbeeld maakt een exemplaar voor tekstzoekopdrachten en voert vervolgens een zoekbewerking uit om resultaten voor de opgegeven query op te halen. De zoekresultaten bevatten een tekstfragment van de webpagina waarin de inhoud wordt beschreven. Dit biedt slechts een beperkte context, bijvoorbeeld een subset van de inhoud van de webpagina en geen koppeling naar de bron van de informatie. Latere voorbeelden laten zien hoe u deze beperkingen kunt aanpakken.

Tip

De volgende voorbeeldcode maakt gebruik van de Semantische Kernel OpenAI-connector en webinvoegtoepassingen, installeren met behulp van de volgende opdrachten:

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

Tip

Raadpleeg de documentatie over invoegtoepassingen voor tekstzoekopdrachten voor meer informatie over welke typen zoekresultaten kunnen worden opgehaald.

Tekstzoekresultaten gebruiken om een prompt uit te voeren

De volgende stappen zijn het maken van een invoegtoepassing op basis van de zoekfunctie voor webteksten en het aanroepen van de invoegtoepassing om de zoekresultaten toe te voegen aan de prompt.

In de onderstaande voorbeeldcode ziet u hoe u dit kunt bereiken:

  1. Maak een Kernel service waarvoor een OpenAI-service is geregistreerd. Dit wordt gebruikt om het gpt-4o model aan te roepen met de prompt.
  2. Een zoekexemplaren voor tekst maken.
  3. Maak een zoekinvoegtoepassing op basis van het zoekexemplaren voor tekst.
  4. Maak een promptsjabloon waarmee de zoekinvoegtoepassing wordt aangeroepen met de query en zoekresultaten worden opgenomen in de prompt, samen met de oorspronkelijke query.
  5. Roep de prompt aan en geef het antwoord weer.

Het model biedt een antwoord dat is geaard in de meest recente informatie die beschikbaar is via een zoekopdracht op internet.

Webpagina's zoeken met 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));

Google webzoekopdrachten

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

Er zijn een aantal problemen met het bovenstaande voorbeeld:

  1. Het antwoord bevat geen bronvermeldingen met de webpagina's die zijn gebruikt om basiscontext te bieden.
  2. Het antwoord bevat gegevens van elke website. Het is beter om dit te beperken tot vertrouwde sites.
  3. Er wordt alleen een fragment van elke webpagina gebruikt om basiscontext voor het model te bieden. Het codefragment bevat mogelijk niet de gegevens die nodig zijn om een nauwkeurig antwoord te geven.

Zie de pagina waarin invoegtoepassingen voor tekst zoeken worden beschreven voor oplossingen voor deze problemen.

Vervolgens raden we u aan tekstzoekopdrachten abstracties te bekijken.

Binnenkort beschikbaar

Binnenkort meer beschikbaar.

Binnenkort beschikbaar

Binnenkort meer beschikbaar.

Volgende stappen