01
listSources
从不执行
返回每个数据源的字段、类型与行数,以及每个数字字段支持的运算。三种详情模式在数据源增多时保持 token 消耗平稳。
sum · avg · count · min · max · eq · in · gt · gte · lt · lte · is_null · is_not_null
适用于 Vercel AI SDK
sqai.tools() 向 generateText 精确添加三个只读工具。模型发现数据源、提交一份类型化计划,并由确定性引擎返回计算结果——附带可重现每个答案的哈希值。
II安装
服务端运行,需 Node 20 或更高版本——在 Next.js 中,请在 runtime = "nodejs" 的路由处理器中使用。对等依赖为 ai ^7.0.0 与 zod ^4.0.0,即计划类型所对应的版本。无需账号、密钥或配置文件。
III快速开始
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() 采用懒连接——首次工具调用前不读取任何数据。sqai.tools() 返回类型化的 SqaiToolSet,无需类型转换。isStepCount(12) 为模型保留了发现、规划与执行的空间。
CSV、JSON、内存记录与 SQLite 在进程内运行——数据不离开您的服务器。Postgres、Snowflake、BigQuery 及其他数据源通过引擎接入。每个数据源均以相同的类型化结构呈现,下游工具无法区分 CSV 与 Snowflake。 查看所有数据源规格 →
const sqai = createSQAI({
sources: [
{ name: 'orders', path: './orders.csv' },
{ name: 'sessions', provider: 'sqlite',
path: './app.db', table: 'sessions' },
{ name: 'quotes', records: quotes },
],
});截断始终会被声明;不完整的行永不显示。模型填写的工具输入不含任何 allowed* 字段——策略在 createSQAI() 时固定,并在执行前于进程内校验。模型无法扩展其被授予的权限。 完整治理模型 →
const sqai = createSQAI({
sources,
allowedSources: ['orders'],
allowedFields: { orders: ['region', 'revenue'] },
allowedFunctions: 'all-readonly',
defaultLimit: 100,
maxRowsToModel: 25,
});sources必填工具可见的唯一数据。注册后不可变更。
allowedSources全部已注册限定计划可访问的数据源范围。
allowedFields全部字段按数据源设置列允许列表,其余字段不可见。
allowedFunctions"all-readonly"能力允许列表——只能收窄。指定范围更广的能力将抛出 unsupported_operation。
defaultLimit100计划未自行设置限制时返回的行数。
maxExecutionRows1,000单次执行读取行数的硬性上限。
maxRowsToModel25模型可见的最大行数。
maxCellsToModel250模型所能看到的单元格数量。
maxBytesToModel32,000模型所能看到的结果字节数。
IV工具箱
发现、执行、预演——各一个工具。接口不会在你不知情时悄然扩张。
01
从不执行
返回每个数据源的字段、类型与行数,以及每个数字字段支持的运算。三种详情模式在数据源增多时保持 token 消耗平稳。
sum · avg · count · min · max · eq · in · gt · gte · lt · lte · is_null · is_not_null
02
唯一会执行的工具
接受一个有类型的计划——经过判别联合验证,在任何操作执行前完成校验。四种结果,从不抛出异常:即便答案为否,循环也始终能获得结构化返回。
kind: "query" | "computation" · version: "1"
ok · needs_clarification · rejected · error
03
空运行
在不接触数据的情况下验证并解析计划。返回的 invocation_hash 是对将要执行内容的预览——而非已执行内容的哈希。
invocation_hash = preview ≠ executed
V一次运行,完整呈现
generateText · 单次提示 · 三个工具步骤
东部地区的总收入——以及以 10% 折现率计算的收入计划净现值?
listSources()orders · 12 行 · region, revenuequeryData({ kind: "query", version: "1", … })sum(revenue) · region = "east"ok · 2130.50 · 5 笔订单plan_hash f87610d8afeb…queryData({ kind: "computation", version: "1", … })finance.npv · rate 0.1 · values ← orders.revenue成功 · 3188.17 · 0.83 毫秒东部地区收入为 2,130.50,共 5 笔订单。以 10% 折现率计算,收入计划的净现值为 3,188.17。
模型未进行任何运算。两个数字均来自确定性引擎——哈希可完整复现。
VI对比通用工具
左侧的失败模式有据可查,并非凭空想象: vercel/ai #1905 · #2147 · #12020 · #6913