Tengo un flujo de trabajo para RAG, pero no está funcionando. Después de cargar texto en la base de datos de Supabase (el flujo de trabajo finaliza correctamente), le hago una pregunta al LLM sobre algo cargado en Supabase. Pero la IA dio una respuesta incorrecta (me dio algo como: No sé de qué estás hablando).
¿Alguien sabe cómo solucionar ese problema?
Mi flujo de trabajo aquí
@Quent clásico fallo de recuperación RAG: la carga funcionó pero la búsqueda no devuelve nada, así que el agente no tiene contexto y dice «No sé». Casi siempre es uno de dos:
-
Desajuste del modelo de embedding (la causa #1). El modelo con el que haces embedding al insertar debe ser exactamente el mismo que en el lado de la consulta; un modelo diferente o dimensión coloca los vectores en un espacio diferente, así que la búsqueda de similitud devuelve cero resultados. Verifica que ambos nodos de Embeddings usen el modelo idéntico.
-
El Vector Store no está conectado al agente como recuperador, o el Query Name no está configurado para match_documents.
Si ambos ya están alineados, pega el workflow y lo identificaré, pero 9 de cada 10 veces es el modelo de embedding diferiendo entre inserción y consulta.
Creo que configuré LLM correctamente. Y creo que el problema es exactamente con Supabase porque cuando miraba en la base de datos de Supabase no veía los embeddings subidos
@Quent eso lo reduce: éxito pero sin filas significa que están aterrizando en algún lugar donde no las estás buscando. Lo importante: el nodo Supabase Vector Store ignora el campo table-name y siempre escribe en una tabla literalmente nombrada documents (quirk conocido). Así que revisa la tabla documents específicamente, si creaste o estás verificando una tabla con un nombre diferente, tus filas están en documents.
También confirma que la tabla documents tiene la estructura quickstart (id, content, metadata, embedding vector(N)) con la dimensión coincidiendo con tu modelo de embedding, si esa columna no existe nada persiste.
Si en cambio ves un error de RLS/policy, cambia la credencial a tu clave service_role (omite RLS). Pero revisa la tabla documents primero, es generalmente donde están.
No, no hay tabla documents. Verifiqué los buckets en storage pero no la encontré ahí, también revisé las tablas en la base de datos pero no la encontré
Mejor que cuando subí texto a Supabase nunca vi la interacción del nodo de Supabase con el modelo incrustado
@Quent ese es el problema. El nodo Supabase Vector Store necesita un sub-nodo Embeddings conectado a él, el pequeño puerto “Embeddings” debajo del nodo. Si no hay nada conectado ahí, el nodo no tiene ningún modelo para convertir tu texto en vectores, por lo que la inserción no almacena nada utilizable, lo cual es exactamente por qué nunca ves que interactúe con un modelo de embeddings.
Conecta un nodo Embeddings (Embeddings OpenAI, o el proveedor que sea) a ese puerto en el nodo Vector Store, luego vuelve a ejecutar, verás que filas con embeddings se crean en la tabla documents. Una consideración para más adelante: usa exactamente el mismo modelo de embeddings en el lado de la consulta también, si no la recuperación no coincidirá.
Si no ves la tabla documents en Supabase en absoluto, significa que la tabla nunca fue creada - n8n no la creará automáticamente para ti. Ve a Supabase > SQL Editor y ejecuta esto:
create extension if not exists vector;
create table documents (
id bigserial primary key,
content text,
metadata jsonb,
embedding vector(1536)
);
create index on documents using ivfflat (embedding vector_cosine_ops);
Nota: cambia 1536 para que coincida con la dimensión de tu modelo de embedding (OpenAI text-embedding-3-small = 1536, text-embedding-3-large = 3072). Una vez que la tabla exista, vuelve a ejecutar tu flujo de trabajo de carga y deberías ver filas apareciendo en la tabla documents en Table Editor.
Ahora veo la tabla documents, pero no veo las filas de esa tabla. Cuando subí texto en mi tabla workflow no llenó mi tabla.
Hey @Quent, como la tabla existe pero aún tiene cero filas, es probable que la inserción en sí esté fallando silenciosamente.
Comprobaciones rápidas:
Haz clic en el nodo Vector Store después de ejecutar y verifica su salida real; una marca de verificación verde en el flujo de trabajo no siempre significa que el nodo escribió datos correctamente.
Confirma que esté configurado en modo “Insert” (Insertar), no “Retrieve” (Recuperar).
Intenta usar la clave service_role en lugar de anon; RLS puede bloquear inserciones silenciosamente sin mostrar un error visible.
Si esas opciones no muestran nada, una captura de pantalla de la salida real de ejecución del nodo (no solo el lienzo) ayudaría a identificar el problema rápidamente.
Estoy de acuerdo con @achamm, el desajuste de embeddings es la causa número 1 por mucho.
Dos cosas extras que vale la pena revisar si sus arreglos no lo solucionan:
- Dimensión de la columna de vector en Supabase: cuando creaste la tabla, la columna
embeddingtiene un tamaño fijo (por ejemplovector(1536)). Si tu modelo de embeddings genera un tamaño diferente, los inserts pueden fallar silenciosamente o la búsqueda no devuelve nada. Ejecuta\d documentsen el editor SQL de Supabase para confirmar que la dimensión coincida con tu modelo. - Chunking + top_k: si tus chunks son demasiado grandes (páginas completas) o tu
top_kes demasiado bajo (como 1), el retriever podría extraer un chunk que en realidad no contiene la respuesta. Intenta con chunks de ~500 tokens y top_k = 4-5 para empezar.
¡Comparte el workflow si sigue fallando después de eso!
Ya resolví ese problema. Gracias a todos
