다음을 통해 공유


MongoDB 벡터 저장소 커넥터 사용(미리 보기)

경고

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

경고

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

경고

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

개요

MongoDB 벡터 저장소 커넥터를 사용하여 MongoDB의 데이터에 액세스하고 관리할 수 있습니다. 커넥터의 특징은 다음과 같습니다.

기능 영역 지원
컬렉션이 특정 대상으로 매핑됩니다. MongoDB 컬렉션 + 인덱스
지원되는 키 속성 형식 문자열
지원되는 데이터 속성 형식
  • 문자열
  • 정수
  • 길다
  • 두 배
  • 뜨다
  • 십진법
  • bool
  • 날짜 시간
  • 이러한 각 형식의 열거형
지원되는 벡터 속성 형식
  • 읽기 전용 메모리<float>
  • 부동 소수 자릿수<포함>
  • float[]
지원되는 인덱스 형식 해당 없음
지원되는 거리 함수
  • 코사인 유사도
  • 닷프로덕트유사도
  • EuclideanDistance
지원되는 필터 조건
  • EqualTo
레코드에서 여러 벡터를 지원합니다.
IsIndexed가 지원되는가요?
IsFullTextIndexed가 지원되나요? 아니요
StorageName이 지원되는가요? 아니요, 대신 BsonElementAttribute를 사용합니다. 자세한 내용은 여기를 참조하세요.
HybridSearch가 지원되는가요?
기능 영역 지원
컬렉션이 특정 대상으로 매핑됩니다. MongoDB 컬렉션 + 인덱스
지원되는 키 속성 형식 문자열
지원되는 데이터 속성 형식
  • 문자열
  • 정수
  • 길다
  • 두 배
  • 뜨다
  • 십진법
  • bool
  • 날짜 시간
  • 이러한 각 형식의 및 반복 가능한 항목
지원되는 벡터 속성 형식
  • 리스트[플로트]
  • 리스트[int]
  • ndarray
지원되는 인덱스 형식
  • Hnsw
  • IvfFlat
지원되는 거리 함수
  • CosineDistance
  • 닷프로덕트유사도
  • EuclideanDistance
지원되는 필터 조건
  • EqualTo
  • 어떤 태그든 다음과 같음
레코드에서 여러 벡터를 지원합니다.
IsFilterable이 지원되는가요?
IsFullTextSearchable이 지원되나요? 아니요

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

시작

MongoDB 벡터 저장소 커넥터 NuGet 패키지를 프로젝트에 추가합니다.

dotnet add package Microsoft.SemanticKernel.Connectors.MongoDB --prerelease

의미 체계 커널에서 제공하는 확장 메서드를 IServiceCollection 사용하여 종속성 주입 컨테이너에 벡터 저장소를 추가할 수 있습니다.

using Microsoft.Extensions.DependencyInjection;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMongoVectorStore(connectionString, databaseName);

매개 변수를 사용하지 않는 확장 메서드도 제공됩니다. 이를 위해서는 종속성 주입 컨테이너에 별도로 등록해야 하는 인스턴스 MongoDB.Driver.IMongoDatabase 가 필요합니다.

using Microsoft.Extensions.DependencyInjection;
using MongoDB.Driver;

// Using IServiceCollection with ASP.NET Core.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<IMongoDatabase>(
    sp =>
    {
        var mongoClient = new MongoClient(connectionString);
        return mongoClient.GetDatabase(databaseName);
    });
builder.Services.AddMongoVectorStore();

MongoDB Vector Store 인스턴스를 직접 생성할 수 있습니다.

using Microsoft.SemanticKernel.Connectors.MongoDB;
using MongoDB.Driver;

var mongoClient = new MongoClient(connectionString);
var database = mongoClient.GetDatabase(databaseName);
var vectorStore = new MongoVectorStore(database);

명명된 컬렉션에 대한 직접 참조를 생성할 수 있습니다.

using Microsoft.SemanticKernel.Connectors.MongoDB;
using MongoDB.Driver;

