
RAG avec Ollama et PostgreSQL (pgvector)
Giwi 3 min de lecture
Dans mon précédent article sur le RAG, j’utilisais ChromaDB comme vector store. Mais PostgreSQL avec l’extension pgvector fait aussi bien, sans ajouter une brique à votre stack existante.
Pourquoi pgvector ?
- Pas de service supplémentaire - votre base PostgreSQL suffit
- Indexation HNSW - performances comparables à Pinecone/Weaviate
- SQL standard - vos requêtes vectorielles s’intègrent aux requêtes métier
- Filtres hybrides - combinez recherche vectorielle et filtres WHERE classiques
Installation
CREATE EXTENSION vector; |
docker run -e POSTGRES_PASSWORD=pass -p 5432:5432 pgvector/pgvector:pg16 |
Création de la table
CREATE TABLE documents ( |
Index HNSW
CREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops); |
Le pipeline complet
graph LR
A[Document] --> B[Chunker]
B --> C[Ollama embeddings]
C --> D[pgvector]
D --> E[Recherche]
F[Question] --> G[Ollama embeddings]
G --> E
E --> H[Contexte + question]
H --> I[Ollama LLM]
I --> J[Réponse]
Le code Node.js
import pg from 'pg'; |
Inserer des documents
import fs from 'fs'; |
Recherche hybride (vecteur + filtre SQL)
async function searchByCategory(query, category) { |
Performances
| Volume | Index | Temps de requête |
|---|---|---|
| 10K vecteurs | HNSW | ~5 ms |
| 100K vecteurs | HNSW | ~15 ms |
| 1M vecteurs | HNSW | ~50 ms |
Pour un blog technique ou une doc interne, 10–50 ms c’est plus que suffisant.
Pourquoi j’ai abandonné ChromaDB
- pgvector tient dans PostgreSQL, ChromaDB est un service à part
- pgvector permet les backups PostgreSQL standards, ChromaDB a son propre format
- pgvector s’intègre aux ORM (Prisma, TypeORM), pas besoin de deux couches d’accès
Si vous avez déjà PostgreSQL, pgvector est un choix plus simple et plus maintenable qu’un vector store dédié.