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.
RAG implementeren met webtekst zoeken
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
Webpagina's zoeken met 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);
}
Google webzoekopdrachten
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:
- Maak een
Kernel
service waarvoor een OpenAI-service is geregistreerd. Dit wordt gebruikt om hetgpt-4o
model aan te roepen met de prompt. - Een zoekexemplaren voor tekst maken.
- Maak een zoekinvoegtoepassing op basis van het zoekexemplaren voor tekst.
- Maak een promptsjabloon waarmee de zoekinvoegtoepassing wordt aangeroepen met de query en zoekresultaten worden opgenomen in de prompt, samen met de oorspronkelijke query.
- 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:
- Het antwoord bevat geen bronvermeldingen met de webpagina's die zijn gebruikt om basiscontext te bieden.
- Het antwoord bevat gegevens van elke website. Het is beter om dit te beperken tot vertrouwde sites.
- 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.