Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Warnung
Die Textsuchfunktion von Semantischer Kernel befindet sich in der Vorschau, und Verbesserungen, die Breaking Changes erfordern, können vor der Veröffentlichung in begrenzten Ausnahmefällen noch vorkommen.
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 zusätzlichen Kontexts beim Prompting eines LLM wird als „Retrieval-Augmented Generation“ (RAG) bezeichnet. RAG umfasst in der Regel das Abrufen zusätzlicher Daten, die für die aktuelle Benutzeranfrage relevant sind, und das Anreichern des an das LLM gesendeten Prompts mit diesen Daten. 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.
Wie unterscheidet sich die Textsuche von der Vektorsuche?
Semantischer Kernel stellt APIs zum Abrufen von Daten auf verschiedenen Abstraktionsebenen bereit.
Die Textsuche ermöglicht die Suche auf hoher Ebene im Stapel, wobei die Eingabe Text mit Unterstützung für die grundlegende Filterung ist. Die Textsuchschnittstelle unterstützt verschiedene Ausgabetypen, einschließlich der Unterstützung für die einfache Rückgabe einer einfachen Zeichenfolge. Auf diese Weise kann die Textsuche viele Implementierungen unterstützen, einschließlich Websuchmaschinen und Vektorspeichern. Das Hauptziel für die Textsuche besteht darin, eine einfache Schnittstelle bereitzustellen, die als Plug-In zum Chatabschluss verfügbar gemacht werden kann.
Tipp
Alle sofort einsatzbereiten Textsuchimplementierungen finden Sie unter Out-of-the-Box-Textsuche.
Die Vektorsuche befindet sich auf einer niedrigeren Ebene im Stapel, wobei die Eingabe ein Vektor ist. Sie unterstützt auch die grundlegende Filterung sowie die Auswahl eines Vektors aus dem Datenspeicher zum Vergleichen des Eingabevektors. Es gibt ein Datenmodell zurück, das die Daten aus dem Datenspeicher enthält.
Wenn Sie RAG mit Vektorspeichern verwenden möchten, ist es sinnvoll, Textsuche und Vektorsuche zusammen zu nutzen. Dies lässt sich erreichen, indem eine Vektorspeicher-Sammlung, die die Vektorsuche unterstützt, mit einer Textsuche versehen und die Textsuche dann als Plug-In für Chat Completions bereitgestellt wird. Semantischer Kernel bietet die Möglichkeit, dies einfach aus der Box heraus zu erledigen. Weitere Informationen dazu finden Sie in den folgenden Tipps.
Tipp
Informationen zum Verfügbarmachen der Vektorsuche zum Chatabschluss finden Sie unter Wie sie Vektorspeicher mit Semantischer Kernel Textsuche verwenden.
Tipp
Weitere Informationen zu Vektorspeichern und Vektorsuche finden Sie unter What are Semantischer Kernel Vector Store connectors?.
Implementieren von RAG mithilfe der Webtextsuche
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 Semantischer Kernel OpenAI-Connector und Web-Plugins; installieren Sie diese mit den folgenden Befehlen:
dotnet add package Microsoft.SemanticKernel
dotnet add package Microsoft.SemanticKernel.Plugins.Web
Bing-Websuche
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-Websuche
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 Sie Suchergebnisse einer Textsuche, um eine Eingabeaufforderung zu ergänzen
Die nächsten Schritte sind, ein Plug-In aus der Webtextsuche zu erstellen und das Plug-In aufzurufen, um die Suchergebnisse zum Prompt hinzuzufügen.
Der folgende Beispielcode zeigt, wie Sie dies erreichen:
- Erstellen Sie ein
Kernel, in dem ein OpenAI-Dienst registriert ist. Dies wird verwendet, um dasgpt-4oModell mit dem Prompt aufzurufen. - Erstellen Sie eine Textsuchinstanz.
- Erstellen Sie ein Such-Plug-In aus der Textsuchinstanz.
- 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.
- 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:
- Die Antwort enthält keine Zitierungen der Webseiten, die als Kontextgrundlage verwendet wurden.
- Die Antwort enthält Daten von jeder Website, es wäre besser, dies auf vertrauenswürdige Websites zu beschränken.
- 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 einen Blick auf Textsuchabstraktionen.
In Kürze verfügbar
Mehr in Kürze verfügbar.
In Kürze verfügbar
Mehr in Kürze verfügbar.