Tra fine 2023 e inizio 2024 abbiamo costruito il primo sistema di document search semantica per un cliente nello studio professionale: 8.000 documenti (contratti, normative, circolari) cercabili in linguaggio naturale.
Stack scelto
- Postgres + pgvector per lo storage degli embedding (no Pinecone, no Weaviate).
- OpenAI text-embedding-3-small per gli embedding (1536 dimensioni).
- Anthropic Claude per la sintesi delle risposte (top-5 chunk → answer).
- Next.js per UI e Server Actions di ingestion.
Pipeline di ingestion
- Document → chunking a 800 token con overlap di 100.
- Per ogni chunk → embedding via OpenAI batch API.
- Salvataggio in Postgres con metadata (source, page, section).
- Indice
ivfflatconlists = sqrt(N).
Costi reali
- Ingestion una tantum: ~12 USD per 8.000 documenti (60k chunk).
- Storage: 110 MB per gli embedding (Postgres locale, costo invisibile).
- Query/mese: ~22 USD per 6.000 query (embedding query + Claude completion).
Lezioni
Il chunking è il 70% della qualità. Abbiamo iterato 4 volte sul chunking prima di trovare la combinazione giusta. Boundary semantici (paragrafi, sezioni numerate) battono il chunking a token-count fisso.
Re-rank con un modello "small" alla fine ha alzato la precisione del 18%. Costo: 1 ms in più per query.
pgvector basta per dataset sotto i 5M di vettori. Sopra, valutare Qdrant o Pinecone. Per il caso di questo cliente, Postgres rimane casa anche fra 3 anni.