Что такое поиск текста семантического ядра?
Предупреждение
Функция поиска текста семантического ядра является предварительной версией, и улучшения, требующие критических изменений, могут по-прежнему возникать в ограниченных обстоятельствах до выпуска.
Семантический ядро предоставляет возможности, позволяющие разработчикам интегрировать поиск при вызове крупной языковой модели (LLM). Это важно, так как LLM обучен на фиксированных наборах данных и может потребоваться доступ к дополнительным данным для точного реагирования на запрос пользователя.
Процесс предоставления дополнительного контекста при появлении запроса LLM называется получением дополненного поколения (RAG). RAG обычно включает получение дополнительных данных, относящихся к текущему пользователю с запросом и расширением запроса, отправленного в LLM с данными. LLM может использовать его обучение плюс дополнительный контекст, чтобы обеспечить более точный ответ.
Простой пример того, когда это становится важным, когда запрос пользователя связан с актуальной информацией, не включенной в набор обучающих данных LLM. Выполнив соответствующий поиск текста и включив результаты с запросом пользователя, будут достигнуты более точные ответы.
Семантический ядро предоставляет набор возможностей поиска текста, которые позволяют разработчикам выполнять поиск с помощью веб-поиска или векторных баз данных и легко добавлять RAG в свои приложения.
Реализация RAG с помощью поиска в интернете
В следующем примере кода можно выбрать вариант между использованием Bing или Google для выполнения операций поиска в Интернете.
Совет
Чтобы запустить примеры, показанные на этой странице, перейдите в раздел GettingStartedWithTextSearch/Step1_Web_Search.cs.
Создание экземпляра поиска текста
Каждый пример создает экземпляр текстового поиска, а затем выполняет операцию поиска, чтобы получить результаты для предоставленного запроса. Результаты поиска содержат фрагмент текста из веб-страницы, описывающей его содержимое. Это обеспечивает только ограниченный контекст, т. е. подмножество содержимого веб-страницы и нет ссылки на источник информации. В последующих примерах показано, как устранить эти ограничения.
Совет
В следующем примере кода используется соединитель OpenAI семантического ядра и веб-подключаемые модули, которые устанавливаются с помощью следующих команд:
dotnet add package Microsoft.SemanticKernel
dotnet add package Microsoft.SemanticKernel.Plugins.Web
Веб-поиск 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);
}
Поиск в Интернете 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);
}
Совет
Дополнительные сведения о типах результатов поиска см . в документации по подключаемым модулям поиска текста.
Использование результатов поиска текста для расширения запроса
Далее необходимо создать подключаемый модуль из поиска веб-текста и вызвать подключаемый модуль, чтобы добавить результаты поиска в запрос.
В приведенном ниже примере кода показано, как это сделать:
Kernel
Создайте службу OpenAI, зарегистрированную. Это будет использоваться для вызоваgpt-4o
модели с запросом.- Создание экземпляра поиска текста.
- Создайте подключаемый модуль поиска из экземпляра поиска текста.
- Создайте шаблон запроса, который вызовет подключаемый модуль поиска с запросом и включает результаты поиска в запрос вместе с исходным запросом.
- Вызовите запрос и отобразите ответ.
Модель предоставит ответ, который находится в основе последних сведений, доступных в веб-поиске.
Веб-поиск 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
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));
Существует ряд проблем с приведенным выше примером:
- Ответ не содержит ссылок, показывающих веб-страницы, которые использовались для предоставления контекста заземления.
- Ответ будет включать данные с любого веб-сайта, было бы лучше ограничить это доверенными сайтами.
- Только фрагмент каждой веб-страницы используется для предоставления контекста заземления модели, фрагмент может не содержать данные, необходимые для предоставления точного ответа.
См. страницу, в которой описаны подключаемые модули поиска текста для решения этих проблем.
Далее мы рекомендуем ознакомиться с абстракциями поиска текста.
Скоро
В ближайшее время будет больше.
Скоро
В ближайшее время будет больше.
Следующие шаги
Подключаемые модули поиска текста абстракцияпоиска текста подключаютфункцию "Поиск текста", вызываятекстовый поиск с помощью векторных хранилищ