Freigeben über


Was ist die semantische Kerneltextsuche?

Warnung

Die Funktion für die semantische Kerneltextsuche ist eine Vorschau, und Verbesserungen, die fehlerhafte Änderungen erfordern, können unter begrenzten Umständen noch vor der Veröffentlichung auftreten.

Der semantische Kernel bietet Funktionen, mit denen Entwickler die Suche integrieren können, wenn Sie ein GROßEs Sprachmodell (LARGE Language Model, LLM) aufrufen. Dies ist wichtig, da LLMs auf festen Datensätzen trainiert werden und möglicherweise Zugriff auf zusätzliche Daten benötigen, um auf eine Benutzeranforderung genau zu reagieren.

Der Prozess der Bereitstellung eines zusätzlichen Kontexts bei der Aufforderung einer LLM wird als "Retrieval-Augmented Generation(RAG)" bezeichnet. RAG umfasst in der Regel das Abrufen zusätzlicher Daten, die für den aktuellen Benutzer relevant sind, um die an die LLM gesendete Eingabeaufforderung mit diesen Daten zu erweitern. Das LLM kann seine Schulung sowie den zusätzlichen Kontext verwenden, um eine genauere Antwort zu bieten.

Ein einfaches Beispiel dafür, wann dies wichtig wird, ist, wenn die Frage des Benutzers mit aktuellen Informationen verknüpft ist, die nicht im Schulungsdatensatz des LLM enthalten sind. Durch die Durchführung einer geeigneten Textsuche und einschließlich der Ergebnisse bei der Frage des Benutzers werden genauere Antworten erzielt.

Der semantische Kernel bietet eine Reihe von Textsuchfunktionen, mit denen Entwickler Suchvorgänge mithilfe von Websuch- oder Vektordatenbanken durchführen und RAG einfach zu ihren Anwendungen hinzufügen können.

Im folgenden Beispielcode können Sie zwischen der Verwendung von Bing oder Google zum Ausführen von Websuchvorgängen wählen.

Tipp

Um die auf dieser Seite gezeigten Beispiele auszuführen, wechseln Sie zu GettingStartedWithTextSearch/Step1_Web_Search.cs.

Erstellen einer Textsuchinstanz

Jedes Beispiel erstellt eine Textsuchinstanz und führt dann einen Suchvorgang aus, um Ergebnisse für die bereitgestellte Abfrage abzurufen. Die Suchergebnisse enthalten einen Textausschnitt der Webseite, der den Inhalt beschreibt. Dies bietet nur einen begrenzten Kontext, d. h. eine Teilmenge des Webseiteninhalts und keinen Link zur Quelle der Informationen. In späteren Beispielen wird gezeigt, wie diese Einschränkungen behoben werden.

Tipp

Der folgende Beispielcode verwendet den semantischen Kernel OpenAI-Connector und Web-Plug-In, installieren Sie mithilfe der folgenden Befehle:

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

Tipp

Weitere Informationen dazu, welche Arten von Suchergebnissen abgerufen werden können, finden Sie in der Dokumentation zu Text search Plugins.

Verwenden von Textsuchergebnissen zum Erweitern einer Eingabeaufforderung

Die nächsten Schritte sind das Erstellen eines Plug-Ins aus der Webtextsuche und das Plug-In, um die Suchergebnisse zur Eingabeaufforderung hinzuzufügen.

Der folgende Beispielcode zeigt, wie Sie dies erreichen:

  1. Erstellen Sie einen Kernel openAI-Dienst, der registriert ist. Dies wird verwendet, um das gpt-4o Modell mit der Eingabeaufforderung aufzurufen.
  2. Erstellen Sie eine Textsuchinstanz.
  3. Erstellen Sie ein Such-Plug-In aus der Textsuchinstanz.
  4. Erstellen Sie eine Eingabeaufforderungsvorlage, die das Such-Plug-In mit der Abfrage aufruft und Suchergebnisse zusammen mit der ursprünglichen Abfrage in die Eingabeaufforderung einschließt.
  5. Rufen Sie die Eingabeaufforderung auf, und zeigen Sie die Antwort an.

Das Modell liefert eine Antwort, die auf die neuesten Informationen basiert, die bei einer Websuche verfügbar sind.

Bing-Websuche

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-Websuche

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

Es gibt eine Reihe von Problemen mit dem obigen Beispiel:

  1. Die Antwort enthält keine Zitate mit den Webseiten, die zum Bereitstellen des Erdungskontexts verwendet wurden.
  2. Die Antwort enthält Daten von jeder Website, es wäre besser, dies auf vertrauenswürdige Websites zu beschränken.
  3. Es wird nur ein Codeausschnitt jeder Webseite verwendet, um dem Modell einen Erdungskontext bereitzustellen, der Codeausschnitt enthält möglicherweise nicht die Daten, die erforderlich sind, um eine genaue Antwort bereitzustellen.

Sehen Sie sich die Seite an, auf der Textsuch-Plug-Ins für Lösungen für diese Probleme beschrieben werden.

Als Nächstes empfehlen wir, die Textsuche Abstraktionen zu betrachten.

In Kürze verfügbar

Mehr in Kürze verfügbar.

In Kürze verfügbar

Mehr in Kürze verfügbar.

Nächste Schritte