When to Use
User wants to convert text/images to vectors, build semantic search, or integrate embeddings into applications.
Quick Reference
| Topic |
File |
| Provider comparison & selection |
providers.md |
| Chunking strategies & code |
chunking.md |
| Vector database patterns |
storage.md |
| Search & retrieval tuning |
search.md |
Core Capabilities
- Generate embeddings — Call provider APIs (OpenAI, Cohere, Voyage, local models)
- Chunk content — Split documents with overlap, semantic boundaries, token limits
- Store vectors — Insert into Pinecone, Weaviate, Qdrant, pgvector, Chroma
- Similarity search — Query with top-k, filters, hybrid search
- Batch processing — Handle large datasets with rate limiting and retries
- Model comparison — Evaluate embedding quality for specific use cases
Decision Checklist
Before recommending approach, ask:
Critical Rules
- Same model everywhere — Query embeddings MUST use identical model as document embeddings
- Normalize before storage — Most similarity metrics assume unit vectors
- Chunk with overlap — 10-20% overlap prevents context loss at boundaries
- Batch API calls — Never embed one item at a time in production
- Cache embeddings — Regenerating is expensive; store with source hash
- Monitor dimensions — Higher isn't always better; 768-1536 is usually optimal
Provider Quick Selection
| Need |
Provider |
Why |
| Best quality, any cost |
OpenAI text-embedding-3-large |
Top benchmarks |
| Cost-sensitive |
OpenAI text-embedding-3-small |
5x cheaper, 80% quality |
| Multilingual |
Cohere embed-multilingual-v3 |
100+ languages |
| Code/technical |
Voyage voyage-code-2 |
Optimized for code |
| Privacy/offline |
Local (e5, bge, nomic) |
No data leaves machine |
| Images |
OpenAI CLIP, Cohere multimodal |
Cross-modal search |
Common Patterns
# Batch embedding with retry
def embed_batch(texts, model="text-embedding-3-small"):
results = []
for chunk in batched(texts, 100): # API limit
response = client.embeddings.create(input=chunk, model=model)
results.extend([e.embedding for e in response.data])
return results
# Similarity search with filter
results = index.query(
vector=query_embedding,
top_k=10,
filter={"category": "technical"},
include_metadata=True
)
1---2name: embeddings3description: Generate, store, and search vector embeddings with provider selection, chunking strategies, and similarity search optimization.4---5
6## When to Use
7
8User wants to convert text/images to vectors, build semantic search, or integrate embeddings into applications.
9
10## Quick Reference
11
12| Topic | File |
13|-------|------|
14| Provider comparison & selection | `providers.md` |
15| Chunking strategies & code | `chunking.md` |
16| Vector database patterns | `storage.md` |
17| Search & retrieval tuning | `search.md` |
18
19## Core Capabilities
20
211. **Generate embeddings** — Call provider APIs (OpenAI, Cohere, Voyage, local models)
222. **Chunk content** — Split documents with overlap, semantic boundaries, token limits
233. **Store vectors** — Insert into Pinecone, Weaviate, Qdrant, pgvector, Chroma
244. **Similarity search** — Query with top-k, filters, hybrid search
255. **Batch processing** — Handle large datasets with rate limiting and retries
266. **Model comparison** — Evaluate embedding quality for specific use cases
27
28## Decision Checklist
29
30Before recommending approach, ask:
31- [ ] What content type? (text, code, images, multimodal)
32- [ ] Volume and update frequency?
33- [ ] Latency requirements? (real-time vs batch)
34- [ ] Budget constraints? (API costs vs self-hosted)
35- [ ] Existing infrastructure? (cloud provider, database)
36
37## Critical Rules
38
39- **Same model everywhere** — Query embeddings MUST use identical model as document embeddings
40- **Normalize before storage** — Most similarity metrics assume unit vectors
41- **Chunk with overlap** — 10-20% overlap prevents context loss at boundaries
42- **Batch API calls** — Never embed one item at a time in production
43- **Cache embeddings** — Regenerating is expensive; store with source hash
44- **Monitor dimensions** — Higher isn't always better; 768-1536 is usually optimal
45
46## Provider Quick Selection
47
48| Need | Provider | Why |
49|------|----------|-----|
50| Best quality, any cost | OpenAI `text-embedding-3-large` | Top benchmarks |
51| Cost-sensitive | OpenAI `text-embedding-3-small` | 5x cheaper, 80% quality |
52| Multilingual | Cohere `embed-multilingual-v3` | 100+ languages |
53| Code/technical | Voyage `voyage-code-2` | Optimized for code |
54| Privacy/offline | Local (e5, bge, nomic) | No data leaves machine |
55| Images | OpenAI CLIP, Cohere multimodal | Cross-modal search |
56
57## Common Patterns
58
59```python
60# Batch embedding with retry
61def embed_batch(texts, model="text-embedding-3-small"):
62 results = []
63 for chunk in batched(texts, 100): # API limit
64 response = client.embeddings.create(input=chunk, model=model)
65 results.extend([e.embedding for e in response.data])
66 return results
67
68# Similarity search with filter
69results = index.query(
70 vector=query_embedding,
71 top_k=10,
72 filter={"category": "technical"},
73 include_metadata=True
74)
75```