Für das Vercel AI SDK

Kontrollierte Datenwerkzeuge für das Vercel AI SDK.

sqai.tools() fügt generateText genau drei schreibgeschützte Tools hinzu. Das Modell entdeckt Quellen, übermittelt einen einzigen typisierten Plan und gibt Zahlen zurück, die von einer deterministischen Engine berechnet wurden — mit Hashes, die jede Antwort reproduzierbar machen.

Kein API-Key zum Starten erforderlichIm AI SDK Tools Registry gelistetai ^7.0.0 · zod ^4.0.0 · Node ≥ 20

IIInstallation

Eine Abhängigkeitszeile.

Serverseitig, Node 20 oder neuer — in Next.js als Route-Handler mit runtime = \"nodejs\" ausführen. Peers sind ai ^7.0.0 und zod ^4.0.0, die Versionen, gegen die die Pläne typisiert sind. Kein Account, kein Key, keine Konfigurationsdatei.

IIISchnellstart

Erste kontrollierte Antwort.

import { generateText, isStepCount } from 'ai';
import { createSQAI } from '@thyn-ai/sqai-ai-sdk';

const sqai = createSQAI({
  sources: [{ name: 'orders', path: './orders.csv' }],
});

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4.5',
  tools: sqai.tools(),
  stopWhen: isStepCount(12),
  prompt: 'Total revenue in the east region?',
});

createSQAI() verbindet sich lazy — nichts wird bis zum ersten Tool-Aufruf gelesen. sqai.tools() gibt ein typisiertes SqaiToolSet zurück, kein Cast erforderlich. isStepCount(12) lässt dem Modell Raum zum Entdecken, Planen und Ausführen.

Quellen hinzufügen, kein Verbindungscode.

CSV, JSON, In-Memory-Records und SQLite laufen im Prozess — nichts verlässt Ihren Server. Postgres, Snowflake, BigQuery und weitere werden über die Engine angebunden. Jede Quelle landet in derselben typisierten Form, sodass die Tools nachgelagert nicht zwischen CSV und Snowflake unterscheiden können. Alle Quellen, spezifiziert

const sqai = createSQAI({
  sources: [
    { name: 'orders', path: './orders.csv' },
    { name: 'sessions', provider: 'sqlite',
      path: './app.db', table: 'sessions' },
    { name: 'quotes', records: quotes },
  ],
});

Jede Option schränkt ein.

Kürzungen werden stets deklariert; unvollständige Zeilen werden nie angezeigt. Die Tool-Eingabe, die das Modell ausfüllt, enthält kein allowed*-Feld — die Richtlinie wird zum Zeitpunkt von createSQAI() festgelegt und prozessintern vor der Ausführung geprüft. Ein Modell kann nicht erweitern, was ihm übergeben wurde. Das vollständige Governance-Modell

const sqai = createSQAI({
  sources,
  allowedSources: ['orders'],
  allowedFields: { orders: ['region', 'revenue'] },
  allowedFunctions: 'all-readonly',
  defaultLimit: 100,
  maxRowsToModel: 25,
});
OptionStandardWirkung
sourceserforderlich

Die einzigen Daten, die die Tools sehen können. Einmalig registriert — Quellen sind unveränderlich.

allowedSourcesalle registrierten

Schränkt ein, welche Quellen ein Plan berühren darf.

allowedFieldsalle Felder

Quellenspezifische Spalten-Allow-List. Alles andere ist unsichtbar.

allowedFunctions\"all-readonly\"

Capability-Allow-List — nur einschränkend. Das Benennen von etwas Weiterem wirft unsupported_operation.

defaultLimit100

Zurückgegebene Zeilen, wenn ein Plan kein eigenes Limit setzt.

maxExecutionRows1.000

Hartes Limit für Zeilen, die eine einzelne Ausführung liest.

maxRowsToModel25

Zeilen, die dem Modell jemals angezeigt werden.

maxCellsToModel250

Zellen, die das Modell jemals zu sehen bekommt.

