올해는 머신러닝이다.
무료 백터 디비 Qdrant 본문
Qdrant는 고차원 벡터의 효율적인 저장과 검색을 지원하는 오픈 소스 벡터 데이터베이스이자 벡터 검색 엔진입니다. Rust로 개발되어 높은 성능과 안정성을 제공하며, 특히 AI 애플리케이션에서 임베딩된 벡터의 유사성 검색, 추천 시스템, 고급 검색 기능 구현에 유용합니다. citeturn0search6
주요 특징:
- 컬렉션과 포인트: Qdrant는 데이터를 컬렉션(Collection)과 포인트(Point)로 관리합니다. 컬렉션은 동일한 특성을 가진 벡터들의 집합이며, 각 포인트는 개별 벡터 데이터를 나타냅니다. 이를 통해 데이터를 체계적으로 분류하고 효율적으로 검색할 수 있습니다. citeturn0search3
- 유연한 API: RESTful API를 통해 다양한 프로그래밍 언어와 쉽게 통합할 수 있으며, CRUD 작업 및 고급 검색 기능을 지원합니다. citeturn0search6
- 고급 필터링: 벡터와 연관된 페이로드 데이터를 기반으로 결과를 필터링하여 검색 정확도를 높일 수 있습니다. citeturn0search6
- 확장성: 클라우드 네이티브 설계로 수평적 확장이 가능하며, 증가하는 데이터 부하를 효율적으로 처리할 수 있습니다. citeturn0search6
설치 및 시작하기:
Qdrant는 Docker를 통해 쉽게 설치할 수 있습니다. 다음 명령어를 사용하여 Docker에서 Qdrant를 실행할 수 있습니다:
docker pull qdrant/qdrant
docker run -p 6333:6333 qdrant/qdrant
이렇게 하면 로컬 환경에서 Qdrant 인스턴스를 실행할 수 있으며, REST API를 통해 벡터 데이터를 저장하고 검색하는 작업을 시작할 수 있습니다. citeturn0search6
Qdrant는 AI 및 머신러닝 애플리케이션에서 벡터 유사성 검색과 추천 시스템을 구축하는 데 강력한 도구로 활용될 수 있습니다. 자세한 내용은 공식 웹사이트를 참고하시기 바랍니다. citeturn0search6
Node + Qdrant를 이용한 추천 서비스 개발
Qdrant와 Node.js를 활용하여 추천 서비스를 개발하기 위해서는 벡터 데이터베이스인 Qdrant를 사용하여 아이템의 임베딩 벡터를 저장하고, 유사성 검색을 통해 사용자에게 맞춤형 추천을 제공할 수 있습니다. 아래는 이러한 추천 서비스를 구축하기 위한 단계별 가이드입니다.
1. 환경 설정
- Qdrant 설치: Docker를 사용하여 Qdrant를 설치합니다.
- docker pull qdrant/qdrant docker run -p 6333:6333 qdrant/qdrant
- Node.js 프로젝트 초기화: 프로젝트 디렉토리를 생성하고 Node.js 프로젝트를 초기화합니다.
- mkdir qdrant-recommendation cd qdrant-recommendation npm init -y
- 필요한 패키지 설치: Qdrant의 JavaScript SDK와 기타 필요한 패키지를 설치합니다.
- npm install @qdrant/js-client-rest axios
2. Qdrant 클라이언트 설정
Qdrant의 JavaScript SDK를 사용하여 클라이언트를 설정합니다.
const { QdrantClient } = require('@qdrant/js-client-rest');
const qdrantClient = new QdrantClient({ url: 'http://127.0.0.1:6333' });
3. 컬렉션 생성
아이템 벡터를 저장할 컬렉션을 생성합니다. 예를 들어, 벡터의 차원이 1536이고 코사인 유사도를 사용할 경우 다음과 같이 설정합니다.
const collectionName = 'items';
async function createCollection() {
await qdrantClient.createCollection(collectionName, {
vectors: {
size: 1536,
distance: 'Cosine',
},
});
}
createCollection();
4. 아이템 데이터 업로드
각 아이템에 대해 임베딩 벡터를 생성하고 Qdrant에 업로드합니다. 임베딩 벡터는 OpenAI의 Embedding API 등을 사용하여 생성할 수 있습니다.
const axios = require('axios');
async function generateEmbedding(text) {
const response = await axios.post('https://api.openai.com/v1/embeddings', {
input: text,
model: 'text-embedding-ada-002',
}, {
headers: {
Authorization: `Bearer YOUR_OPENAI_API_KEY`,
},
});
return response.data.data[0].embedding;
}
async function uploadItems(items) {
const points = [];
for (const item of items) {
const embedding = await generateEmbedding(item.description);
points.push({
id: item.id,
vector: embedding,
payload: {
title: item.title,
description: item.description,
},
});
}
await qdrantClient.upsert(collectionName, { points });
}
const items = [
{ id: 1, title: 'Item 1', description: 'Description of item 1' },
{ id: 2, title: 'Item 2', description: 'Description of item 2' },
// 추가 아이템...
];
uploadItems(items);
5. 유사한 아이템 검색 및 추천
사용자 입력 또는 특정 아이템에 대한 임베딩 벡터를 생성한 후, 해당 벡터와 유사한 벡터를 Qdrant에서 검색하여 추천 아이템을 제공합니다.
async function recommendSimilarItems(itemDescription, topK = 5) {
const embedding = await generateEmbedding(itemDescription);
const searchResult = await qdrantClient.search(collectionName, {
vector: embedding,
limit: topK,
});
return searchResult.map((result) => result.payload);
}
const userInput = 'Description similar to item 1';
recommendSimilarItems(userInput).then((recommendations) => {
console.log('Recommended items:', recommendations);
});
위의 코드는 사용자의 입력과 유사한 아이템을 찾아 추천하는 간단한 예제입니다. 실제 서비스에서는 사용자 행동 데이터를 기반으로 개인화된 추천을 제공하기 위해 추가적인 로직과 데이터를 활용할 수 있습니다.
자세한 내용과 추가 예제는 Qdrant의 공식 문서와 GitHub 저장소를 참고하시기 바랍니다.
- Qdrant JavaScript SDK: citeturn0search1
- Qdrant 예제 모음: citeturn0search2
또한, Qdrant Cloud를 Node.js와 함께 사용하는 방법에 대한 자세한 가이드는 다음 블로그 포스트를 참고하실 수 있습니다:
- How to use Qdrant Cloud with Node.js: citeturn0search4
위의 자료들을 통해 Qdrant와 Node.js를 활용한 추천 시스템 개발에 대한 더욱 깊은 이해를 얻으실 수 있습니다.
'스터디' 카테고리의 다른 글
Story 생태계 (0) | 2025.02.13 |
---|---|
MkDocs란 무엇인가 (0) | 2025.02.13 |
SaaS에서 유저 도메인 설정 테스트 (0) | 2025.02.13 |
SaaS에서 유저가 도메인 입력하는 건 어떻게 개발되나 (0) | 2025.02.13 |
NestJS에서의 Fail2Ban란 (0) | 2025.02.12 |