다음을 통해 공유


Semantic Kernel에서 텍스트 임베딩 생성

텍스트 포함 생성을 사용하면 AI 모델을 사용하여 벡터(즉, 포함)를 생성할 수 있습니다. 이러한 벡터는 두 벡터에서 수학 수식을 사용하여 원래 텍스트의 유사성을 비교할 수 있도록 텍스트의 의미 체계 의미를 인코딩합니다. 이는 사용자 쿼리와 관련된 텍스트에 대한 정보 데이터베이스를 검색하려는 RAG(검색 보강 생성)와 같은 시나리오에 유용합니다. 그러면 일치하는 모든 정보를 채팅 완성에 대한 입력으로 제공할 수 있으므로 AI 모델은 사용자 쿼리에 응답할 때 더 많은 컨텍스트를 갖습니다.

포함 모델을 선택할 때 다음을 고려해야 합니다.

  • 모델이 생성하는 벡터의 크기는 얼마이며, 구성 가능합니까? 이는 벡터 저장 비용에 영향을 미칠 수 있습니다.
  • 생성된 벡터에 포함되는 요소 유형(예: float32, float16 등)은 벡터 스토리지 비용에 영향을 줍니다.
  • 벡터는 얼마나 빨리 생성하나요?
  • 생성 비용은 얼마인가요?

벡터 저장 및 검색에 대한 자세한 내용은 의미 체계 커널 벡터 저장소 커넥터란?

의미 체계 커널의 벡터 저장소와 함께 RAG를 사용하는 방법에 대한 자세한 내용은 의미 체계 커널 텍스트 검색 벡터 저장소를 사용하는 방법 및 의미 체계 커널 텍스트 검색 플러그 인이란?을 참조하세요.

로컬 환경 설정

일부 AI 서비스는 로컬로 호스팅될 수 있으며 일부 설정이 필요할 수 있습니다. 다음은 이를 지원하는 사용자에 대한 지침입니다.

로컬 설정이 없습니다.

필요한 패키지 설치

커널에 포함 생성을 추가하기 전에 필요한 패키지를 설치해야 합니다. 다음은 각 AI 서비스 공급자에 대해 설치해야 하는 패키지입니다.

dotnet add package Microsoft.SemanticKernel.Connectors.AzureOpenAI

텍스트 임베딩 생성 서비스 구축

이제 필요한 패키지를 설치했으므로 텍스트 포함 생성 서비스를 만들 수 있습니다. 다음은 의미 체계 커널을 사용하여 포함 생성 서비스를 텍스트로 만들 수 있는 몇 가지 방법입니다.

커널에 직접 추가

텍스트 포함 생성 서비스를 추가하려면 다음 코드를 사용하여 커널의 내부 서비스 공급자에 추가할 수 있습니다.

중요하다

Azure OpenAI 임베딩 생성 커넥터는 현재 실험적입니다. 이 기능을 사용하려면 #pragma warning disable SKEXP0010추가해야 합니다.

using Microsoft.SemanticKernel;

#pragma warning disable SKEXP0010
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddAzureOpenAITextEmbeddingGeneration(
    deploymentName: "NAME_OF_YOUR_DEPLOYMENT", // Name of deployment, e.g. "text-embedding-ada-002".
    endpoint: "YOUR_AZURE_ENDPOINT",           // Name of Azure OpenAI service endpoint, e.g. https://myaiservice.openai.azure.com.
    apiKey: "YOUR_API_KEY",
    modelId: "MODEL_ID",          // Optional name of the underlying model if the deployment name doesn't match the model name, e.g. text-embedding-ada-002.
    serviceId: "YOUR_SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel.
    httpClient: new HttpClient(), // Optional; if not provided, the HttpClient from the kernel will be used.
    dimensions: 1536              // Optional number of dimensions to generate embeddings with.
);
Kernel kernel = kernelBuilder.Build();

종속성 주입 사용

