Vector Databases
Learn how to configure and use vector databases with Orka AI for semantic search and RAG applications.
What is a Vector Database?
A vector database stores text as numerical vectors (embeddings) that capture semantic meaning. When you search, it finds documents with similar meaning, not just matching keywords. This is the foundation of RAG (Retrieval-Augmented Generation).
Example: Searching for "How do I authenticate users?" will find documents about "login", "OAuth", "JWT tokens", etc. — even if they don't contain the exact words.
Supported Adapters
Orka AI supports multiple vector database backends. All adapters implement the same interface, so you can switch between them without changing your application code.
MemoryVectorAdapter
In-memory vector store — zero configuration required
import { createOrka, OpenAIAdapter, MemoryVectorAdapter } from 'orkajs'; const orka = createOrka({ llm: new OpenAIAdapter({ apiKey: process.env.OPENAI_API_KEY! }), vectorDB: new MemoryVectorAdapter(),}); // That's it! No external services needed.Pros
- • Zero setup — works out of the box
- • Fast for small datasets (<10k docs)
- • Perfect for development and testing
Cons
- • Data lost when process restarts
- • Not suitable for production
- • Limited to single process
PineconeAdapter
Fully managed cloud vector database with enterprise features
npm install @pinecone-database/pinecone
import { createOrka, OpenAIAdapter, PineconeAdapter } from 'orkajs'; const orka = createOrka({ llm: new OpenAIAdapter({ apiKey: process.env.OPENAI_API_KEY! }), vectorDB: new PineconeAdapter({ apiKey: process.env.PINECONE_API_KEY!, indexHost: 'https://your-index-abc123.svc.pinecone.io', }),});Setup Steps:
- 1. Create a free account at pinecone.io
- 2. Create an index with dimension 1536 (for OpenAI embeddings) or 384 (for smaller models)
- 3. Copy your API key and index host URL
- 4. Add them to your environment variables
Pros
- • Fully managed — no infrastructure
- • Scales to billions of vectors
- • 99.99% uptime SLA
- • Built-in metadata filtering
Cons
- • Requires cloud account
- • Costs scale with usage
- • Data stored externally
QdrantAdapter
High-performance vector database — self-hosted or cloud
npm install @qdrant/js-client-rest
import { createOrka, OpenAIAdapter, QdrantAdapter } from 'orkajs'; const orka = createOrka({ llm: new OpenAIAdapter({ apiKey: process.env.OPENAI_API_KEY! }), vectorDB: new QdrantAdapter({ url: 'http://localhost:6333', // Local Docker instance // url: 'https://xyz.qdrant.io', // Or Qdrant Cloud apiKey: process.env.QDRANT_API_KEY, // Optional for local collectionName: 'my-knowledge-base', // Optional, defaults to 'orka' }),});Quick Start with Docker:
docker run -p 6333:6333 qdrant/qdrantPros
- • Full control over your data
- • No vendor lock-in
- • Advanced filtering & payloads
- • Written in Rust — very fast
Cons
- • Requires Docker or server setup
- • You manage backups & scaling
ChromaAdapter
Open-source, AI-native embedding database
npm install chromadb
import { createOrka, OpenAIAdapter, ChromaAdapter } from 'orkajs'; const orka = createOrka({ llm: new OpenAIAdapter({ apiKey: process.env.OPENAI_API_KEY! }), vectorDB: new ChromaAdapter({ url: 'http://localhost:8000', collectionName: 'my-docs', }),});Quick Start with Docker:
docker run -p 8000:8000 chromadb/chromaComparison Table
| Feature | Memory | Pinecone | Qdrant | Chroma |
|---|---|---|---|---|
| Setup | None | Cloud signup | Docker | Docker |
| Persistence | ✗ | ✓ | ✓ | ✓ |
| Scalability | <10K docs | Billions | Millions | 100K+ |
| Self-hosted | N/A | ✗ | ✓ | ✓ |
| Best for | Development | Enterprise | Production | Small projects |
Switching Between Adapters
One of Orka AI's core strengths is adapter portability. Your application code stays exactly the same — only the configuration changes:
// Development: Use in-memory storageconst devOrka = createOrka({ llm: new OpenAIAdapter({ apiKey: process.env.OPENAI_API_KEY! }), vectorDB: new MemoryVectorAdapter(),}); // Production: Switch to Pineconeconst prodOrka = createOrka({ llm: new OpenAIAdapter({ apiKey: process.env.OPENAI_API_KEY! }), vectorDB: new PineconeAdapter({ apiKey: process.env.PINECONE_API_KEY!, indexHost: process.env.PINECONE_INDEX_HOST!, }),}); // Your application code is IDENTICAL for both:await orka.knowledge.create({ name: 'docs', source: [...] });const result = await orka.ask({ knowledge: 'docs', question: '...' });💡 Pro Tip: Environment-Based Configuration
Use environment variables to automatically switch adapters based on your deployment environment:
const vectorDB = process.env.NODE_ENV === 'production' ? new PineconeAdapter({ apiKey: process.env.PINECONE_API_KEY!, indexHost: process.env.PINECONE_INDEX_HOST! }) : new MemoryVectorAdapter(); const orka = createOrka({ llm, vectorDB });