var mongoClient = new MongoClient(connectionString);
var database = mongoClient.GetDatabase(databaseName);
var collection = new MongoCollection<string, Hotel>(
    database,
    "skhotels");

데이터 매핑

MongoDB 벡터 저장소 커넥터는 데이터 모델에서 스토리지로 데이터를 매핑할 때 기본 매퍼를 제공합니다.

이 매퍼는 데이터 모델의 속성 목록을 MongoDB의 필드로 직접 변환하고 스토리지 스키마로 변환하는 데 사용합니다 MongoDB.Bson.Serialization . 즉 MongoDB.Bson.Serialization.Attributes.BsonElement , 데이터 모델 속성 이름과 다른 스토리지 이름이 필요한 경우 해당 사용이 지원됩니다. 유일한 예외는 모든 MongoDB 레코드가 ID에 이 이름을 사용해야 하므로 이름이 지정된 _id데이터베이스 필드에 매핑되는 레코드의 키입니다.

속성 이름 재정의

데이터 속성 및 벡터 속성의 경우 데이터 모델의 속성 이름과 다른 스토리지에 사용할 재정의 필드 이름을 제공할 수 있습니다. 키의 이름이 MongoDB에 고정되어 있으므로 키에 대해서는 지원되지 않습니다.

속성 이름 재정의는 데이터 모델 속성에 BsonElement 특성을 설정하여 수행됩니다.

다음은 BsonElement 설정이 있는 데이터 모델의 예입니다.

using Microsoft.Extensions.VectorData;
using MongoDB.Bson.Serialization.Attributes;

public class Hotel
{
    [VectorStoreKey]
    public ulong HotelId { get; set; }

    [BsonElement("hotel_name")]
    [VectorStoreData(IsIndexed = true)]
    public string HotelName { get; set; }

    [BsonElement("hotel_description")]
    [VectorStoreData(IsFullTextIndexed = true)]
    public string Description { get; set; }

    [BsonElement("hotel_description_embedding")]
    [VectorStoreVector(4, DistanceFunction = DistanceFunction.CosineSimilarity)]
    public ReadOnlyMemory<float>? DescriptionEmbedding { get; set; }
}

시작

MongoDB Atlas Vector Store 종속성을 환경에 추가합니다. mongo의 추가 패키지에 포함된 pymongo 패키지가 필요합니다. 이 추가 기능들과 함께 설치해야 합니다.

pip install semantic-kernel[mongo]

그런 다음 벡터 저장소를 만들 수 있습니다.

from semantic_kernel.connectors.mongodb import MongoDBAtlasStore

# If the right environment settings are set, namely MONGODB_ATLAS_CONNECTION_STRING and optionally MONGODB_ATLAS_DATABASE_NAME and MONGODB_ATLAS_INDEX_NAME, this is enough to create the Store:
store = MongoDBAtlasStore()

또는 클라이언트 생성을 더 자세히 제어하려는 경우 사용자 고유의 mongodb 클라이언트를 전달할 수도 있습니다.

from pymongo import AsyncMongoClient
from semantic_kernel.connectors.mongodb import MongoDBAtlasStore

client = AsyncMongoClient(...)
store = MongoDBAtlasStore(mongo_client=client)

클라이언트가 전달되면 Semantic Kernel이 연결을 닫지 않으므로, 예를 들어 async with 문을 사용하여 직접 닫아야 합니다.

저장소 없이 컬렉션을 직접 만들 수도 있습니다.

from semantic_kernel.connectors.mongodb import MongoDBAtlasCollection

# `hotel` is a class created with the @vectorstoremodel decorator
collection = MongoDBAtlasCollection(
    record_type=hotel,
    collection_name="my_collection",
)

직렬화

MongoDB Atlas 커넥터는 인덱스에 해당하는 필드가 있는 간단한 사전을 입력으로 요구하므로 직렬화는 매우 쉽습니다. 미리 결정된 키 _id를 사용하므로 데이터 모델의 키가 이미 _id이 아니라면 해당 키로 바꿉니다.

이 개념에 대한 자세한 내용은 serialization 설명서를 참조 하세요.

곧 출시 예정

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