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.
Implementowanie funkcji RAG przy użyciu wyszukiwania tekstu w Internecie
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
Wyszukiwanie w internecie za pomocą usługi 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);
}
Wyszukiwanie w Internecie Google
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ąć:
- Utwórz usługę
Kernel
z zarejestrowaną usługą OpenAI. Zostanie użyty do wywołaniagpt-4o
modelu z monitem. - Utwórz wystąpienie wyszukiwania tekstu.
- Utwórz wtyczkę wyszukiwania na podstawie wystąpienia wyszukiwania tekstu.
- Utwórz szablon monitu, który wywoła wtyczkę wyszukiwania z zapytaniem i dołącz wyniki wyszukiwania w wierszu polecenia wraz z oryginalnym zapytaniem.
- 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:
- Odpowiedź nie zawiera cytatów pokazujących strony internetowe, które zostały użyte do zapewnienia kontekstu uziemienia.
- Odpowiedź będzie zawierać dane z dowolnej witryny internetowej. Lepiej byłoby ograniczyć tę odpowiedź do zaufanych witryn.
- 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
Wyszukiwanie tekstu abstrakcjiwyszukiwania tekstu wtyczkiwyszukiwania tekstu Funkcja wyszukiwania tekstu wywołującawyszukiwanie tekstu z magazynami wektorów