DuckDB 벡터 저장소
DuckDB 스토리지 구현은 다음을 사용하여 임베디드 고성능 벡터 검색 솔루션을 제공합니다.DuckDB, 처리 중인 분석 데이터베이스입니다. HNSW 인덱싱과 함께 벡터 유사성 검색을 위해 VSS 확장을 사용하여 외부 서버가 필요 없는 가볍고 효율적인 벡터 데이터베이스를 제공합니다.
@mastra/duckdb 패키지의 일부이며, 메타데이터 필터링을 지원하는 효율적인 벡터 유사도 검색 기능을 제공합니다.
설치설치에 대한 직접 링크
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/duckdb@latest
pnpm add @mastra/duckdb@latest
yarn add @mastra/duckdb@latest
bun add @mastra/duckdb@latest
용법용법에 대한 직접 링크
import { DuckDBVector } from "@mastra/duckdb";
// Create a new vector store instance
const store = new DuckDBVector({
id: "duckdb-vector",
path: ":memory:", // or './vectors.duckdb' for file persistence
});
// Create an index
await store.createIndex({
indexName: "myCollection",
dimension: 1536,
metric: "cosine",
});
// Add vectors with metadata
const vectors = [[0.1, 0.2, ...], [0.3, 0.4, ...]];
const metadata = [
{ text: "first document", category: "A" },
{ text: "second document", category: "B" },
];
await store.upsert({
indexName: "myCollection",
vectors,
metadata,
});
// Query similar vectors
const queryVector = [0.1, 0.2, ...];
const results = await store.query({
indexName: "myCollection",
queryVector,
topK: 10,
filter: { category: "A" },
});
// Clean up
await store.close();
생성자 옵션생성자 옵션에 대한 직접 링크
id:
path?:
dimensions?:
metric?:
행동 양식행동 양식에 대한 직접 링크
createIndex()createindex에 대한 직접 링크
가장 가까운 이웃을 빠르게 대략적으로 검색하기 위해 선택적 HNSW 인덱스를 사용하여 새 벡터 컬렉션을 만듭니다.
indexName:
dimension:
metric?:
upsert()upsert에 대한 직접 링크
인덱스에 벡터와 해당 메타데이터를 추가하거나 업데이트합니다.
indexName:
vectors:
metadata?:
ids?:
query()query에 대한 직접 링크
선택적 메타데이터 필터링을 사용하여 유사한 벡터를 검색합니다.
indexName:
queryVector:
topK?:
filter?:
includeVector?:
describeIndex()describeindex에 대한 직접 링크
인덱스에 대한 정보를 가져옵니다.
indexName:
보고:
interface IndexStats {
dimension: number
count: number
metric: 'cosine' | 'euclidean' | 'dotproduct'
}
deleteIndex()deleteindex에 대한 직접 링크
인덱스와 해당 데이터를 모두 삭제합니다.
indexName:
listIndexes()listindexes에 대한 직접 링크
데이터베이스의 모든 벡터 인덱스를 나열합니다.
보고:Promise<string[]>
updateVector()updatevector에 대한 직접 링크
ID 또는 메타데이터 필터를 기준으로 단일 벡터를 업데이트합니다. id 또는 filter 중 하나만 제공해야 하며, 둘 다 제공해서는 안 됩니다.
indexName:
id?:
filter?:
update:
update.vector?:
update.metadata?:
deleteVector()deletevector에 대한 직접 링크
ID별로 인덱스에서 특정 벡터 항목을 삭제합니다.
indexName:
id:
deleteVectors()deletevectors에 대한 직접 링크
ID 또는 메타데이터 필터를 기준으로 여러 벡터를 삭제합니다. ids 또는 filter 중 하나만 제공해야 하며, 둘 다 제공해서는 안 됩니다.
indexName:
ids?:
filter?:
close()close에 대한 직접 링크
데이터베이스 연결을 닫고 리소스를 해제합니다.
await store.close()
응답 유형응답 유형에 대한 직접 링크
쿼리 결과는 다음 형식으로 반환됩니다.
interface QueryResult {
id: string
score: number
metadata: Record<string, any>
vector?: number[] // Only included if includeVector is true
}
필터 연산자필터 연산자에 대한 직접 링크
DuckDB 벡터 저장소는 MongoDB와 유사한 필터 연산자를 지원합니다.
| 카테고리 | 운영자 |
|---|---|
| 비교 | $eq, $ne, $gt, $gte, $lt, $lte |
| Logical | $and, $or, $not, $nor |
| Array | $in, $nin |
| Element | $exists |
| 텍스트 | $contains |
필터 예필터 예에 대한 직접 링크
// Allegato operators
const results = await store.query({
indexName: "docs",
queryVector: [...],
filter: {
$and: [
{ category: "electronics" },
{ price: { $gte: 100, $lte: 500 } },
],
},
});
// Nested field access
const results = await store.query({
indexName: "docs",
queryVector: [...],
filter: { "user.profile.tier": "premium" },
});
거리 측정법거리 측정법에 대한 직접 링크
| 측정 방식 | 설명 | 점수 해석 | 가장 적합한 대상 |
|---|---|---|---|
cosine | 코사인 유사도 | 0~1(1 = 가장 유사함) | 텍스트 임베딩, 정규화된 벡터 |
euclidean | L2 거리 | 0~∞(0 = 가장 유사함) | 이미지 임베딩, 공간 데이터 |
dotproduct | 내적 | 높을수록 더 유사함 | 벡터 크기가 중요한 경우 |
오류 처리오류 처리에 대한 직접 링크
저장소는 다양한 실패 사례에 대해 특정 오류를 발생시킵니다.
try {
await store.query({
indexName: 'my-collection',
queryVector: queryVector,
})
} catch (error) {
if (error.message.includes('not found')) {
console.error('The specified index does not exist')
} else if (error.message.includes('Invalid identifier')) {
console.error('Index name contains invalid characters')
} else {
console.error('Vector store error:', error.message)
}
}
일반적인 오류 사례는 다음과 같습니다.
- 잘못된 인덱스 이름 형식
- 인덱스/테이블을 찾을 수 없음
- 쿼리 벡터와 인덱스 간 차원 불일치
- 삭제/업데이트 작업에 빈 필터 또는 ID 배열이 있음
- 상호 배타성 위반(
id와filter를 모두 제공)
사용 사례사용 사례에 대한 직접 링크
내장된 의미 검색내장된 의미 검색에 대한 직접 링크
완전히 프로세스 내에서 실행되는 의미론적 검색을 통해 오프라인 지원 AI 애플리케이션을 구축하세요.
const store = new DuckDBVector({
id: 'offline-search',
path: './search.duckdb',
})
로컬 RAG 파이프라인로컬 RAG 파이프라인에 대한 직접 링크
클라우드 벡터 데이터베이스로 데이터를 보내지 않고 민감한 문서를 로컬로 처리합니다.
const store = new DuckDBVector({
id: 'private-rag',
path: './confidential.duckdb',
dimensions: 1536,
})
개발 및 테스트개발 및 테스트에 대한 직접 링크
인프라 없이 벡터 검색 기능을 신속하게 프로토타입화합니다.
const store = new DuckDBVector({
id: 'dev-store',
path: ':memory:', // Fast in-memory for tests
})