Ir al contenido

IA y agentes

Rebase incluye cuatro elementos distintos para asistentes de IA, y cada uno resuelve un problema diferente. Vale la pena saber a cuál de ellos estás recurriendo:

Qué es Quién lo consume
Servidor MCP Un servidor Model Context Protocol basado en stdio con 40 herramientas sobre tu esquema, datos, usuarios, almacenamiento, cron y servidor de desarrollo Un asistente, en tiempo de ejecución
Skills de agentes 20 archivos de skills en Markdown escritos en tu repositorio mediante rebase skills install Un asistente, como material de referencia
Archivos de instrucciones ai-instructions.md además de archivos de puntero por asistente, generados por rebase init Un asistente, como reglas siempre activas
Claves de API Credenciales de máquina con alcance limitado, por colección y por operación Cualquier elemento que llame a la API HTTP

Los tres primeros tratan de dotar al asistente de conocimiento y herramientas. El cuarto es el único que decide lo que realmente puede hacer.

La parte que importa: a qué puede acceder un agente

Sección titulada «La parte que importa: a qué puede acceder un agente»

Un agente con herramientas sobre tu base de datos es un llamador de API ordinario que simplemente decide su propia siguiente solicitud. 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 podría 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:

  1. La lista de permisos de la clave de API. Declarada por colección y por operación, donde delete se puede separar de write, que suele ser el permiso que deseas denegar a un agente al que, por lo demás, se le permite editar.
  2. Seguridad a nivel de fila (RLS). Las claves de API no eluden RLS. Una clave se conecta como el rol de Postgres rebase_user como cualquier otro llamador, por lo que tus políticas siguen decidiendo qué filas se devuelven.

Ambas deben permitir una solicitud. Ninguna sustituye a la otra, y la segunda es la razón por la cual una clave con permisos "*" aún puede devolver un conjunto de resultados vacío.

Un detalle que suele confundir: el ajuste 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 añade a un llamador a la lista de permisos, y denegarlo no detiene a ninguno.

La mecánica (creación de claves, el JSON de permisos, rotación, caducidad, límites de velocidad) se detalla en API REST → Claves de API. No pases por alto Reglas de seguridad (RLS); la segunda compuerta solo es tan buena como las políticas que hayas escrito.

Rebase cuenta con un tipo de propiedad vector nativo en Postgres y un método de consulta .vectorSearch() con distancias cosine, l2 e inner_product. Ya está documentado, en dos lugares en vez de uno:

Tres aspectos 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 ningún lugar de Rebase, por lo que generar los vectores es tu responsabilidad. pgvector es un requisito previo. La imagen de base de datos del scaffold ya la incluye, así que un proyecto creado con rebase init no necesita nada aquí; apuntando a una base de datos aprovisionada por otra persona, necesitas una imagen que lleve la extensión y un rol con permiso para ejecutar CREATE EXTENSION vector; una vez — Rebase no instala extensiones por ti. Y cada columna vectorial obtiene un índice HNSW para la distancia coseno, porque coseno es lo que mide vectorSearch salvo que pases distance: un índice sirve exactamente a un operador. Ajústalo, o desactívalo, en la propiedad: consulta El índice.

Tampoco es posible suscribirse a consultas vectoriales; .vectorSearch(...).listen() es rechazado con VECTOR_SEARCH_NOT_LIVE.

Para la búsqueda léxica (texto completo clasificado sobre los campos que especifiques, incluyendo contenido JSONB y arrays), consulta Búsqueda. Es un mecanismo diferente y ambos no interactúan entre sí.