Ir al contenido

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:

  1. Los alcances de la clave. Declarados por operación y, si quieres, por colección: data:read:articles, data:write:articles. data:delete está separado de data:write, y suele ser el que deseas retener para 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 al 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.

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:

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í.