경고
MongoDB 벡터 저장소 기능은 미리 보기로 제공되며, 릴리스 전에 제한된 상황에서도 호환성이 손상되는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.
경고
의미 체계 커널 벡터 저장소 기능은 미리 보기 상태이며 릴리스 전에 제한된 상황에서도 호환성이 손상되는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.
경고
의미 체계 커널 벡터 저장소 기능은 미리 보기 상태이며 릴리스 전에 제한된 상황에서도 호환성이 손상되는 변경이 필요한 개선 사항이 계속 발생할 수 있습니다.
개요
MongoDB 벡터 저장소 커넥터를 사용하여 MongoDB의 데이터에 액세스하고 관리할 수 있습니다. 커넥터의 특징은 다음과 같습니다.
| 기능 영역 | 지원 |
|---|---|
| 컬렉션이 특정 대상으로 매핑됩니다. | MongoDB 컬렉션 + 인덱스 |
| 지원되는 키 속성 형식 | 문자열 |
| 지원되는 데이터 속성 형식 |
|
| 지원되는 벡터 속성 형식 |
|
| 지원되는 인덱스 형식 | 해당 없음 |
| 지원되는 거리 함수 |
|
| 지원되는 필터 조건 |
|
| 레코드에서 여러 벡터를 지원합니다. | 예 |
| IsIndexed가 지원되는가요? | 예 |
| IsFullTextIndexed가 지원되나요? | 아니요 |
| StorageName이 지원되는가요? | 아니요, 대신 BsonElementAttribute를 사용합니다. 자세한 내용은 여기를 참조하세요. |
| HybridSearch가 지원되는가요? | 예 |
| 기능 영역 | 지원 |
|---|---|
| 컬렉션이 특정 대상으로 매핑됩니다. | MongoDB 컬렉션 + 인덱스 |
| 지원되는 키 속성 형식 | 문자열 |
| 지원되는 데이터 속성 형식 |
|
| 지원되는 벡터 속성 형식 |
|
| 지원되는 인덱스 형식 |
|
| 지원되는 거리 함수 |
|
| 지원되는 필터 조건 |
|
| 레코드에서 여러 벡터를 지원합니다. | 예 |
| 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 설명서를 참조 하세요.
곧 출시 예정
추가 정보는 곧 제공될 예정입니다.