QdrantVectorStore 통합
QdrantVectorStore 통합
LangChain JavaScript로 QdrantVectorStore와 통합해요.
Qdrant는 벡터 유사도 검색 엔진이에요. 추가 페이로드(payload)가 있는 포인트(벡터)를 저장·검색·관리하기 위한 편리한 API를 갖춘 프로덕션 지원 서비스를 제공해요.
이 가이드는 Qdrant 벡터 스토어 시작을 위한 빠른 개요를 제공해요. 모든 QdrantVectorStore 기능과 구성에 대한 자세한 문서는 API reference를 참고하세요.
개요 (Overview)
통합 세부 정보 (Integration details)
| 클래스 | 패키지 | PY 지원 | Downloads | Version |
|---|---|---|---|---|
QdrantVectorStore |
@langchain/qdrant |
✅ |
설정 (Setup)
Qdrant 벡터 스토어를 사용하려면 Qdrant 인스턴스를 설정하고 @langchain/qdrant와 @langchain/core를 설치하세요. @langchain/qdrant 패키지는 Qdrant REST 클라이언트(@qdrant/js-client-rest)를 번들로 포함해요.
이 가이드는 OpenAI 임베딩을 예시로 사용해요. 대신 다른 지원 임베딩 모델을 사용할 수도 있어요.
yarn add @langchain/qdrant @langchain/core @langchain/openai
pnpm add @langchain/qdrant @langchain/core @langchain/openai
필요한 의존성을 설치한 후, Qdrant 설정 지침을 따라 컴퓨터의 Docker로 Qdrant 인스턴스를 실행하세요. 컨테이너가 실행되는 URL을 기록해 두세요.
자격 증명 (Credentials)
QDRANT_URL 환경 변수를 설정하세요:
// e.g. http://localhost:6333
process.env.QDRANT_URL = "your-qdrant-url"
이 가이드에 OpenAI 임베딩을 사용한다면 OpenAI 키도 설정하세요:
process.env.OPENAI_API_KEY = "YOUR_API_KEY";
모델 호출의 자동 추적을 받으려면 아래 주석을 해제해 LangSmith API 키를 설정할 수도 있어요:
// process.env.LANGSMITH_TRACING="true"
// process.env.LANGSMITH_API_KEY="your-api-key"
인스턴스화 (Instantiation)
import { QdrantVectorStore } from "@langchain/qdrant";
import { OpenAIEmbeddings } from "@langchain/openai";
const embeddings = new OpenAIEmbeddings({
model: "text-embedding-3-small",
});
const vectorStore = await QdrantVectorStore.fromExistingCollection(embeddings, {
url: process.env.QDRANT_URL,
collectionName: "langchainjs-testing",
});
벡터 스토어 관리 (Manage vector store)
벡터 스토어에 항목 추가 (Add items to vector store)
import type { Document } from "@langchain/core/documents";
const document1: Document = {
pageContent: "The powerhouse of the cell is the mitochondria",
metadata: { source: "https://example.com" }
};
const document2: Document = {
pageContent: "Buildings are made out of brick",
metadata: { source: "https://example.com" }
};
const document3: Document = {
pageContent: "Mitochondria are made out of lipids",
metadata: { source: "https://example.com" }
};
const document4: Document = {
pageContent: "The 2024 Olympics are in Paris",
metadata: { source: "https://example.com" }
}
const documents = [document1, document2, document3, document4];
await vectorStore.addDocuments(documents);
최상위 문서 id와 삭제는 현재 지원되지 않아요.
벡터 스토어 쿼리 (Query vector store)
직접 쿼리 (Query directly)
간단한 유사도 검색은 다음과 같이 수행할 수 있어요:
const filter = {
"must": [
{ "key": "metadata.source", "match": { "value": "https://example.com" } },
]
};
const similaritySearchResults = await vectorStore.similaritySearch("biology", 2, filter);
for (const doc of similaritySearchResults) {
console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata, null)}]`);
}
* The powerhouse of the cell is the mitochondria [{"source":"https://example.com"}]
* Mitochondria are made out of lipids [{"source":"https://example.com"}]
Qdrant 필터 문법에 대한 자세한 내용은 이 페이지를 참고하세요. 모든 값은 metadata. 접두사를 붙여야 해요.
유사도 검색을 실행하고 대응하는 점수를 받으려면 다음을 실행할 수 있어요:
const similaritySearchWithScoreResults = await vectorStore.similaritySearchWithScore("biology", 2, filter)
for (const [doc, score] of similaritySearchWithScoreResults) {
console.log(`* [SIM=${score.toFixed(3)}] ${doc.pageContent} [${JSON.stringify(doc.metadata)}]`);
}
* [SIM=0.165] The powerhouse of the cell is the mitochondria [{"source":"https://example.com"}]
* [SIM=0.148] Mitochondria are made out of lipids [{"source":"https://example.com"}]
리트리버로 변환해 쿼리 (Query by turning into retriever)
벡터 스토어를 리트리버로 변환해 체인에서 더 쉽게 사용할 수도 있어요.
const retriever = vectorStore.asRetriever({
// Optional filter
filter: filter,
k: 2,
});
await retriever.invoke("biology");
검색 증강 생성(RAG) 사용법 (Usage for retrieval-augmented generation)
이 벡터 스토어를 검색 증강 생성(RAG)에 사용하는 방법에 대한 가이드는 다음 섹션을 참고하세요:
API reference
모든 QdrantVectorStore 기능과 구성에 대한 자세한 문서는 API reference를 참고하세요.
출처: 문서
본문
QdrantVectorStore는 Qdrant 벡터 검색 엔진용 통합이에요. @langchain/qdrant 패키지에서 가져와 QDRANT_URL·collectionName으로 fromExistingCollection을 호출해 인스턴스화하고, addDocuments·similaritySearch·similaritySearchWithScore·asRetriever()를 사용할 수 있어요. 필터는 Qdrant 문법(metadata. 접두사 필수)을 따르며, 최상위 문서 id·삭제는 지원하지 않아요. Node.js에서만 사용할 수 있어요.