다음을 통해 공유


의미 체계 커널 벡터 저장소 커넥터에 대한 포함 생성

Warning

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

의미 체계 커널은 많은 인기 있는 AI 서비스를 사용하여 포함 생성을 지원합니다.

이러한 서비스를 직접 생성하거나 종속성 주입 컨테이너에 추가하고 여기에서 확인할 수 있습니다.

포함 생성기 생성기 생성

의미 체계 커널에서 직접 제공하는 텍스트 포함 서비스의 인스턴스를 생성할 수 있습니다. 모두 인터페이스를 구현합니다 ITextEmbeddingGenerationService .

// Constructing an Azure Open AI embedding generation service directly.
ITextEmbeddingGenerationService azureOpenAITES = new AzureOpenAITextEmbeddingGenerationService(
    "text-embedding-ada-002",
    "https://{myservice}.openai.azure.com/",
    "apikey");

// Constructing an Olama embedding generation service directly.
ITextEmbeddingGenerationService olamaTES = new OllamaTextEmbeddingGenerationService(
    "mxbai-embed-large",
    new Uri("http://localhost:11434"));

도우미를 사용하여 종속성 주입 컨테이너에 등록할 수도 있습니다.

// Registering Google AI embedding generation service with a service collection.
var services = new ServiceCollection();
services.AddGoogleAIEmbeddingGeneration("text-embedding-004", "apiKey");

// Registering Mistral AI embedding generation service with the dependency injection container on
// the kernel builder.
var kernelBuilder = Kernel
    .CreateBuilder()
    .AddMistralTextEmbeddingGeneration("mistral-embed", "apiKey");

포함 생성

만든 메서드를 ITextEmbeddingGenerationService 사용하려면 메서드를 GenerateEmbeddingAsync 호출하기만 하면 됩니다.

레코드를 업로드할 때 embedding을 생성하는 예제는 다음과 같습니다.

public async Task GenerateEmbeddingsAndUpsertAsync(
    ITextEmbeddingGenerationService textEmbeddingGenerationService,
    IVectorStoreRecordCollection<ulong, Hotel> collection)
{
    // Upsert a record.
    string descriptionText = "A place where everyone can be happy.";
    ulong hotelId = 1;

    // Generate the embedding.
    ReadOnlyMemory<float> embedding =
        await textEmbeddingGenerationService.GenerateEmbeddingAsync(descriptionText);

    // Create a record and upsert with the already generated embedding.
    await collection.UpsertAsync(new Hotel
    {
        HotelId = hotelId,
        HotelName = "Hotel Happy",
        Description = descriptionText,
        DescriptionEmbedding = embedding,
        Tags = new[] { "luxury", "pool" }
    });
}

다음은 검색할 때 포함을 생성하는 예제입니다.

public async Task GenerateEmbeddingsAndSearchAsync(
    ITextEmbeddingGenerationService textEmbeddingGenerationService,
    IVectorStoreRecordCollection<ulong, Hotel> collection)
{
    // Upsert a record.
    string descriptionText = "Find me a hotel with happiness in mind.";

    // Generate the embedding.
    ReadOnlyMemory<float> searchEmbedding =
        await textEmbeddingGenerationService.GenerateEmbeddingAsync(descriptionText);

    // Search using the already generated embedding.
    List<VectorSearchResult<Hotel>> searchResult = await collection.VectorizedSearchAsync(searchEmbedding).ToListAsync();

    // Print the first search result.
    Console.WriteLine("Score for first result: " + searchResult.FirstOrDefault()?.Score);
    Console.WriteLine("Hotel description for first result: " + searchResult.FirstOrDefault()?.Record.Description);
}

포함 차원

일반적으로 벡터 데이터베이스는 컬렉션을 만들 때 각 벡터에 있는 차원 수를 지정해야 합니다. 다양한 포함 모델은 일반적으로 차원 크기가 다른 벡터 생성을 지원합니다. 예를 들어 Open AI text-embedding-ada-002 는 1536차원의 벡터를 생성합니다. 또한 일부 모델을 사용하면 개발자가 출력 벡터에서 원하는 차원 수를 선택할 수 있습니다. 예를 들어 Google text-embedding-004 은 기본적으로 768차원의 벡터를 생성하지만 개발자는 1에서 768 사이의 차원 수를 선택할 수 있습니다.

포함 모델에서 생성된 벡터가 데이터베이스의 일치하는 벡터와 동일한 수의 차원을 가지도록 하는 것이 중요합니다.

의미 체계 커널 벡터 저장소 추상화를 사용하여 컬렉션을 만드는 경우 주석 또는 레코드 정의를 통해 각 벡터 속성에 필요한 차원 수를 지정해야 합니다. 다음은 차원 수를 1536으로 설정하는 예제입니다.

[VectorStoreRecordVector(Dimensions: 1536)]
public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
new VectorStoreRecordVectorProperty("DescriptionEmbedding", typeof(float)) { Dimensions = 1536 }

데이터 모델에 주석을 추가하는 방법에 대한 자세한 내용은 데이터 모델 정의를 참조하세요.

레코드 정의를 만드는 방법에 대한 자세한 내용은 레코드 정의로 스키마 정의를 참조하세요.

서비스 예정

추가 정보는 곧 제공될 예정입니다.

서비스 예정

추가 정보는 곧 제공될 예정입니다.