PostgreSQL AI Edition (pg_ai)
IA adentro de PostgreSQL: embeddings, búsqueda semántica, RAG y agentes invocables desde SQL, con inferencia local y sin API key. Tus embeddings viven al lado de tus datos (ACID, JOINs, Row-Level Security); no hay segunda base vectorial que sincronizar. Es una extensión pura sobre PostgreSQL 16/17, no un fork.
Open source (PostgreSQL License) → github.com/devjamez/postgresql-ai-edition
Qué es
Una capa fina (`pg_ai`) que orquesta un modelo local vía PL/Python, más `pg_ai_core`, un núcleo nativo en C que integra con el motor: instala un `planner_hook` y un Custom Scan (`pg_ai_fusion`) para fusión relacional + vector a nivel de planner. Todo corre adentro de la base.
Desde SQL
- `ai.embed(text)` / `ai.embed_batch(text[])` — embeddings (Ollama `nomic-embed-text`, 768d).
- `ai.rag(pregunta, tabla, col_texto, col_emb)` — respuesta aumentada por recuperación, anclada en tus tablas.
- `ai.filtered_search` / `ai.filter_ann` — ANN filtrado (filtros de igualdad seguros + orden vectorial + top-k correcto bajo filtros selectivos).
- `ai.search_mmr` (diversidad) y `ai.rerank` (reranker LLM listwise).
- `ai.create_agent` / `ai.call_agent` — agentes con memoria; `ai.call_agent_tools` (loop ReAct) con `ai.register_tool` / `ai.run_tool`.
- `ai.register_workflow` / `ai.run_workflow` — pipelines multi-paso (tool / complete / rag) encadenados.
- `ai.submit_task` + `ai.schedule` — ejecuciones async y recurrentes (cron-like) drenadas por un background worker en `pg_ai_core`.
Por qué adentro de la base
- Una sola fuente de verdad (ACID): el embedding es una columna `vector` al lado de su fila, actualizada en la misma transacción. Sin dual-write ni jobs de re-sync.
- La búsqueda semántica compone con SQL: JOIN + filtro relacional + orden vectorial + transacción en una sola query.
- Seguridad gratis: roles, `GRANT` y Row-Level Security aplican a `ai.rag` / `ai.filtered_search` — aislamiento multi-tenant sin lógica de autorización duplicada.
- Motor AI-aware: `pg_ai_core` (C) hookea el planner y agrega un custom scan; integración a nivel de motor, no un wrapper.
- Runtime de agentes en la base: agentes, memoria, tools, workflows y cola transaccionales, respaldados por `pg_dump`/PITR y replicación. Menos piezas móviles.
Seguridad
- Sin API key por defecto (Ollama local); cualquier key opcional (Anthropic) vive solo en el entorno del server, nunca en SQL ni en el repo.
- Filtros injection-safe (`jsonb` de igualdades, escapados con `%I/%L`); el predicado SQL crudo queda aislado en `ai.filter_ann_raw` (solo input confiable).
- Deny-by-default: `EXECUTE` sobre las funciones de red/crudas revocado de `PUBLIC`; se otorga a roles de confianza deliberadamente.
Cómo se corre
`docker compose up -d --build`; las extensiones se autoinstalan (`CREATE EXTENSION pg_ai CASCADE` + `pg_ai_core`). Modelos locales vía Ollama (`nomic-embed-text` + `llama3.1:8b`); imagen prearmada en GHCR. No requiere GPU ni API key.
Stack
PostgreSQL 16/17 · pgvector (HNSW) · PL/Python · C (PGXS, planner_hook + custom scan) · Ollama · Docker.