架构

它会在你的网络上部署什么、又会与谁通信。整个平台就是一个无状态容器加一个 Supabase 项目;其余一切都是向你本已信任的地方发起的出站调用。

你的基础设施浏览器你的用户负载均衡optionalZenStudio无状态 Node 容器SupabasePostgres · 认证 · 存储模型提供商OpenRouter、OpenAI、Anthropic……你的数据库22 种数仓连接器SaaS APISheets、Stripe、Shopify、各类 CRM受行级安全约束你的密钥只读只读横向扩容——无需会话粘滞,没有本地状态

部署

一个容器

单个无状态 Node 进程,以 Docker 镜像形式发布。DEPLOY_TARGET=node 是主要目标;docker compose up 是文档给出的路径。

一个数据库

一个由你创建、由你拥有的 Supabase 项目——Postgres、认证和对象存储。迁移用 Supabase CLI 应用。运行本平台不需要其他任何东西。

横向扩容

容器不保存任何会话状态,因此可以放在普通负载均衡之后,不需要会话粘滞。后台任务通过数据库上的跨实例租约协调,也可以用 DISABLE_INPROCESS_SCHEDULER 按实例关闭,让某一个节点独占它。

健康检查端点

/api/health for liveness and readiness probes.

出站流量

所有出站目标,仅此而已。写防火墙规则时用得上。

模型提供商

向你所配置的各家提供商发起出站 HTTPS,使用你的密钥。提示词与补全内容不会经过我们的任何厂商。

你的数据源

向你接入的数据库、数仓和 SaaS API 发起出站请求。数据库驱动使用各自的原生端口;其余一律走 HTTPS。文档要求连接器使用只读凭据,且每条查询路径都会拒绝除 SELECT 一类之外的语句。

内网是可达的

数仓位于你的 VPC 内是一种常规部署。出站请求会针对云元数据地址和链路本地地址做筛查,但私有地址段是刻意放通的。

不回传

没有遥测、没有许可证校验、没有用量上报。什么都没内置:Cookie 提示条里那份可选的分析统计,只有在你配置了自己的 VITE_GA_ID 时才存在,未配置时连提示条都不会出现。只访问你自己模型端点的离网部署,是受支持的配置。

规模

什么受限、受什么限。完整数值以及能改变它们的环境变量都在 docs/SCALE_AND_LIMITS.md 里。

聚合在你的数仓里执行

语义层查询和已关联的数仓表都会编译成在数据所在处执行的 SQL,因此十亿行的 GROUP BY 是你数仓的工作量,网络上只走分组后的结果。结果集有上限(默认 1000 行,硬上限 5000 行,超时 60 秒)——它限制的是回传的内容,从不限制表本身。

数据准备能下推时就下推到数仓

当一个流程的所有数据源都在同一个连接上、且每一步都能用该方言表达时,整条流水线会变成一条在数仓内部执行的 SQL——而这次下推在被信任之前会先在真实数仓上验证过,所以一旦被拒,损失的是速度,绝不是正确性。混合来源或无法下推的流程改在本地执行,界面会说明是哪一种。

本地数据集刻意保持在笔记本电脑量级

上传和同步来的数据集是 DuckDB 表,默认上限 50 万行、100 MB。它们的用途是 CSV、样本数据和 SaaS 同步。超过几百万行,请关联数仓表,而不是把它导入进来。

仪表板默认使用缓存快照

由数仓支撑的组件最多保存 500 行,好让共享链接瞬时渲染。因此,如果刷新时触到了这个上限,那些在浏览器里对原始行求和的图表会显示一个部分合计——它会被标记为已截断,而不是当作确定值展示。启用聚合下推(在 SQL 里 GROUP BY)或直接查询模式,才能得到完整数字。

状态与备份

什么必须存活,什么丢了也没关系。

所有持久内容都在 Postgres 里

智能体、集群、数据集、仪表板、追踪和审计事件。备份好 Supabase 项目,就等于备份了整个平台。

对象存储

上传的文档、生成的文件以及列式数据集镜像都放在 Supabase 存储桶里。

本地磁盘只是缓存

Parquet 镜像缓存在本地磁盘上,是可丢弃的——丢了只损失速度,绝不丢数据。在容器宿主机上给它挂一个真实卷,让它能活过重启。

完整的部署选项与环境变量在 docs/DEPLOYMENT.md;每一项行数、超时和并发上限在 docs/SCALE_AND_LIMITS.md。另请参阅 安全 和 许可协议.