종속성 주입을 사용하는 경우, 서비스 공급자에 텍스트 임베딩 생성 서비스를 직접 추가하는 것이 좋습니다. 이는 포함 세대 서비스의 싱글톤을 만들고 임시 커널에서 다시 사용하려는 경우에 유용합니다.

중요하다

Azure OpenAI 임베딩 생성 커넥터는 현재 실험 단계입니다. 이 기능을 사용하려면 #pragma warning disable SKEXP0010추가해야 합니다.

using Microsoft.SemanticKernel;

var builder = Host.CreateApplicationBuilder(args);

#pragma warning disable SKEXP0010
builder.Services.AddAzureOpenAITextEmbeddingGeneration(
    deploymentName: "NAME_OF_YOUR_DEPLOYMENT", // Name of deployment, e.g. "text-embedding-ada-002".
    endpoint: "YOUR_AZURE_ENDPOINT",           // Name of Azure OpenAI service endpoint, e.g. https://myaiservice.openai.azure.com.
    apiKey: "YOUR_API_KEY",
    modelId: "MODEL_ID",          // Optional name of the underlying model if the deployment name doesn't match the model name, e.g. text-embedding-ada-002.
    serviceId: "YOUR_SERVICE_ID", // Optional; for targeting specific services within Semantic Kernel.
    dimensions: 1536              // Optional number of dimensions to generate embeddings with.
);

builder.Services.AddTransient((serviceProvider)=> {
    return new Kernel(serviceProvider);
});

독립 실행형 인스턴스 만들기

마지막으로 나중에 커널에 추가하거나 커널 또는 서비스 공급자에 삽입하지 않고 코드에서 직접 사용할 수 있도록 서비스의 인스턴스를 직접 만들 수 있습니다.

중요하다

Azure OpenAI 임베딩 생성 커넥터는 현재는 실험 단계에 있습니다. 이 기능을 사용하려면 #pragma warning disable SKEXP0010추가해야 합니다.

using Microsoft.SemanticKernel.Connectors.AzureOpenAI;

#pragma warning disable SKEXP0010
AzureOpenAITextEmbeddingGenerationService textEmbeddingGenerationService = new (
    deploymentName: "NAME_OF_YOUR_DEPLOYMENT", // Name of deployment, e.g. "text-embedding-ada-002".
    endpoint: "YOUR_AZURE_ENDPOINT",           // Name of Azure OpenAI service endpoint, e.g. https://myaiservice.openai.azure.com.
    apiKey: "YOUR_API_KEY",
    modelId: "MODEL_ID",          // Optional name of the underlying model if the deployment name doesn't match the model name, e.g. text-embedding-ada-002.
    httpClient: new HttpClient(), // Optional; if not provided, the HttpClient from the kernel will be used.
    dimensions: 1536              // Optional number of dimensions to generate embeddings with.
);

텍스트 임베딩 생성 서비스 사용

모든 텍스트 임베딩 생성 서비스는 단일 메서드 GenerateEmbeddingsAsync을 갖춘 ITextEmbeddingGenerationService을 구현하며, 이는 제공된 string 값에서 ReadOnlyMemory<float> 벡터를 생성할 수 있습니다. GenerateEmbeddingAsync 확장 메서드는 동일한 작업의 단일 값 버전에도 사용할 수 있습니다.

다음은 여러 값으로 서비스를 호출하는 방법의 예입니다.

IList<ReadOnlyMemory<float>> embeddings =
    await textEmbeddingGenerationService.GenerateEmbeddingsAsync(
    [
        "sample text 1",
        "sample text 2"
    ]);

다음은 단일 값으로 서비스를 호출하는 방법의 예입니다.

using Microsoft.SemanticKernel.Embeddings;

ReadOnlyMemory<float> embedding =
    await textEmbeddingGenerationService.GenerateEmbeddingAsync("sample text");

곧 출시 예정

자세한 내용은 곧 제공될 예정입니다.

곧 출시 예정

자세한 내용은 곧 제공될 예정입니다.