Udostępnij za pośrednictwem


Co to jest semantyczne wyszukiwanie tekstu jądra?

Ostrzeżenie

Funkcja wyszukiwania tekstu jądra semantycznego jest w wersji zapoznawczej i ulepszenia, które wymagają zmian powodujących niezgodność, mogą nadal występować w ograniczonych okolicznościach przed wydaniem.

Semantyczne jądro zapewnia możliwości, które umożliwiają deweloperom integrowanie wyszukiwania podczas wywoływania modelu dużego języka (LLM). Jest to ważne, ponieważ moduły LLM są szkolone na stałych zestawach danych i mogą wymagać dostępu do dodatkowych danych, aby dokładnie reagować na pytanie użytkownika.

Proces dostarczania dodatkowego kontekstu podczas monitowania llM nosi nazwę Retrieval-Augmented Generation (RAG, Retrieval-Augmented Generation). Funkcja RAG zwykle obejmuje pobieranie dodatkowych danych istotnych dla bieżącego użytkownika i rozszerzanie monitu wysłanego do usługi LLM przy użyciu tych danych. Usługa LLM może używać trenowania oraz dodatkowego kontekstu, aby zapewnić dokładniejszą odpowiedź.

Prostym przykładem tego, kiedy staje się to ważne, jest to, że pytanie użytkownika jest związane z aktualnymi informacjami, które nie są zawarte w zestawie danych treningowych llM. Wykonując odpowiednie wyszukiwanie tekstu i uwzględniając wyniki z pytaniem użytkownika, zostaną osiągnięte dokładniejsze odpowiedzi.

Semantyczne jądro udostępnia zestaw funkcji wyszukiwania tekstu, które umożliwiają deweloperom wykonywanie wyszukiwań przy użyciu wyszukiwania w Sieci Web lub wektorowych baz danych i łatwe dodawanie funkcji RAG do swoich aplikacji.

W poniższym przykładowym kodzie możesz wybrać między użyciem usługi Bing lub Google do wykonywania operacji wyszukiwania w Internecie.

Napiwek

Aby uruchomić przykłady wyświetlane na tej stronie, przejdź do pozycji GettingStartedWithTextSearch/Step1_Web_Search.cs.

Tworzenie wystąpienia wyszukiwania tekstu

Każdy przykład tworzy wystąpienie wyszukiwania tekstu, a następnie wykonuje operację wyszukiwania, aby uzyskać wyniki dla podanego zapytania. Wyniki wyszukiwania będą zawierać fragment tekstu ze strony internetowej, który opisuje jego zawartość. Zapewnia to tylko ograniczony kontekst, tj. podzbiór zawartości strony internetowej i nie zawiera linku do źródła informacji. W kolejnych przykładach pokazano, jak rozwiązać te ograniczenia.

Napiwek

Poniższy przykładowy kod używa łącznika OpenAI jądra semantycznego i wtyczek sieci Web, instalowanych przy użyciu następujących poleceń:

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

Napiwek

Aby uzyskać więcej informacji na temat typów wyników wyszukiwania, zobacz dokumentację dotyczącą wtyczek wyszukiwania tekstu.

Używanie wyników wyszukiwania tekstowego w celu rozszerzenia monitu

Następne kroki to utworzenie wtyczki na podstawie wyszukiwania tekstu internetowego i wywołanie wtyczki w celu dodania wyników wyszukiwania do monitu.

Poniższy przykładowy kod pokazuje, jak to osiągnąć:

  1. Utwórz usługę Kernel z zarejestrowaną usługą OpenAI. Zostanie użyty do wywołania gpt-4o modelu z monitem.
  2. Utwórz wystąpienie wyszukiwania tekstu.
  3. Utwórz wtyczkę wyszukiwania na podstawie wystąpienia wyszukiwania tekstu.
  4. Utwórz szablon monitu, który wywoła wtyczkę wyszukiwania z zapytaniem i dołącz wyniki wyszukiwania w wierszu polecenia wraz z oryginalnym zapytaniem.
  5. Wywołaj monit i wyświetl odpowiedź.

Model udostępni odpowiedź, która jest uziemiona w najnowszych informacjach dostępnych w wyszukiwaniu internetowym.

Wyszukiwanie w internecie za pomocą usługi 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));

Wyszukiwanie w Internecie Google

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

Istnieje wiele problemów z powyższym przykładem:

  1. Odpowiedź nie zawiera cytatów pokazujących strony internetowe, które zostały użyte do zapewnienia kontekstu uziemienia.
  2. Odpowiedź będzie zawierać dane z dowolnej witryny internetowej. Lepiej byłoby ograniczyć tę odpowiedź do zaufanych witryn.
  3. Tylko fragment kodu każdej strony internetowej jest używany do udostępniania kontekstu uziemienia modelu. Fragment kodu może nie zawierać danych wymaganych do zapewnienia dokładnej odpowiedzi.

Zobacz stronę, na której opisano wtyczki wyszukiwania tekstu, aby uzyskać rozwiązania tych problemów.

Następnie zalecamy przyjrzenie się abstrakcji wyszukiwania tekstu.

Wkrótce

Wkrótce pojawi się więcej.

Wkrótce

Wkrótce pojawi się więcej.

Następne kroki