治理 · 只读架构
策略即代码。
而非提示词。
SQAI 将模型视为其本质:一个不受信任的客户端。允许列表在工具构建时固化于代码,在进程内于任何执行前完成校验,且不出现在模型的协议中。没有任何途径可以说服系统放行。
II完整收窄过程
三层约束,每层只减不增。
每个答案都经过相同的约束链。哈希锁定的合约定义可用范围,您的策略将其收窄至允许范围,一个类型化请求必须同时满足两者。
- 01
合约
锁定运行时中共有 4,778 项能力,其中 4,574 项暴露给智能体,全部只读。其余 204 项被完全排除——对模型而言,它们不存在。
- 02
您的策略
三个允许列表——allowedSources、各数据源的 allowedFields、allowedFunctions——在 createSQAI() 时固定。函数默认为 "all-readonly"。
- 03
一个请求
一个类型化计划,先对合约进行验证,再在进程内对策略进行校验——发生在执行之前,而非之后。
allowedSourcesordersallowedFieldsregionrevenueunit_priceallowedFunctionsstats.medianfinance.npvQuerySpec v1 · median(revenue) by region · policy ✓
contract_hash sha256:79f1c5a6c7164e7e9e1750e70a5c03292fa87eb52d8148a740c06695924be9a1
只减不增。
策略只能缩小可用范围,任何操作都无法扩大它。若策略引用了合约未暴露的能力,createSQAI() 将在构建时抛出 unsupported_operation——应用在任何智能体连接之前即告失败。
模型的工具输入中不含任何 allowed* 字段。策略不在协议中,因此无论是提示词还是注入攻击,都无从扩大权限。
III策略即代码
一次编写,每次校验。
大多数治理工具位于数据路径旁侧,仅作观测。SQAI 的策略位于路径内部:三个允许列表写在构造函数中,在每次执行前于进程内强制执行。
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
- 计划可引用的已注册数据源。其他任何数据源均返回 policy_denied_source。
- allowedFields
- 各数据源允许访问的列。计划若触及其他列,返回 policy_denied_field。
- allowedFunctions
- 计划可调用的只读函数——默认为 "all-readonly"。超出范围的调用返回 policy_denied_function。
- tool input
- 不含任何 allowed* 字段。模型从不知晓策略内容,因此无法发送更宽泛的策略。
拒绝记录
拒绝以数据形式呈现,而非异常。每条拒绝携带智能体可读的稳定错误码——且均不可重试,循环无法通过反复尝试磨穿策略。
构建时
unsupported_operation策略引用了合约未暴露的能力。构建时抛出异常,应用在任何智能体连接之前即告失败。
请求时
policy_denied_source计划引用了 allowedSources 之外的数据源。
policy_denied_field计划触及了该数据源 allowedFields 之外的列。
policy_denied_function计划调用了 allowedFunctions 之外的函数。
source: "sqai" — 每次策略拒绝均以结构化、不可重试的结果返回。工具从不抛出异常。
IV数据托管
结果被托管,而非留存。
完整结果集不会进入模型上下文。它存入受治理的存储并以 id 引用;模型仅接收声明的样本。
结果存储
受治理存储 · TTL 15 分钟
- result_id
- 16 个随机字节,base64url 编码。不可猜测,从不连续。
- authorization
- 租户绑定。错误租户只会收到 result_not_found——存储从不确认记录是否存在。
- ttl
- 15 分钟。到期后条目即被删除。
- capacity
- 最多 256 条结果——总计 64 MB,每租户 16 MB。
存储持有结果。模型读取样本并如实说明。
模型上下文上限
defaultLimit100计划未设置行数限制时的默认值maxExecutionRows1,000单次执行返回行数的硬性上限maxRowsToModel25模型上下文最多接收的行数maxCellsToModel250模型上下文最多接收的单元格数maxBytesToModel32,000模型最多接收的结果数据字节数截断情况始终在结果中声明。不完整的行不会显示——行要么完整呈现,要么不呈现。
审计视角
17%的组织能够事后重建智能体的完整工具调用序列
GDPR 第 30 条与 SOC 2 CC7.2 明确要求此类记录。
每条 SQAI 答案已自带完整的重建信息:
plan_hash · invocation_hash · computation_hash · contract_hash
回放是一次查询,而非一场调查。 回放机制说明 →
VI常见问题
治理问题,直接作答
模型能否自行扩大访问权限?
不能。策略在 createSQAI() 时固定,并在执行前于进程内完成校验。模型的工具输入不含任何 allowed* 字段,协议层面无从扩权——超出策略的请求将返回结构化的 policy_denied 结果。
只读是否是某个可被绕过的标志位?
不是标志位。暴露的契约包含 4,574 项只读能力;写入路径在构造上即不存在,而非被禁用。提示注入可以改变模型的请求内容——但无法向已固定的契约添加能力。
GDPR 第 30 条或 SOC 2 CC7.2 审查需要哪些记录?
每条结果均携带 plan_hash、invocation_hash、computation_hash 和 contract_hash。事后可随时对精确计算过程进行回放,并与这些哈希值进行验证。
查询后结果数据存储在哪里?
存入租户授权的结果存储:id 为 16 个随机字节,条目 15 分钟后过期,存储总容量上限为 64 MB,每租户 16 MB。模型上下文最多接收 25 行、250 个单元格及 32,000 字节——截断情况始终声明。