TechLead
Desarrollo de IA
8 de febrero de 202610 min de lectura

Cómo Construir una App RAG con LangChain y Supabase en 2026

Aprende a construir una aplicación de Generación Aumentada por Recuperación (RAG) lista para producción usando LangChain para orquestación y Supabase para almacenamiento vectorial.

Por TechLead
RAG
LangChain
Supabase
Base de Datos Vectorial
IA

La Generación Aumentada por Recuperación (RAG) es el patrón más práctico para construir aplicaciones de IA que necesitan acceso a datos privados o actualizados. En lugar de hacer fine-tuning a un modelo, recuperas contexto relevante en tiempo de consulta y se lo proporcionas al LLM. En esta guía, construiremos un pipeline RAG completo usando LangChain para orquestación y Supabase como nuestro almacén vectorial.

1. ¿Qué es RAG y Por Qué Importa?

Los Modelos de Lenguaje Grande se entrenan con datasets estáticos. No conocen tus documentos de empresa, actualizaciones de producto, ni nada después de su fecha de corte. RAG resuelve esto mediante:

  1. Indexación: Convertir tus documentos en embeddings vectoriales y almacenarlos en una base de datos.
  2. Recuperación: Cuando un usuario hace una pregunta, encontrar los documentos semánticamente más similares.
  3. Generación: Pasar el contexto recuperado al LLM junto con la pregunta para producir una respuesta precisa y fundamentada.

2. Visión General de la Arquitectura

Nuestro stack consiste en cuatro capas:

CapaHerramientaPropósito
OrquestaciónLangChainGestión de cadenas, carga de documentos, división de texto
EmbeddingsOpenAI text-embedding-3-smallConvertir texto a vectores de 1536 dimensiones
Almacén VectorialSupabase + pgvectorAlmacenar y consultar embeddings con SQL
LLMGPT-4oGenerar respuestas a partir del contexto recuperado

3. Configurando Supabase como Almacén Vectorial

Supabase soporta pgvector nativamente. Habilita la extensión y crea una tabla de documentos:

-- Habilitar la extensión vector
create extension if not exists vector;

-- Crear tabla de documentos
create table documents (
  id bigserial primary key,
  content text,
  metadata jsonb,
  embedding vector(1536)
);

4. Indexando Documentos con LangChain

Usa los cargadores de documentos y divisores de texto de LangChain para fragmentar y embebir tus datos:

import { RecursiveCharacterTextSplitter } from "langchain/text_splitter";
import { SupabaseVectorStore } from "@langchain/community/vectorstores/supabase";
import { OpenAIEmbeddings } from "@langchain/openai";
import { createClient } from "@supabase/supabase-js";

const splitter = new RecursiveCharacterTextSplitter({
  chunkSize: 1000,
  chunkOverlap: 200,
});

const docs = await splitter.createDocuments([rawText]);

await SupabaseVectorStore.fromDocuments(docs, new OpenAIEmbeddings(), {
  client: supabase,
  tableName: "documents",
});

5. Consultando con RAG

En tiempo de consulta, embebe la pregunta del usuario, recupera fragmentos relevantes y pásalos al LLM.

6. Consideraciones de Producción

  • El tamaño del fragmento importa: Muy pequeño pierde contexto, muy grande diluye la relevancia. 500-1000 tokens es un buen punto de partida.
  • Usa Row Level Security: Supabase RLS te permite limitar búsquedas vectoriales por usuario.
  • Cachea embeddings: No re-embebas documentos sin cambios en cada despliegue.
  • Monitorea con LangSmith: Rastrea cada ejecución de cadena para depurar la calidad de recuperación.

Artículos Relacionados