@ragfish/qdrant
v0.1.0
Published
Qdrant retriever and ingest utilities for ragfish
Maintainers
Readme
@ragfish/qdrant
Qdrant provider utilities for ragfish.
This package gives you:
initQdrant()to initialize the shared Qdrant clientQdrantRetriever(BaseRetrieverimplementation)ingest()to chunk, embed, and upsert text into a Qdrant collectionchunkText()utility
Install
npm install ragfish @ragfish/qdrantQuick Start
import { Settings } from 'ragfish';
import { OpenAIEmbedding } from '@ragfish/openai';
import { initQdrant, ingest, QdrantRetriever } from '@ragfish/qdrant';
Settings.embedding = new OpenAIEmbedding({
apiKey: process.env.OPENAI_API_KEY!,
model: 'text-embedding-3-small',
});
initQdrant({
url: process.env.QDRANT_URL!,
apiKey: process.env.QDRANT_API_KEY, // optional
});
await ingest('docs-collection', {
text: 'Your full document text here',
payload: {
documentId: 'doc-123',
fileName: 'handbook.md',
},
chunkSize: 1000, // optional, default 1000
chunkOverlap: 200, // optional, default 200
});
const retriever = new QdrantRetriever({
collectionName: 'docs-collection',
topK: 5, // optional, default 5
});
const chunks = await retriever.run('refund policy');
console.log(chunks);API
initQdrant
initQdrant({
url: string, // required
apiKey?: string // optional
}): voidMust be called before ingest() or QdrantRetriever.run().
ingest
ingest(collectionName: string, {
text: string, // required
payload: Record<string, unknown>, // required metadata
chunkSize?: number, // optional, default 1000
chunkOverlap?: number // optional, default 200
}): Promise<string[]>What ingest() does:
- Splits
textinto chunks - Embeds each chunk using
Settings.embedding - Upserts points into Qdrant
- Merges your
payloadwith chunk metadata:text(chunk content)chunkIndex(number)
Returns the created Qdrant point IDs.
QdrantRetriever
new QdrantRetriever({
collectionName: string, // required
filters?: Record<string, unknown>, // optional Qdrant filter
topK?: number // optional, default 5
})Implements BaseRetriever:
run(query: string): Promise<RetrievedChunk[]>It embeds the query via Settings.embedding, runs Qdrant search, and returns:
documentIdfileNamechunkIndextextscore
chunkText
chunkText(text: string, chunkSize: number, chunkOverlap: number): string[]Notes
- Set
Settings.embeddingbefore usingingest()orQdrantRetriever. - Call
initQdrant()once during app startup. - Ensure your payload includes fields your application needs (for example
documentId,fileName).
License
MIT
