YDB 통합
YDB 통합
LangChain JavaScript로 YDBVectorStore 벡터 스토어와 통합해요.
YDB는 높은 가용성과 확장성을 강력한 일관성·ACID 트랜잭션과 결합한 다재다능한 오픈소스 분산 SQL 데이터베이스예요. 트랜잭션(OLTP), 분석(OLAP), 스트리밍 워크로드를 동시에 수용해요.
이 가이드는 YDBVectorStore 벡터 스토어 시작을 위한 빠른 개요를 제공해요. 모든 기능과 구성에 대한 자세한 문서는 YDB LangChain.js 가이드를 참고하세요.
설정 (Setup)
Docker로 로컬 YDB 인스턴스를 설정하세요:
docker run -d -p 2136:2136 --name ydb-langchain -e YDB_USE_IN_MEMORY_PDISKS=true -h localhost ydbplatform/local-ydb:trunk
이 통합을 사용하려면 @ydbjs/langchain과 @langchain/core를 설치하세요.
이 가이드는 OpenAI 임베딩을 예시로 사용해요. 대신 다른 지원 임베딩 모델을 사용할 수도 있어요.
yarn add @ydbjs/langchain @langchain/openai @langchain/core
pnpm add @ydbjs/langchain @langchain/openai @langchain/core
자격 증명 (Credentials)
로컬 YDB 인스턴스에는 필수 자격 증명이 없어요. 위에 제시된 패키지를 설치했는지 확인하세요.
이 가이드에 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 { YDBVectorStore } from "@ydbjs/langchain";
import { OpenAIEmbeddings } from "@langchain/openai";
const embeddings = new OpenAIEmbeddings({
model: "text-embedding-3-small",
});
await using vectorStore = new YDBVectorStore(embeddings, {
connectionString: "grpc://localhost:2136/local",
});
await using 문법은 변수가 범위를 벗어날 때 스토어를 자동으로 폐기하고 드라이버를 닫아요. await using을 사용하지 않는다면 작업이 끝났을 때 close()를 직접 호출하세요:
const vectorStore = new YDBVectorStore(embeddings, {
connectionString: "grpc://localhost:2136/local",
});
// ...
vectorStore.close();
벡터 스토어 관리 (Manage vector store)
벡터 스토어에 항목 추가 (Add items to vector store)
addDocuments 메서드로 문서를 추가하세요. ID가 없는 문서에는 자동 생성된 UUID가 부여되며, 기존 ID로 문서를 재삽입하면 교체돼요.
import { Document } from "@langchain/core/documents";
const document1 = new Document({
pageContent: "The powerhouse of the cell is the mitochondria",
metadata: { source: "https://example.com" },
});
const document2 = new Document({
pageContent: "Buildings are made out of brick",
metadata: { source: "https://example.com" },
});
const document3 = new Document({
pageContent: "Mitochondria are made out of lipids",
metadata: { source: "https://example.com" },
});
const documents = [document1, document2, document3];
const ids = await vectorStore.addDocuments(documents);
벡터 스토어에서 항목 삭제 (Delete items from vector store)
특정 문서를 ID로 삭제하세요:
await vectorStore.delete({ ids: [ids[ids.length - 1]] });
벡터 스토어 쿼리 (Query vector store)
직접 쿼리 (Query directly)
간단한 유사도 검색은 다음과 같이 수행하세요:
const results = await vectorStore.similaritySearch("biology", 2);
for (const doc of results) {
console.log(`* ${doc.pageContent} [${JSON.stringify(doc.metadata)}]`);
}
유사도 검색을 실행하고 대응하는 점수를 받으려면 다음을 실행하세요:
const resultsWithScore = await vectorStore.similaritySearchWithScore("biology", 2);
for (const [doc, score] of resultsWithScore) {
console.log(`* [SIM=${score.toFixed(3)}] ${doc.pageContent} [${JSON.stringify(doc.metadata)}]`);
}
메타데이터로 결과를 필터링할 수도 있어요. 필터는 키-값 쌍으로 전달되며 AND 논리로 결합돼요:
const filteredResults = await vectorStore.similaritySearch("biology", 2, {
source: "https://example.com",
});
리트리버로 변환해 쿼리 (Query by turning into retriever)
벡터 스토어를 리트리버로 변환해 체인에서 더 쉽게 사용할 수도 있어요:
const retriever = vectorStore.asRetriever({
k: 2,
});
await retriever.invoke("biology");
검색 증강 생성(RAG) 사용법 (Usage for retrieval-augmented generation)
이 벡터 스토어를 검색 증강 생성(RAG)에 사용하는 방법에 대한 가이드는 다음 섹션을 참고하세요:
API reference
YDBVectorStore의 모든 기능과 구성(검색 전략, 근사 최근접 이웃 인덱싱, 열 커스터마이징 포함)에 대한 자세한 문서는 YDB LangChain.js 가이드를 참고하세요.
출처: 문서
본문
YDBVectorStore는 오픈소스 분산 SQL 데이터베이스인 YDB용 벡터 스토어 통합이에요. @ydbjs/langchain 패키지에서 가져와 임베딩과 connectionString으로 인스턴스화하고(await using 또는 close()로 리소스 해제), 문서 추가(자동 UUID, ID 재삽입 시 교체)·삭제·similaritySearch·similaritySearchWithScore·메타데이터 AND 필터·asRetriever()를 지원해요.