Zum Inhalt springen

KI & Agenten

Rebase liefert vier separate Dinge für KI-Assistenten, und sie lösen unterschiedliche Probleme. Es lohnt sich zu wissen, wonach Sie greifen:

Was es ist Wer es nutzt
MCP-Server Ein Stdio-Model-Context-Protocol-Server mit 42 Tools für Ihr Schema, Ihre Daten, Benutzer, Speicher, Cron und Dev-Server Ein Assistent, zur Laufzeit
Agent Skills 21 Markdown-Skill-Dateien, die durch rebase skills install in Ihr Repo geschrieben werden Ein Assistent, als Referenzmaterial
Anweisungsdateien ai-instructions.md plus zeigerbasierte Dateien pro Assistent, geschrieben von rebase init Ein Assistent, als dauerhaft aktive Regeln
API-Keys Maschinen-Anmeldedaten, die Scopes halten, pro Collection und pro Operation Alles, was die HTTP-API aufruft

Bei den ersten dreien geht es darum, einem Assistenten Wissen und Werkzeuge an die Hand zu geben. Das vierte ist das einzige, das entscheidet, was er tatsächlich tun darf.

Der entscheidende Teil: Worauf ein Agent zugreifen darf

Abschnitt betitelt „Der entscheidende Teil: Worauf ein Agent zugreifen darf“

Ein Agent mit Werkzeugen für Ihre Datenbank ist ein gewöhnlicher API-Aufrufer, der zufällig seine eigene nächste Anfrage bestimmt. Rebase versucht nicht, ihn durch Anweisungen einzuschränken – ein Prompt ist kein Zugriffskontrollmechanismus, und ein Agent, der Ihre Zeilen liest, liest Text, den möglicherweise jemand anderes geschrieben hat. Die Einschränkung muss unterhalb des Agenten ansetzen: in den Anmeldedaten, die er mitführt.

Rebase versieht diese Anmeldedaten mit zwei unabhängigen Schranken:

  1. Die Scopes des Schlüssels. Deklariert pro Operation und, wenn Sie möchten, pro Collection: data:read:articles, data:write:articles. data:delete ist von data:write getrennt – was normalerweise die Operation ist, die Sie einem Agenten vorenthalten möchten, der ansonsten bearbeiten darf.
  2. Row-Level Security. API-Keys umgehen RLS nicht. Ein Schlüssel verbindet sich wie jeder andere Aufrufer als die Postgres-Rolle rebase_user, sodass Ihre Richtlinien weiterhin bestimmen, welche Zeilen zurückgegeben werden.

Beide müssen eine Anfrage erlauben. Keine ersetzt die andere, und die zweite ist der Grund, warum ein Schlüssel, der data:read auf jeder Collection hält, dennoch eine leere Ergebnismenge zurückgeben kann.

Ein Punkt, der oft übersehen wird: Das access: "public" einer Collection erweitert, welche Zeilen ein Aufrufer sehen darf, nicht wer aufrufen darf. Es ist eine Aussage über die Sichtbarkeit von Zeilen, nicht über die Authentifizierung. Die Gewährung gibt einem Schlüssel keinen Scope, und das Verweigern stoppt ihn nicht.

Die Funktionsweise – Erstellen von Schlüsseln, die Wahl der Scopes, Rotation, Ablauf, Rate Limits – wird unter API-Schlüssel behandelt. Überspringen Sie auf dem Weg dorthin nicht Security Rules (RLS); die zweite Schranke ist nur so gut wie die von Ihnen geschriebenen Richtlinien.

Rebase verfügt über einen erstklassigen vector-Eigenschaftstyp auf Postgres und eine .vectorSearch()-Abfragemethode mit cosine-, l2- und inner_product-Distanz. Dies ist bereits dokumentiert, und zwar an zwei Stellen:

Drei Dinge, die Sie wissen sollten, bevor Sie darum herum planen. Rebase speichert und durchsucht Embeddings; es berechnet sie nicht – es gibt in Rebase keinen Embedding-Provider, keine Modelleinstellung und keinen API-Key; die Erstellung der Vektoren ist also Ihre Aufgabe. pgvector ist eine Voraussetzung, und die Installation ist optional. database({ extensions: ["vector"] }) in config/resources.ts ermöglicht es rebase db push und der Schema-Sicherstellung beim Booten, CREATE EXTENSION IF NOT EXISTS vector für Sie auszuführen; ohne diese Angabe wird die Spalte angelegt und die Extension Ihnen überlassen. In beiden Fällen benötigt der Server ein Image, das die Bibliothek enthält, sowie eine Rolle, die berechtigt ist, sie zu installieren. Und jede Vektorspalte erhält einen HNSW-Index für die Kosinus-Distanz, da Kosinus das Maß ist, mit dem vectorSearch standardmäßig misst, sofern Sie nicht distance übergeben – ein Index bedient genau einen Operator. Sie können ihn optimieren oder deaktivieren: siehe The index.

Vektorabfragen können zudem nicht abonniert werden; .vectorSearch(...).listen() wird mit VECTOR_SEARCH_NOT_LIVE abgewiesen.

Für die lexikalische Suche – gerankter Volltext über die von Ihnen benannten Felder, einschließlich JSONB- und Array-Inhalten – siehe Search. Es handelt sich um einen anderen Mechanismus, und die beiden interagieren nicht miteinander.