Strata:一个敢对 LLM 说「不」的语义层,和一场关于「要不要开源」的吵架
一个做数据的人,最怕的是什么?不是模型答错,而是它答得头头是道,业务同事还信了。LLM 写 SQL 的时候特别容易「创造性地发挥」——查询语法没错、字段名也对得上,但算出来的东西就是不对,而坐在屏幕前的非技术同事根本看不出问题在哪。
Strata 这个 Show HN 项目,打的就是这个点。作者叫 Ajo,在 Netflix 干了 4 年,一直做非技术业务用户的自助分析。他在这条帖子里反复强调一个词:拒绝。他的语义层不是那种「你问什么我都尽量答」的讨好型工具,而是能对不合理查询说「不」。
核心思路:严格的命名,和一个「敢拒绝」的层
Strata 的关键设计是一套严格的命名规范:一个项目里只允许存在一个叫「Revenue」的东西。如果同一指标映射到多张表,查询的 grain 加上速度来决定走哪张表。这套约束带来两个副产品:一是自动跨事实域的 data blending 变顺了,二是 partition 和 aggregate 感知的语义路由能做起来——把一部分数据丢到 Druid 或 ClickHouse 这类快的引擎,全部历史留在 Trino 这类便宜的,查询引擎能自己选更快的 tier。
复杂度量这块也有覆盖:snapshot、LOD(include/exclude)、Compound、还有 auto leveling compound measures,开箱即用,还能让用户跨事实域写自定义计算。整体是个 full-stack 方案:语义层、dashboard、订阅、Google Sheets 导出都有,通过 agent 对话或 MCP 都能操作。
顺带一句,作者明确说了不打算做成 BI 工具能连的语义层,觉得那是死路。给的是 API 和 MCP,你想在它上面搭什么自己搭。
现在处于早期 beta,不是开源,但免费档最多支持 25 个用户,可以全用 Docker 跑在自己机器上。这个「25 用户 + 本地跑」的组合,在 HN 上很快就引发了争议。
争论焦点:为什么不开源?
评论区的火药味基本集中在开源问题上。有人说「免费档到 25 个用户,花点 tokens 把它复刻出来再开源不就行了」,作者回了一句「ah man, that's not cool」。这句轻飘飘的回复,基本说明了立场:这是一个商业产品,不是社区玩具。
但另一条评论把讨论拉回技术层面。有人问:当各家实验室都在追 TerminalBench 这类 shell 用法 benchmark 的时候,语义层对 agent 性能到底有多大价值?还举了个例子:Snowflake Analyst 有 90%+ 的查询都路由到了传统 SQL,而不是它自己的语义 SQL 方言。言下之意,语义层这个概念在 2018 年的 BI 圈就有了,metadata 是一回事,但语义层意味着从物理数据抽象出来、带 lossy 转换,这东西对 agent 到底有没有实际帮助,存疑。
Ajo 的回应倒是实在:语义层这概念比他入行还早,大概 90 年代末就有了,而且这些年创新反而在倒退——Looker 相比 Strategy 就是更简单但能力更弱。但他坚持一点:语义层确实在这一个点上对 agent 性能有帮助——拒绝那些看似合理但实际无效的查询。agent 写 SQL 更容易在意外的地方「发挥」,业务用户根本分辨不出来。对开发者和数据工程师来说,这种层已经没用了,但对业务用户那套 analytics harness 来说,是个相当不错的工具。
一些值得注意的边角
这条 Show HN 还有点戏剧性。最初提交的 URL 指向的是 /try/ 页面,有人直接开喷说「这 landing page 太烂了,一堆安装说明,根本看不懂这玩意儿是干嘛的」,话还带了点人身攻击的味道,被 HN 的 dang 亲自下场提醒了一句——别对别人的工作用这种贬损词,想帮就具体说说哪里能改。作者也认了,说是自己没链接对主页,应该链到 strata.do。
这条 21 分、14 条评论的帖子,热度不算高,但值得关注的点恰恰在这。它没在聊性能参数,也没在聊 benchmark 刷分,它聊的是一个更本质的问题:当 LLM 变得太会「一本正经地胡说」时,数据工具的价值可能不在「帮你算出更多」,而在「拦住算错的」。
顺便,评论区还埋了一个作者自己抛出的开放式问题:他想考虑把语义层做成纯 API 服务——你把模型发过去,给你快速的查询生成,模型托管、你的数据留在自家防火墙后面。这个「模型托管 + 数据不出防火墙」的折中方案,配合「敢说不」的设计哲学,可能是比开源更值得关注的方向。至于 25 用户的免费档、docker 一键跑、not-open-source 这些,对个人玩玩绰绰有余,对团队上生产,就看你愿不愿意为一个「敢说不的语义层」付钱了。