다음을 통해 공유


의미 체계 커널 텍스트 검색이란?

Warning

의미 체계 커널 텍스트 검색 기능은 미리 보기이며, 릴리스 전에 제한된 상황에서도 호환성이 손상되는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.

의미 체계 커널은 개발자가 LLM(대규모 언어 모델)을 호출할 때 검색을 통합할 수 있는 기능을 제공합니다. 이는 LLM이 고정 데이터 집합에 대해 학습되고 사용자 요청에 정확하게 응답하기 위해 추가 데이터에 액세스해야 할 수 있기 때문에 중요합니다.

LLM을 묻는 메시지를 표시할 때 추가 컨텍스트를 제공하는 프로세스를 RAG(Retrieval-Augmented Generation)라고 합니다. 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. 각 웹 페이지의 코드 조각만 모델에 접지 컨텍스트를 제공하는 데 사용되고 있으며, 코드 조각에는 정확한 응답을 제공하는 데 필요한 데이터가 포함되지 않을 수 있습니다.

이러한 문제에 대한 해결 방법은 텍스트 검색 플러그 인을 설명하는 페이지를 참조하세요.

다음으로 텍스트 검색 추상화에 대해 살펴보는 것이 좋습니다.

서비스 예정

더 곧 출시될 예정입니다.

서비스 예정

더 곧 출시될 예정입니다.

다음 단계

텍스트 검색 추상화텍스트 검색 플러그 인텍스트 검색 함수가 벡터 저장소를 사용하여 텍스트 검색을 호출합니다.