Warning
의미 체계 커널 텍스트 검색 기능은 미리 보기이며, 릴리스 전에 제한된 상황에서도 호환성이 손상되는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.
의미 체계 커널은 개발자가 LLM(대규모 언어 모델)을 호출할 때 검색을 통합할 수 있는 기능을 제공합니다. 이는 LLM이 고정 데이터 집합에 대해 학습되고 사용자 요청에 정확하게 응답하기 위해 추가 데이터에 액세스해야 할 수 있기 때문에 중요합니다.
LLM을 묻는 메시지를 표시할 때 추가 컨텍스트를 제공하는 프로세스를 RAG(Retrieval-Augmented Generation)라고 합니다. 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);
}
팁
검색할 수 있는 검색 결과 유형에 대한 자세한 내용은 텍스트 검색 플러그 인의 설명서를 참조 하세요.
텍스트 검색 결과를 사용하여 프롬프트 보강
다음 단계는 웹 텍스트 검색에서 플러그 인을 만들고 플러그 인을 호출하여 검색 결과를 프롬프트에 추가하는 것입니다.
아래 샘플 코드는 이를 달성하는 방법을 보여줍니다.
KernelOpenAI 서비스가 등록된 서비스를 만듭니다. 프롬프트를 사용하여 모델을 호출하는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));
위의 샘플에는 다음과 같은 여러 가지 문제가 있습니다.
- 응답에는 접지 컨텍스트를 제공하는 데 사용된 웹 페이지를 보여 주는 인용이 포함되지 않습니다.
- 응답에는 모든 웹 사이트의 데이터가 포함되며 이를 신뢰할 수 있는 사이트로 제한하는 것이 좋습니다.
- 각 웹 페이지의 코드 조각만 모델에 접지 컨텍스트를 제공하는 데 사용되고 있으며, 코드 조각에는 정확한 응답을 제공하는 데 필요한 데이터가 포함되지 않을 수 있습니다.
이러한 문제에 대한 해결 방법은 텍스트 검색 플러그 인을 설명하는 페이지를 참조하세요.
다음으로 텍스트 검색 추상화에 대해 살펴보는 것이 좋습니다.
서비스 예정
더 곧 출시될 예정입니다.
서비스 예정
더 곧 출시될 예정입니다.
다음 단계
텍스트 검색 추상화텍스트 검색 플러그 인텍스트 검색 함수가 벡터 저장소를 사용하여 텍스트 검색을 호출합니다.