为什么需要文本搜索抽象?

在聊天历史记录中处理文本提示或文本内容时,需要提供与此文本相关的其他相关信息。 这为 AI 模型提供了相关上下文,有助于提供更准确的响应。 为了满足此要求,语义内核提供了一个文本搜索抽象,它允许使用来自各种源的文本输入,例如 Web 搜索引擎、矢量存储等,并提供一些标准化格式的结果。

注意

目前不支持搜索图像内容或音频内容。

文本搜索抽象

语义内核文本搜索抽象提供三种方法:

  1. Search
  2. GetSearchResults
  3. GetTextSearchResults

对与指定查询相关的内容执行搜索,并返回表示搜索结果的字符串值。 Search 可以在最基本的用例中使用,例如,使用搜索结果扩充 semantic-kernel 格式提示模板时。 Search 始终只返回每个搜索结果的单个字符串值,因此,如果需要引文,则不适合。

GetSearchResults

执行与指定查询相关的内容的搜索,并返回由实现定义的格式的搜索结果。 GetSearchResults 返回基础搜索服务定义的完整搜索结果。 这提供了最多功能性,代价是将代码绑定到特定的搜索服务实现。

GetTextSearchResults

对与指定查询相关的内容的搜索,并返回表示搜索结果的规范化数据模型。 此规范化数据模型包括字符串值和名称与链接(可选)。 GetTextSearchResults 允许代码与特定的搜索服务实现隔离,因此同一提示可用于多个不同的搜索服务。

提示

若要运行此页上显示的示例,请转到 GettingStartedWithTextSearch/Step1_Web_Search.cs

下面的示例代码显示了每个文本搜索方法的操作。

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

// Search and return results as BingWebPage items
KernelSearchResults<object> webPages = await textSearch.GetSearchResultsAsync(query, new() { Top = 4 });
await foreach (BingWebPage webPage in webPages.Results)
{
    Console.WriteLine($"Name:            {webPage.Name}");
    Console.WriteLine($"Snippet:         {webPage.Snippet}");
    Console.WriteLine($"Url:             {webPage.Url}");
    Console.WriteLine($"DisplayUrl:      {webPage.DisplayUrl}");
    Console.WriteLine($"DateLastCrawled: {webPage.DateLastCrawled}");
}

// Search and return results as TextSearchResult items
KernelSearchResults<TextSearchResult> textResults = await textSearch.GetTextSearchResultsAsync(query, new() { Top = 4 });
await foreach (TextSearchResult result in textResults.Results)
{
    Console.WriteLine($"Name:  {result.Name}");
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Link:  {result.Link}");
}

即将推出

即将推出更多内容。

即将推出

即将推出更多内容。

后续步骤