共用方式為


什麼是語意核心文字搜尋?

警告

語意核心文字搜尋功能為預覽版,且需要重大變更的改善仍可能在發行前有限的情況下發生。

語意核心提供功能,可讓開發人員在呼叫大型語言模型 (LLM) 時整合搜尋。 這很重要,因為 LLM 是在固定數據集上定型,而且可能需要存取其他數據,才能準確地回應使用者要求。

提示 LLM 時提供其他內容的程式稱為「擷取增強世代」(RAG)。 RAG 通常牽涉到擷取與目前使用者要求相關的其他數據,並使用這項數據增強傳送至 LLM 的提示。 LLM 可以使用其定型加上額外的內容,以提供更精確的回應。

當使用者的要求與 LLM 定型數據集中未包含的最新資訊相關時,當這變得重要時的簡單範例。 藉由執行適當的文字搜尋,並包含使用者要求的結果,將會達成更精確的回應。

語意核心提供一組文字搜尋功能,可讓開發人員使用 Web 搜尋或向量資料庫執行搜尋,並輕鬆地將 RAG 新增至其應用程式。

在下列範例程式代碼中,您可以選擇使用 Bing 或 Google 來執行 Web 搜尋作業。

提示

若要執行此頁面中顯示的範例,請移至 GettingStartedWithTextSearch/Step1_Web_Search.cs

建立文字搜尋實例

每個範例都會建立文字搜尋實例,然後執行搜尋作業以取得所提供查詢的結果。 搜尋結果會包含網頁中描述其內容的代碼段。 這隻提供有限的內容,也就是網頁內容的子集,且不會連結至資訊的來源。 稍後的範例會示範如何解決這些限制。

提示

下列範例程式代碼會使用 Semantic Kernel OpenAI 連接器和 Web 外掛程式,並使用下列命令進行安裝:

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

提示

如需可擷取搜尋結果類型的詳細資訊,請參閱 文字搜尋外掛程式的檔。

使用文字搜尋結果來增強提示

後續步驟是從 Web 文字搜尋建立外掛程式,並叫用外掛程式,以將搜尋結果新增至提示。

下列範例程式代碼示範如何達成此目的:

  1. Kernel建立已註冊 OpenAI 服務的 。 這會用來使用提示來呼叫 gpt-4o 模型。
  2. 建立文字搜尋實例。
  3. 從文字搜尋實例建立搜尋外掛程式。
  4. 建立提示範本,以搭配查詢叫用搜尋外掛程式,並在提示中包含搜尋結果以及原始查詢。
  5. 叫用提示並顯示回應。

此模型會提供以 Web 搜尋中可用最新資訊為根據的回應。

Bing Web 搜尋

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 Web 搜尋

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. 只有每個網頁的代碼段可用來提供模型的基礎內容,代碼段可能不會包含提供準確回應所需的數據。

請參閱說明 文字搜尋外掛程式 的頁面,以取得這些問題的解決方案。

接下來,我們建議查看 文字搜尋抽象概念。

即將推出

更多即將推出。

即將推出

更多即將推出。

下一步

文字搜尋抽象概念文字搜尋外掛程式文字搜尋函式使用向量存放區呼叫文字搜尋