Dela via


Vad är semantisk kerneltextsökning?

Varning

Funktionen semantisk kerneltextsökning är en förhandsversion och förbättringar som kräver icke-bakåtkompatibla ändringar kan fortfarande ske under begränsade omständigheter före lanseringen.

Semantisk kernel innehåller funktioner som gör det möjligt för utvecklare att integrera sökning när de anropar en stor språkmodell (LLM). Det här är viktigt eftersom LLM:er tränas på fasta datamängder och kan behöva åtkomst till ytterligare data för att svara korrekt på en användar ask.

Processen för att tillhandahålla ytterligare kontext när du frågar en LLM kallas Hämtningsförhöjd generation (RAG). RAG handlar vanligtvis om att hämta ytterligare data som är relevanta för den aktuella användarens fråga och utöka uppmaningen som skickas till LLM med dessa data. LLM kan använda sin utbildning plus den ytterligare kontexten för att ge ett mer exakt svar.

Ett enkelt exempel på när detta blir viktigt är när användarens fråga är relaterad till uppdaterad information som inte ingår i LLM:s träningsdatauppsättning. Genom att utföra en lämplig textsökning och inkludera resultaten med användarens fråga, kommer mer exakta svar att uppnås.

Semantisk kernel innehåller en uppsättning funktioner för textsökning som gör det möjligt för utvecklare att utföra sökningar med hjälp av webbsöknings- eller vektordatabaser och enkelt lägga till RAG i sina program.

I följande exempelkod kan du välja mellan att använda Bing eller Google för att utföra webbsökningsåtgärder.

Dricks

Om du vill köra exemplen som visas på den här sidan går du till GettingStartedWithTextSearch/Step1_Web_Search.cs.

Skapa textsökningsinstans

Varje exempel skapar en textsökningsinstans och utför sedan en sökåtgärd för att få resultat för den angivna frågan. Sökresultaten innehåller ett textfragment från webbsidan som beskriver innehållet. Detta ger endast en begränsad kontext, dvs. en delmängd av innehållet på webbsidan och ingen länk till källan till informationen. Senare exempel visar hur du hanterar dessa begränsningar.

Dricks

Följande exempelkod använder Semantic Kernel OpenAI-anslutningsappen och webb-plugin-program och installerar med hjälp av följande kommandon:

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

Dricks

Mer information om vilka typer av sökresultat som kan hämtas finns i dokumentationen om plugin-program för textsökning.

Använda textsökningsresultat för att utöka en fråga

Nästa steg är att skapa ett plugin-program från webbtextsökningen och anropa plugin-programmet för att lägga till sökresultaten i prompten.

Exempelkoden nedan visar hur du uppnår detta:

  1. Skapa en Kernel som har en OpenAI-tjänst registrerad. Detta används för att anropa gpt-4o modellen med kommandotolken.
  2. Skapa en textsökningsinstans.
  3. Skapa ett sökprogram från textsökningsinstansen.
  4. Skapa en promptmall som anropar sökprogrammet med frågan och inkluderar sökresultat i prompten tillsammans med den ursprungliga frågan.
  5. Anropa prompten och visa svaret.

Modellen ger ett svar som baseras på den senaste informationen som är tillgänglig från en webbsökning.

Webbsökning i 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-webbsökning

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

Det finns ett antal problem med exemplet ovan:

  1. Svaret innehåller inte citat som visar de webbsidor som användes för att tillhandahålla grundkontext.
  2. Svaret innehåller data från alla webbplatser. Det vore bättre att begränsa detta till betrodda webbplatser.
  3. Endast ett kodfragment av varje webbsida används för att ge grundkontext till modellen. Kodfragmentet kanske inte innehåller de data som krävs för att ge ett korrekt svar.

Se sidan som beskriver plugin-program för textsökning för lösningar på dessa problem.

Därefter rekommenderar vi att du tittar på abstraktioner för textsökning.

Kommer snart

Fler kommer snart.

Kommer snart

Fler kommer snart.

Nästa steg