Pular para o conteúdo

IA & Agentes

O Rebase oferece quatro recursos distintos para assistentes de IA, e eles resolvem problemas diferentes. Vale a pena saber qual deles você está buscando:

O que é Quem consome
Servidor MCP Um servidor Model Context Protocol via stdio com 42 ferramentas para seu schema, dados, usuários, storage, cron e servidor de desenvolvimento Um assistente, em tempo de execução
Agent skills 21 arquivos de skill em Markdown gravados no seu repositório por rebase skills install Um assistente, como material de referência
Arquivos de instrução ai-instructions.md mais arquivos de apontamento por assistente, gravados por rebase init Um assistente, como regras ativas contínuas
Chaves de API Credenciais de máquina que têm escopos, por collection e por operação Qualquer chamada para a API HTTP

Os três primeiros servem para fornecer ao assistente conhecimento e ferramentas. O quarto é o único que decide o que ele pode de fato fazer.

A parte que importa: o que um agente pode manipular

Seção intitulada “A parte que importa: o que um agente pode manipular”

Um agente com ferramentas sobre o seu banco de dados é um chamador de API comum que por acaso decide sua própria próxima requisição. O Rebase não tenta limitá-lo com instruções — um prompt não é um mecanismo de controle de acesso, e um agente que lê suas linhas está lendo texto que qualquer outra pessoa pode ter escrito. A restrição precisa existir abaixo do agente, na credencial que ele carrega.

O Rebase aplica a essa credencial duas barreiras independentes:

  1. Os escopos da chave. Declarados por operação e, quando você quiser, por collection: data:read:articles, data:write:articles. data:delete é separado de data:write, e geralmente é ele que você deseja reter de um agente que, de outra forma, teria permissão para editar.
  2. Row-Level Security (RLS). As chaves de API não ignoram o RLS. Uma chave se conecta como a role Postgres rebase_user como qualquer outro chamador, de modo que suas políticas ainda decidem quais linhas retornam.

Ambas precisam permitir a requisição. Nenhuma substitui a outra, e a segunda é a razão pela qual uma chave com data:read em todas as collections ainda pode retornar um conjunto de resultados vazio.

Um detalhe que confunde muitos: o parâmetro access: "public" de uma collection expande quais linhas um chamador pode ver, não quem pode chamar. Trata-se de uma declaração sobre visibilidade de linhas, não sobre autenticação. Concedê-lo não dá um escopo a uma chave, e retê-lo não bloqueia uma chave.

O funcionamento prático — criação de chaves, escolha de escopos, rotação, expiração, rate limits — é abordado em Chaves de API. Não deixe de consultar Regras de Segurança (RLS); a segunda barreira só é tão eficaz quanto as políticas que você escreveu.

O Rebase possui um tipo de propriedade vector nativo no Postgres e um método de consulta .vectorSearch() com distâncias cosine, l2 e inner_product. Isso já está documentado em dois locais:

Três pontos a saber antes de planejar sua arquitetura: O Rebase armazena e busca embeddings; ele não os calcula — não há provedor de embeddings, configuração de modelo ou chave de API dentro do Rebase, portanto a geração dos vetores é sua responsabilidade. O pgvector é um pré-requisito, e a instalação é opcional (opt-in). database({ extensions: ["vector"] }) em config/resources.ts permite que o rebase db push e a validação de schema na inicialização executem CREATE EXTENSION IF NOT EXISTS vector para você; sem isso, eles criam a coluna e deixam a extensão sob sua responsabilidade. De qualquer forma, o servidor precisa de uma imagem contendo a biblioteca e uma role com permissão para instalá-la. E toda coluna vetorial recebe um índice HNSW para distância de cosseno, pois cosseno é o que o vectorSearch utiliza a menos que você informe distance — um índice atende a exatamente um operador. Ajuste-o, ou desative-o, na propriedade: veja O índice.

Consultas vetoriais também não suportam subscrições em tempo real; .vectorSearch(...).listen() é recusado com VECTOR_SEARCH_NOT_LIVE.

Para busca lexical — busca full-text ranqueada nos campos informados, incluindo JSONB e conteúdo de arrays — consulte Busca. Trata-se de um mecanismo diferente e os dois não interagem.