Governance · konstruktionsbedingt nur lesend
Policy ist Code.
Kein Prompt.
SQAI behandelt das Modell als das, was es ist: einen nicht vertrauenswürdigen Client. Allow-Listen sind im Code fixiert, wenn das Tool konstruiert wird, werden in-process vor jeder Ausführung geprüft und sind im Protokoll des Modells nicht vorhanden. Es gibt nichts, woraus sich das System herausreden ließe.
IIDie Einschränkung im Detail
Drei Schichten. Jede kann nur entfernen.
Jede Antwort durchläuft dieselbe Eingrenzung. Ein hash-gepinnter Vertrag definiert, was existiert. Ihre Policy schränkt es auf das Erlaubte ein. Eine typisierte Anfrage muss in beide passen.
- 01
Der Vertrag
4.778 Capabilities in der gepinnten Runtime; 4.574 für Agenten exponiert, alle nur lesend. Die übrigen 204 sind vollständig ausgeschlossen – für ein Modell existieren sie nicht.
- 02
Ihre Policy
Drei Allow-Listen – allowedSources, allowedFields je Quelle, allowedFunctions – zum Zeitpunkt von createSQAI() fixiert. Functions sind standardmäßig „all-readonly".
- 03
Eine Anfrage
Ein typisierter Plan, gegen den Vertrag validiert und anschließend in-process gegen die Policy geprüft – vor der Ausführung, nie danach.
allowedSourcesordersallowedFieldsregionrevenueunit_priceallowedFunctionsstats.medianfinance.npvQuerySpec v1 · median(revenue) by region · policy ✓
contract_hash sha256:79f1c5a6c7164e7e9e1750e70a5c03292fa87eb52d8148a740c06695924be9a1
Nur einschränken.
Eine Policy kann die Oberfläche verkleinern; vergrößern kann sie nichts. Wird eine Capability benannt, die der Vertrag nicht exponiert, wirft createSQAI() beim Konstruieren unsupported_operation – die App schlägt fehl, bevor ein Agent sich je verbindet.
Und der Tool-Input des Modells enthält kein allowed*-Feld. Die Policy ist nicht im Protokoll – es gibt also nichts, das ein Prompt oder eine Injection erweitern könnte.
IIIDie Policy im Code
Einmal geschrieben. Jedes Mal geprüft.
Die meisten Governance-Werkzeuge liegen neben dem Datenpfad und beobachten ihn. SQAIs Policy liegt im Pfad selbst: drei Allow-Listen im Konstruktor, in-process vor jeder Ausführung durchgesetzt.
const sqai = createSQAI({
sources: { orders },
// policy — fixed here, invisible to the model
allowedSources: ['orders'],
allowedFields: {
orders: ['region', 'revenue', 'unit_price'],
},
// functions default: 'all-readonly'
allowedFunctions: [
'stats.median', 'finance.npv',
],
});- allowedSources
- Die registrierten Quellen, die ein Plan benennen darf. Alles andere gibt policy_denied_source zurück.
- allowedFields
- Spalten, je Quelle. Ein Plan, der eine andere Spalte berührt, gibt policy_denied_field zurück.
- allowedFunctions
- Die nur-lesenden Funktionen, die ein Plan aufrufen darf – Standard „all-readonly". Alles außerhalb gibt policy_denied_function zurück.
- tool input
- Enthält kein allowed*-Feld. Das Modell sieht die Policy nie und kann daher keine erweiterte übermitteln.
Das Ablehnungsprotokoll
Ablehnungen sind Daten, keine Exceptions. Jede trägt einen stabilen Code, den ein Agent lesen kann – und keine ist wiederholbar, sodass eine Schleife die Policy nicht aushöhlen kann.
bei der Konstruktion
unsupported_operationDie Policy benennt eine Capability, die der Vertrag nicht exponiert. Die Konstruktion wirft; die App schlägt fehl, bevor ein Agent sich verbindet.
zur Anfragezeit
policy_denied_sourceDer Plan benennt eine Quelle außerhalb von allowedSources.
policy_denied_fieldDer Plan berührt eine Spalte außerhalb der allowedFields dieser Quelle.
policy_denied_functionDer Plan ruft eine Funktion außerhalb von allowedFunctions auf.
source: "sqai" — Jede Richtlinienablehnung kommt als strukturiertes, nicht wiederholbares Ergebnis an. Die Tools werfen nie.
IVVerwahrung
Ergebnisse werden verwahrt, nicht gespeichert.
Ein vollständiger Ergebnissatz gelangt nie in den Kontext des Modells. Er wird in einem verwalteten Speicher abgelegt und per ID referenziert; das Modell erhält eine deklarierte Stichprobe.
Der Ergebnisspeicher
Verwalteter Speicher · TTL 15 Min.
- result_id
- 16 zufällige Bytes, base64url. Nicht erratbar, nie sequenziell.
- authorization
- Mandantengebunden. Ein falscher Mandant erhält result_not_found — der Speicher bestätigt keine Existenz.
- ttl
- 15 Minuten. Danach ist der Eintrag gelöscht.
- capacity
- Maximal 256 Ergebnisse — 64 MB gesamt, 16 MB pro Mandant.
Der Speicher hält das Ergebnis. Das Modell liest eine Stichprobe und weist darauf hin.
Modellkontext-Obergrenzen
defaultLimit100Zeilenlimit, das gilt, wenn ein Plan keines festlegtmaxExecutionRows1.000absolute Obergrenze für Zeilen je AusführungmaxRowsToModel25maximale Zeilenanzahl, die ein Modellkontext je erhältmaxCellsToModel250maximale Zellenanzahl, die ein Modellkontext je erhältmaxBytesToModel32.000maximale Datenmenge in Bytes, die ein Modell je erhältKürzungen werden im Ergebnis stets deklariert. Unvollständige Zeilen werden nie angezeigt — eine Zeile kommt vollständig oder gar nicht.
Prüfperspektive
17 %der Organisationen können die vollständige Tool-Aufrufsequenz eines Agenten im Nachhinein rekonstruieren
GDPR Artikel 30 und SOC 2 CC7.2 erwarten genau diese Aufzeichnungen.
Jede SQAI-Antwort trägt ihre eigene Rekonstruktion bereits in sich:
plan_hash · invocation_hash · computation_hash · contract_hash
Wiedergabe ist eine Abfrage, keine Untersuchung. Replay erklärt →
VIFragen
Governance, direkt gefragt
Kann das Modell seinen eigenen Zugriff erweitern?
Nein. Die Richtlinie wird zum Zeitpunkt von createSQAI() festgelegt und vor der Ausführung prozessintern geprüft. Die Tool-Eingabe des Modells enthält kein allowed*-Feld — im Protokoll gibt es nichts zu erweitern. Eine Anfrage außerhalb der Richtlinie liefert ein strukturiertes policy_denied-Ergebnis.
Ist „nur lesend" ein Flag, das umgangen werden könnte?
Es ist kein Flag. Der exponierte Vertrag umfasst 4.574 schreibgeschützte Fähigkeiten; ein Schreibpfad fehlt konstruktionsbedingt — er ist nicht deaktiviert. Prompt-Injection kann ändern, was ein Modell anfragt — Fähigkeiten eines fixierten Vertrags kann sie nicht hinzufügen.
Welche Aufzeichnungen existieren für eine Prüfung nach GDPR Artikel 30 oder SOC 2 CC7.2?
Jedes Ergebnis enthält plan_hash, invocation_hash, computation_hash und contract_hash. Die exakte Berechnung kann lange im Nachhinein wiedergegeben und gegen diese Hashes verifiziert werden.
Wo liegen Ergebnisdaten nach einer Abfrage?
In einem mandantenautorisierten Ergebnisspeicher: IDs bestehen aus 16 zufälligen Bytes, Einträge verfallen nach 15 Minuten, und der Speicher ist auf 64 MB gesamt und 16 MB pro Mandant begrenzt. Der Modellkontext erhält höchstens 25 Zeilen, 250 Zellen und 32.000 Bytes — Kürzungen stets deklariert.
VIIWeiter
Die Antwort regeln.
Bringen Sie ein Schema und eine Compliance-Frage mit. Wir zeigen Ihnen die Richtlinie, die sie beantwortet.