Salta ai contenuti

AI e agenti

Rebase fornisce quattro elementi distinti per gli assistenti IA, e ciascuno risolve problemi diversi. Vale la pena sapere a quale ci si sta rivolgendo:

Cos’è Chi lo utilizza
Server MCP Un server stdio Model Context Protocol con 42 strumenti per schema, dati, utenti, storage, cron e dev server Un assistente, a runtime
Skill per agenti 21 file di skill in Markdown inseriti nella tua repo da rebase skills install Un assistente, come materiale di riferimento
File di istruzioni ai-instructions.md più file puntatore specifici per assistente, creati da rebase init Un assistente, come regole sempre attive
Chiavi API Credenziali macchina che possiedono scope, per collezione e per operazione Qualsiasi client che chiami l’API HTTP

I primi tre servono a fornire a un assistente conoscenza e strumenti. Il quarto è l’unico che decide cosa esso possa effettivamente fare.

La parte fondamentale: cosa può toccare un agente

Sezione intitolata “La parte fondamentale: cosa può toccare un agente”

Un agente dotato di strumenti sul tuo database è un normale client API che si dà il caso decida la propria richiesta successiva. Rebase non cerca di vincolarlo con le istruzioni: un prompt non è un meccanismo di controllo degli accessi, e un agente che legge le tue righe sta leggendo testo che qualcun altro potrebbe aver scritto. Il vincolo deve risiedere al di sotto dell’agente, nelle credenziali che possiede.

Rebase fornisce a tale credenziale due gate indipendenti:

  1. Gli scope della chiave. Dichiarati per operazione e, quando vuoi, per collezione: data:read:articles, data:write:articles. data:delete è separato da data:write, ed è solitamente quello che si vuole negare a un agente a cui è altrimenti consentito modificare.
  2. Row-Level Security (RLS). Le chiavi API non ignorano l’RLS. Una chiave si connette come ruolo Postgres rebase_user come qualsiasi altro chiamante, quindi i criteri stabiliti (policy) determinano comunque quali righe vengono restituite.

Entrambi devono autorizzare la richiesta. Nessuno dei due sostituisce l’altro, e il secondo è il motivo per cui una chiave che possiede data:read su ogni collezione può comunque restituire un set di risultati vuoto.

Un punto che spesso trae in inganno: l’impostazione access: "public" di una collezione estende quali righe un chiamante può vedere, non chi può effettuare chiamate. È una dichiarazione sulla visibilità delle righe, non sull’autenticazione. Concederla non dà uno scope a una chiave, e revocarla non ne blocca una.

Il funzionamento pratico — creazione delle chiavi, scelta degli scope, rotazione, scadenza, rate limit — è trattato in Chiavi API. Non tralasciare Regole di sicurezza (RLS); il secondo gate è efficace solo quanto le policy che hai scritto.

Rebase include un tipo di proprietà vector di prima classe su Postgres e un metodo di query .vectorSearch() con distanza cosine, l2 e inner_product. È già documentato, in due punti diversi:

Tre cose da sapere prima di progettarvi attorno una soluzione. Rebase memorizza ed esegue ricerche sugli embedding; non li calcola — non c’è alcun provider di embedding, impostazione di modello o chiave API all’interno di Rebase, quindi generare i vettori è compito tuo. pgvector è un prerequisito e la sua installazione è facoltativa. database({ extensions: ["vector"] }) in config/resources.ts consente a rebase db push e alla verifica dello schema all’avvio di eseguire CREATE EXTENSION IF NOT EXISTS vector per te; in caso contrario, creano la colonna lasciando l’installazione dell’estensione a tuo carico. In entrambi i casi il server necessita di un’immagine che includa la libreria e di un ruolo autorizzato a installarla. Inoltre, ogni colonna vettoriale riceve un indice HNSW per la distanza del coseno, poiché il coseno è ciò che vectorSearch utilizza come misura predefinita se non viene specificato distance — un indice serve esattamente un solo operatore. Modificalo, o disattivalo, sulla proprietà: consulta L’indice.

Non è inoltre possibile sottoscrivere query vettoriali; .vectorSearch(...).listen() viene rifiutato con VECTOR_SEARCH_NOT_LIVE.

Per la ricerca lessicale — ricerca full-text con ranking sui campi specificati, inclusi contenuti JSONB e array — consulta Ricerca. Si tratta di un meccanismo diverso e i due non interagiscono.