Поделиться через


Что такое поиск текста семантического ядра?

Предупреждение

Функция поиска текста семантического ядра является предварительной версией, и улучшения, требующие критических изменений, могут по-прежнему возникать в ограниченных обстоятельствах до выпуска.

Семантический ядро предоставляет возможности, позволяющие разработчикам интегрировать поиск при вызове крупной языковой модели (LLM). Это важно, так как LLM обучен на фиксированных наборах данных и может потребоваться доступ к дополнительным данным для точного реагирования на запрос пользователя.

Процесс предоставления дополнительного контекста при появлении запроса LLM называется получением дополненного поколения (RAG). RAG обычно включает получение дополнительных данных, относящихся к текущему пользователю с запросом и расширением запроса, отправленного в LLM с данными. LLM может использовать его обучение плюс дополнительный контекст, чтобы обеспечить более точный ответ.

Простой пример того, когда это становится важным, когда запрос пользователя связан с актуальной информацией, не включенной в набор обучающих данных LLM. Выполнив соответствующий поиск текста и включив результаты с запросом пользователя, будут достигнуты более точные ответы.

Семантический ядро предоставляет набор возможностей поиска текста, которые позволяют разработчикам выполнять поиск с помощью веб-поиска или векторных баз данных и легко добавлять RAG в свои приложения.

В следующем примере кода можно выбрать вариант между использованием Bing или Google для выполнения операций поиска в Интернете.

Совет

Чтобы запустить примеры, показанные на этой странице, перейдите в раздел GettingStartedWithTextSearch/Step1_Web_Search.cs.

Создание экземпляра поиска текста

Каждый пример создает экземпляр текстового поиска, а затем выполняет операцию поиска, чтобы получить результаты для предоставленного запроса. Результаты поиска содержат фрагмент текста из веб-страницы, описывающей его содержимое. Это обеспечивает только ограниченный контекст, т. е. подмножество содержимого веб-страницы и нет ссылки на источник информации. В последующих примерах показано, как устранить эти ограничения.

Совет

В следующем примере кода используется соединитель OpenAI семантического ядра и веб-подключаемые модули, которые устанавливаются с помощью следующих команд:

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

Совет

Дополнительные сведения о типах результатов поиска см . в документации по подключаемым модулям поиска текста.

Использование результатов поиска текста для расширения запроса

Далее необходимо создать подключаемый модуль из поиска веб-текста и вызвать подключаемый модуль, чтобы добавить результаты поиска в запрос.

В приведенном ниже примере кода показано, как это сделать:

  1. Kernel Создайте службу OpenAI, зарегистрированную. Это будет использоваться для вызова gpt-4o модели с запросом.
  2. Создание экземпляра поиска текста.
  3. Создайте подключаемый модуль поиска из экземпляра поиска текста.
  4. Создайте шаблон запроса, который вызовет подключаемый модуль поиска с запросом и включает результаты поиска в запрос вместе с исходным запросом.
  5. Вызовите запрос и отобразите ответ.

Модель предоставит ответ, который находится в основе последних сведений, доступных в веб-поиске.

Веб-поиск 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));

Существует ряд проблем с приведенным выше примером:

  1. Ответ не содержит ссылок, показывающих веб-страницы, которые использовались для предоставления контекста заземления.
  2. Ответ будет включать данные с любого веб-сайта, было бы лучше ограничить это доверенными сайтами.
  3. Только фрагмент каждой веб-страницы используется для предоставления контекста заземления модели, фрагмент может не содержать данные, необходимые для предоставления точного ответа.

См. страницу, в которой описаны подключаемые модули поиска текста для решения этих проблем.

Далее мы рекомендуем ознакомиться с абстракциями поиска текста.

Скоро

В ближайшее время будет больше.

Скоро

В ближайшее время будет больше.

Следующие шаги