什麼是語意核心文字搜尋?
警告
語意核心文字搜尋功能為預覽版,且需要重大變更的改善仍可能在發行前有限的情況下發生。
語意核心提供功能,可讓開發人員在呼叫大型語言模型 (LLM) 時整合搜尋。 這很重要,因為 LLM 是在固定數據集上定型,而且可能需要存取其他數據,才能準確地回應使用者要求。
提示 LLM 時提供其他內容的程式稱為「擷取增強世代」(RAG)。 RAG 通常牽涉到擷取與目前使用者要求相關的其他數據,並使用這項數據增強傳送至 LLM 的提示。 LLM 可以使用其定型加上額外的內容,以提供更精確的回應。
當使用者的要求與 LLM 定型數據集中未包含的最新資訊相關時,當這變得重要時的簡單範例。 藉由執行適當的文字搜尋,並包含使用者要求的結果,將會達成更精確的回應。
語意核心提供一組文字搜尋功能,可讓開發人員使用 Web 搜尋或向量資料庫執行搜尋,並輕鬆地將 RAG 新增至其應用程式。
使用 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
Bing 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);
}
Google Web 搜尋
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 文字搜尋建立外掛程式,並叫用外掛程式,以將搜尋結果新增至提示。
下列範例程式代碼示範如何達成此目的:
Kernel
建立已註冊 OpenAI 服務的 。 這會用來使用提示來呼叫gpt-4o
模型。- 建立文字搜尋實例。
- 從文字搜尋實例建立搜尋外掛程式。
- 建立提示範本,以搭配查詢叫用搜尋外掛程式,並在提示中包含搜尋結果以及原始查詢。
- 叫用提示並顯示回應。
此模型會提供以 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));
上述範例有許多問題:
- 回應不包含引文,其中顯示用來提供基礎內容的網頁。
- 回應會包含來自任何網站的數據,最好將此限制在信任的網站。
- 只有每個網頁的代碼段可用來提供模型的基礎內容,代碼段可能不會包含提供準確回應所需的數據。
請參閱說明 文字搜尋外掛程式 的頁面,以取得這些問題的解決方案。
接下來,我們建議查看 文字搜尋抽象概念。
即將推出
更多即將推出。
即將推出
更多即將推出。