IA y agentes
Rebase incluye cuatro cosas independientes para asistentes de IA, y resuelven diferentes problemas. Vale la pena saber cuál estás buscando:
| Qué es | Quién lo consume | |
|---|---|---|
| Servidor MCP | Un servidor Model Context Protocol stdio con 42 herramientas sobre tu esquema, datos, usuarios, almacenamiento, cron y servidor de desarrollo | Un asistente, en tiempo de ejecución |
| Habilidades de agente | 21 archivos de habilidades en Markdown escritos en tu repositorio mediante rebase skills install |
Un asistente, como material de referencia |
| Archivos de instrucciones | ai-instructions.md más archivos de puntero por asistente, escritos mediante rebase init |
Un asistente, como reglas siempre activas |
| Claves de API | Credenciales de máquina que tienen alcances, por colección y por operación | Cualquier cosa que llame a la API HTTP |
Las tres primeras se centran en dar a un asistente conocimiento y herramientas. La cuarta es la única que decide lo que realmente puede hacer.
La parte importante: qué puede tocar un agente
Sección titulada «La parte importante: qué puede tocar un agente»Un agente con herramientas sobre tu base de datos es un llamador de API ordinario que casualmente decide su propia siguiente petición. Rebase no intenta restringirlo mediante instrucciones: un prompt no es un mecanismo de control de acceso, y un agente que lee tus filas está leyendo texto que otra persona pudo haber escrito. La restricción debe residir por debajo del agente, en la credencial que porta.
Rebase le otorga a esa credencial dos compuertas independientes:
- Los alcances de la clave. Declarados por operación y, si quieres, por
colección:
data:read:articles,data:write:articles.data:deleteestá separado dedata:write, y suele ser el que deseas retener para un agente al que, por lo demás, se le permite editar. - Seguridad a nivel de fila (RLS). Las claves de API no eluden RLS. Una clave se
conecta como el rol de Postgres
rebase_useral igual que cualquier otro llamador, por lo que tus políticas siguen decidiendo qué filas se devuelven.
Ambas deben permitir una petición. Ninguna es sustituto de la otra, y la segunda
es la razón por la cual una clave que tiene data:read en todas las colecciones aún
puede devolver un conjunto de resultados vacío.
Un punto que suele confundir: el access: "public" de una colección amplía qué
filas puede ver un llamador, no quién puede llamar. Es una declaración sobre
la visibilidad de las filas, no sobre la autenticación. Concederlo no le da un alcance a
una clave, y revocarlo no detiene a ninguna.
La mecánica (crear claves, elegir alcances, rotación, caducidad, límites de frecuencia) se trata en Claves de API. No pases por alto las Reglas de seguridad (RLS); la segunda compuerta solo es tan buena como las políticas que hayas escrito.
Búsqueda vectorial
Sección titulada «Búsqueda vectorial»Rebase cuenta con un tipo de propiedad vector nativo en Postgres y un
método de consulta .vectorSearch() con distancia cosine, l2 e inner_product.
Ya está documentado, en dos lugares en vez de uno:
- Consulta de datos → Búsqueda vectorial — el método
del SDK, el campo
_distanceque añade a cada fila y las consideraciones - API REST → Búsqueda vectorial — los
parámetros de consulta
vector_search,vector,vector_distanceyvector_threshold
Tres cosas que debes saber antes de diseñar en torno a esto. Rebase almacena y busca
embeddings; no los calcula: no hay ningún proveedor de embeddings, configuración
de modelo ni clave de API en ninguna parte de Rebase, por lo que generar los vectores es
tu tarea. pgvector es un prerrequisito, y su instalación es opcional.
database({ extensions: ["vector"] }) en config/resources.ts permite que rebase db push y la verificación del esquema al inicio ejecuten CREATE EXTENSION IF NOT EXISTS vector
por ti; sin esto, crearán la columna y dejarán la extensión a tu cargo. De
cualquier modo, el servidor necesita una imagen que contenga la biblioteca y un rol con
permisos para instalarla. Y cada columna vectorial obtiene un índice HNSW para la
distancia coseno, porque el coseno es lo que mide vectorSearch a menos
que pases distance; un índice sirve exactamente a un operador. Ajústalo o
desactívalo en la propiedad: consulta El índice.
Las consultas vectoriales tampoco admiten suscripciones; .vectorSearch(...).listen()
se rechaza con VECTOR_SEARCH_NOT_LIVE.
Para la búsqueda léxica (búsqueda de texto completo clasificada sobre los campos que especifiques, incluidos contenidos JSONB y arrays), consulta Búsqueda. Es un mecanismo diferente y ambos no interactúan entre sí.
Siguientes pasos
Sección titulada «Siguientes pasos»- Servidor MCP — conecta Claude Code, Cursor o cualquier cliente MCP
- Habilidades de agente —
rebase skills instally las 21 habilidades - Archivos de instrucciones de IA — el patrón de reglas estructuradas