← Tutti gli articoli

pgvector e RAG: il primo progetto cliente con AI sui dati interni

06 May 20242 min di lettura

Document search semantica su 8.000 documenti aziendali. Postgres + pgvector + embeddings: cosa abbiamo imparato.

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

  1. Document → chunking a 800 token con overlap di 100.
  2. Per ogni chunk → embedding via OpenAI batch API.
  3. Salvataggio in Postgres con metadata (source, page, section).
  4. Indice ivfflat con lists = 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.