의미 체계 커널 벡터 저장소 커넥터에 대한 포함 생성
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 }
팁
데이터 모델에 주석을 추가하는 방법에 대한 자세한 내용은 데이터 모델 정의를 참조하세요.
팁
레코드 정의를 만드는 방법에 대한 자세한 내용은 레코드 정의로 스키마 정의를 참조하세요.
서비스 예정
추가 정보는 곧 제공될 예정입니다.
서비스 예정
추가 정보는 곧 제공될 예정입니다.