maxBytesToModel32.000

Bytes des Ergebnisses, die das Modell jemals zu sehen bekommt.

IVDie Werkzeuge

Genau drei Tools.

Erkundung, Ausführung, Probe — je ein Tool. Die Oberfläche wächst nicht unbemerkt.

01

listSources

führt nie aus

Gibt Felder, Typen und Zeilenzahlen jeder Quelle zurück, sowie die Operationen, die jedes Zahlenfeld unterstützt. Drei Detailmodi halten die Token-Kosten konstant, auch wenn die Quellen zunehmen.

sum · avg · count · min · max · eq · in · gt · gte · lt · lte · is_null · is_not_null

02

queryData

das einzige, das ausführt

Nimmt einen typisierten Plan entgegen — eine diskriminierte Union, validiert bevor irgendetwas läuft. Vier Ergebnisse, nie eine Exception: Die Schleife erhält immer Struktur zurück, auch wenn die Antwort Nein lautet.

kind: "query" | "computation" · version: "1"
ok · needs_clarification · rejected · error

03

explainQuery

Probelauf

Validiert und löst einen Plan auf, ohne Daten zu berühren. Der zurückgegebene invocation_hash ist eine Vorschau auf das, was ausgeführt würde — nicht der Hash von etwas, das bereits lief.

invocation_hash = preview ≠ executed

VEin Lauf, protokolliert

Echte Zahlen aus einem echten Lauf.

generateText · ein Prompt · drei Tool-Schritte

Nutzer

Gesamtumsatz in der Ostregion — und der NPV unseres Umsatzplans bei 10 % Zinssatz?

Tool
listSources()orders · 12 Zeilen · region, revenue
Tool
queryData({ kind: "query", version: "1", … })sum(revenue) · region = "east"ok · 2130,50 · 5 ordersplan_hash f87610d8afeb…
Tool
queryData({ kind: "computation", version: "1", … })finance.npv · rate 0.1 · values ← orders.revenueok · 3188,17 · 0,83 ms
Assistent

Der Umsatz in der Ostregion beträgt 2.130,50 über 5 Bestellungen. Bei einem Zinssatz von 10 % ergibt sich ein NPV des Umsatzplans von 3.188,17.

Das Modell hat keine Arithmetik durchgeführt. Beide Zahlen stammen aus der deterministischen Engine — und der Hash macht sie reproduzierbar.

VIVergleich mit generischen Tools

Typisierte Pläne kennen keine schlechten Tage.

ein generisches SQL-Toolsqai.tools()
das Modell schreibtein generisches SQL-Tooleinen rohen SQL-Stringsqai.tools()einen typisierten Plan — kind „query" oder „computation", version „1", zod-validiert
ein fehlerhafter Aufrufein generisches SQL-Toolwirft, wiederholt oder schlägt still fehlsqai.tools()gibt needs_clarification mit Optionen zurück — die Tools werfen nie
dieselbe Frage zweimalein generisches SQL-Toolunterschiedliches SQL, unterschiedliche Antwortensqai.tools()derselbe Plan, derselbe Hash — reproduzierbar
der Schreibpfadein generisches SQL-Toolwas immer die Verbindung erlaubtsqai.tools()konstruktionsbedingt keiner — 4.574 schreibgeschützte Fähigkeiten, kein modellerreichbares Schlupfloch
Nachweisein generisches SQL-Toolkeiner — eine plausible Zahlsqai.tools()plan_hash und computation_hash bei jeder Antwort

Die Fehlermodi auf der linken Seite sind dokumentiert, nicht erdacht: vercel/ai #1905 · #2147 · #12020 · #6913

Den vollständigen Agent-Loop entwerfen

Die Werkzeuge ausliefern.

Kein API-Schlüssel. Kein Konto. Der erste Tool-Aufruf funktioniert sofort.

Im AI SDK Tools Registry gelistet · ai ^7.0.0 · zod ^4.0.0 · Node ≥ 20 · serverseitig