WrenAI 调研:GenBI 范式开创者,17265★ · 自然语言问数据,Text-to-SQL + 语义层 + MCP 一站式开源

48次阅读
WrenAI 调研:GenBI 范式开创者,17265★ · 自然语言问数据,Text-to-SQL + 语义层 + MCP 一站式开源

一句话钩子:17,265★ · Apache-2.0(含未来 AGPL-3.0 only 信号)· Python + Rust · 20+ 数据源 —— 当所有 BI 工具还在拼 ”AI 助手按钮 ” 时,Canner 团队直接把 GenBI(Generative BI) 这个范式做到位:业务方说人话,AI 直接生成可治理的 SQL + 图表, 整套 Text-to-SQL + 语义层 + MCP 全栈开源


写在前面:GenBI 是 BI 的下一站

如果说 2025 年的 BI 主线是 ” 给 BI 加 AI Copilot”,那 2026 年的主线就是 GenBI(Generative BI)

  • 老 BI(Superset / Metabase / Tableau):人拖拽 + 写 SQL,AI 偶尔补一句
  • 加 AI 的 BI(Metabase AI / Tableau AI):问 AI → AI 给建议 → 人执行
  • GenBI(WrenAI / Vanna / 商业 ChatGPT BI):问 AI → AI 自动生成 SQL + 图表 + 报告 → 人审核

WrenAI 是开源阵营里 第一个把 GenBI 全栈做透 的:自然语言 + 上下文层(语义层)+ 治理 + MCP 集成全包。今天这篇就是拆给你看,它为什么值 17K stars,License 上有什么坑,以及跟 Evidence(314)怎么选


一、它解决什么问题

维度 数值
GitHub Canner/WrenAI
Stars 17,265 ⭐(2026-08-14)
Forks 1,954
Open issues 331(活跃)
License NOASSERTION ⚠️core/ sdk/ skills/ examples/ Apache-2.0;docs/ CC-BY-4.0;声明未来可能加 AGPL-3.0-only 模块
首次 commit 2024-03-13(2.5 年)
最近 push 2026-08-14(昨天,仍在高频发版)
体积 41 MB
贡献者 74 人 / 总提交 2,160
核心维护者 goldmedal (455) / cyyeh (375) / onlyjackfrost (203) / andreashimin (138) / wwwy3y3 (136) / chilijung (110) / brandboat (105)
默认分支 main
公司背景 Canner, Inc.(Wren / WrenAI 商标归 Canner)

一句话定位:”GenBI (Generative BI) for AI agents, an open-source, governed text-to-SQL through an open context layer that turns natural-language questions into trusted dashboards, charts, and SQL across 20+ data sources”。

痛点直击
1.
业务方不会 SQL —— 90% 的 ” 我要看个数据 ” 需求被压在数据团队排期里,WrenAI 让业务方 自己问问题

2.
Text-to-SQL 准确率黑洞 —— 大部分开源 T2S 项目生成 SQL 质量飘忽,WrenAI 用 语义层(Semantic Layer)做上下文治理,准确率数量级提升
3.
AI Agent 怎么问数据 —— OpenClaw / Claude Desktop / Cursor 这类 Coding Agent 想问业务数据,WrenAI 通过 MCP 暴露 直接对接
4.
多源数据 join —— 同时查 PostgreSQL + Snowflake + BigQuery,传统 BI 搞不定,WrenAI 用 上下文层抽象语义 统一查询


二、核心能力:GenBI + 上下文层 + 治理

2.1 GenBI 四件套(独家架构)

WrenAI 的 GenBI 不只是 ”Chat with your data”,是 四件套

组件 文件位置 作用
wren-core core/ SQL 引擎核心(Rust 实现,性能关键
wren-semantic-core core/ 子模块 语义层(数据建模 + 关系定义 + 业务术语)
wren-manifest-macro core/ 子模块 dbt-like manifest 解析(跟 dbt 模型无缝对接
AI 编排层 Python 服务 LLM 调度 + Prompt + RAG + SQL 生成

这跟 Vanna.AI、LangChain SQL Agent 那种 ” 裸 Prompt + LLM” 完全不同。WrenAI 把数据治理放在了 SQL 生成前面

2.2 上下文层(Semantic Layer)—— 准确率的核心

WrenAI 的关键创新不是 LLM,是 语义层

你的 PostgreSQL 表:users(id, name, email, created_at, country_code)
  orders(id, user_id, amount, status, created_at)

WrenAI 让你定义一个 manifest(YAML):models:
    - name: active_users
      table: users
      columns:
        - name: id
        - name: country
          sql: country_code  # 业务术语 → 物理列
        - name: is_active
          sql: "last_login_at > now() - interval '30 days'"
  relationships:
    - from: orders.user_id
      to: users.id
  metrics:
    - name: monthly_revenue
      sql: "sum(amount) where status = 'paid'"
  • LLM 拿到的不是裸 schema,是带业务语义 + 指标定义 + 关系映射的上下文
  • 业务方问 ” 上个月付费用户的总营收 ”,LLM 直接生成 SQL:
    sql
    SELECT sum(amount) FROM orders
    WHERE status = 'paid'
    AND created_at >= date_trunc('month', now() - interval '1 month')
    AND created_at < date_trunc('month', now())
    AND user_id IN (SELECT id FROM users WHERE last_login_at > now() - interval '30 days')
  • 不需要业务方写 SQL,不需要 LLM 猜列名

2.3 20+ 数据源(覆盖全栈)

类别 数据源
云数仓 BigQuery / Snowflake / Amazon Redshift / Databricks
OLAP ClickHouse / DuckDB
OLTP PostgreSQL / MySQL / MS SQL Server / Trino
本地 SQLite
Lakehouse Databricks (Delta Lake)
文件 CSV(推断 schema)

跟 Evidence.dev(16+)相当,但 WrenAI 在云数仓覆盖更广(Redshift、Databricks),跟 Evidence 在 OLTP 本地覆盖持平。

2.4 MCP / Agent 集成(飞熊读者关键)

WrenAI 原生支持 MCP(Model Context Protocol)

集成 详情
MCP Server 暴露 query_data / get_chart / get_dashboard 等工具
Coding Agent Claude Desktop / Cursor / OpenClaw 直接连
示例 client 仓库自带 CLI / Streamlit UI / Slack Bot
可观测 所有 SQL 生成 + 执行 + 错误都进日志

真实用法:你在 Claude Desktop 里说 ” 查上个月上海的订单总数 ”,Claude 自动调 WrenAI MCP server,返回结构化结果 + 图表。

2.5 治理(governed)

WrenAI 反复强调 “governed text-to-SQL”:

  • 审计日志:每个自然语言问题 → 生成的 SQL → 执行的 SQL 全链路留痕
  • 访问控制:基于数据源的 row-level security,不绕过
  • SQL 注入防护:生成的 SQL 经过 query sanitizer
  • 回退机制:LLM 生成 SQL 失败时回退到模板查询

三、技术架构:Python 应用层 + Rust 引擎(最值得研究)

3.1 双语言栈

WrenAI 是个 罕见的 Python + Rust 双语言项目

语言 占比 职责
应用层 Python 1.86MB / 56% LLM 编排 / Prompt / API server / SDK
引擎核心 Rust 1.11MB / 33% SQL 解析 / 查询优化 / 语义层执行
前端 HTML + JS 56KB / 56KB Streamlit UI / Demo
构建 / 部署 Just + Shell + Go Template 26KB 命令工具链

为什么用 Rust?

– SQL 解析是 CPU 密集型(每条 query 都要解析 + 校验 + 改写)
– Python GIL 在高并发下吃力,Rust 0 开销
– 跟 DuckDB / DataFusion 生态一致(也是 Rust 实现)

3.2 模块化 monorepo

Canner/WrenAI/
├── core/                  # 核心引擎(Rust)│   ├── wren-core/         # SQL 引擎
│   ├── wren-core-base/    # 公共 trait
│   ├── wren-core-py/      # Python 绑定(pyo3)│   ├── wren-semantic-core/# 语义层
│   └── wren-manifest-macro# dbt manifest 解析
├── sdk/                   # 多语言 SDK
│   ├── wren-pydantic/     # Pydantic 集成(Python)│   ├── wren-langchain/    # LangChain 集成
│   └── wren-ai-sdk/       # 通用 TS/Python SDK
├── skills/                # Agent skills(Claude/Coze 等)├── examples/              # 集成示例(Streamlit / Slack Bot / MCP client)├── docs/                  # CC-BY-4.0 文档站
└── wren-ui/               # Demo UI
  • 每个子包独立发版(看 7-8 月 releases:wren-core-py / wren-semantic-core / wren-pydantic 等都各自 bump)
  • pnpm-like 多包管理,但用 Justfile(你看到 topics 里的 Just 语言就是这个)

3.3 最近发版频率(强活跃信号)

版本 发布日 备注
wren-core-py v0.7.4 2026-08-12 引擎 Python 绑定更新
wren-semantic-core v0.3.1 2026-08-11 语义层更新
wren-manifest-macro v0.3.1 2026-08-11 dbt 解析更新
wren-core-base v0.3.1 2026-08-11 公共 trait 更新
0.29.2 2026-08-05 主版本发版
wren-pydantic v0.2.1 2026-07-29 Pydantic SDK
wren-langchain v0.2.1 2026-07-29 LangChain SDK
wren v0.13.2 2026-07-28 主包

判断 极度活跃(对比 Evidence 主仓库 6 个月没 push 主仓),Canner 团队有明确产品节奏。


四、对比 Evidence / Vanna / Hex / Cube.js / Metabase AI

把 WrenAI 放进 BI / Text-to-SQL 横向坐标系:

维度 WrenAI Evidence.dev (314) Vanna.AI Hex Cube.js (282) Metabase AI
范式 GenBI(自然语言 → SQL+ 图表) Code-based BI(.md+SQL) Text-to-SQL 框架 Notebook + SQL 语义层(Headless) 传统 BI + AI 插件
License Apache-2.0 ⚠️(未来 AGPL-3.0-only 风险 MIT ✅ MIT 闭源 Apache-2.0 AGPL + Commercial
Stars 17.3K 6.8K ~5K 5.5K 48K
目标用户 业务方 + 工程师 + Agent 工程师 + Agent 工程师 数据科学家 数据团队 / BI 厂商 全公司
T2S 准确率 (语义层治理) 不做 T2S(人写) (裸 Prompt + RAG) 不做 T2S 闭源黑盒
核心技术 Rust + Python + MCP Svelte + DuckDB WASM + MCP Python + RAG 闭源 TypeScript Clojure
数据源 20+ 16+ 任意(自己接) 任意 任意下游 20+
语义层 原生(wren-semantic-core) 无(manifest 是手写 SQL) 内置 原生(核心) 部分
MCP 集成 ✅ 原生 ✅ 原生 ✅ 部分
dbt 集成 ✅(manifest-macro) ✅(数据源) 手动
报表载体 自动生成 .md 文件(git) Notebook API / 缓存 数据库
自托管 ✅ Docker / Compose ✅ Static 闭源
Cloud Wren Cloud(闭源) Evidence Studio(闭源) Cube Cloud Metabase Cloud

4.1 核心判断

选 WrenAI 的场景
– ✅ 你想让
业务方自己问数据(PM / 运营 / 销售,不需要 SQL 技能)
– ✅ 你想给
AI Agent 提供一个可信的 ” 问数据 ” 入口(Claude Desktop / OpenClaw)
– ✅ 你重视
Text-to-SQL 准确率(需要语义层治理,不能接受随机结果)
– ✅ 你想
统一多源查询(PostgreSQL + Snowflake + BigQuery 一起问)
– ✅ 你是
dbt 重度用户(WrenAI manifest-macro 跟 dbt manifest 直接对接)

不选 WrenAI 的场景
– ❌ 你接受不了
AGPL-3.0-only 的潜在风险(看下面风险章节)
– ❌ 你的报表消费者是
纯工程师,直接让他们写 SQL(Evidence 更轻)
– ❌ 你想要
纯 GUI 拖拽(Metabase / Superset)
– ❌ 你的团队没有 LLM API Key / 不想接 OpenAI / Anthropic(GenBI 必须有 LLM)

4.2 vs Evidence.dev 的本质差异

这是飞熊读者最容易纠结的选择,我单拎出来:

WrenAI Evidence.dev
谁来写报表 业务方 + AI(你写人话) 工程师(你写 SQL+MD)
生产关系 LLM 是生产者,你是审核者 你(工程师)是生产者,Agent 是协助者
准确率依赖 LLM + 语义层 + 数据治理 你自己写的 SQL + 组件
变更控制 改 manifest + 重新生成 改 .md 文件 + git diff
Agent 角色 消费侧(Agent 帮你生成报表) 生产侧(Agent 帮你改报表)
学习曲线 低(业务方能上手) 中(要会 Svelte + SQL)
LLM 依赖 强(必须) 弱(可选)

一句话WrenAI 把 SQL 生成外包给 AI,Evidence 把 SQL 控制权留给人。前者省人力但依赖 LLM,后者省 LLM 但要工程师。

4.3 vs Vanna.AI(同一战场)

维度 WrenAI Vanna.AI
定位 全栈 GenBI 平台 Text-to-SQL 框架(库)
T2S 实现 语义层 + LLM + RAG RAG + Prompt 工程(裸跑)
数据源 20+ 内置 任意(自己写 connector)
可观测 完整审计
前端 Streamlit UI / Cloud 无(你自己接)
上手成本 Docker 一键跑 写 Python 代码
生产可用 ⚠️ 自己拼装

Vanna 是 ”Text-to-SQL 工具箱 ”,WrenAI 是 ”GenBI 产品 ”


五、实战:3 步跑通一个 WrenAI 项目

5.1 部署(Docker Compose 最快)

git clone https://github.com/Canner/WrenAI.git
cd WrenAI
# 编辑 docker-compose.yaml 填 LLM API Key(OpenAI / Anthropic / Ollama 都可以)docker compose up -d
# → UI: http://localhost:3000
# → API: http://localhost:5555

5.2 连数据源(10 分钟)

  1. 打开 http://localhost:3000 → Settings → Data Source
  2. 选 PostgreSQL → 填 host/port/user/pass/db
  3. WrenAI 自动 introspect schema → 生成 manifest
  4. 编辑 manifest:给物理列起业务别名、加 metric 定义、加 relationship
  5. 保存 → 自动索引到语义层

示例 manifest 片段

# wren_manifest.yaml
models:
  - name: customers
    table: public.users
    columns:
      - name: id
      - name: customer_name
        sql: name
      - name: signup_date
        sql: created_at
  - name: paid_orders
    table: public.orders
    columns:
      - name: id
      - name: amount
      - name: paid_at
        sql: "case when status = 'paid' then created_at end"
relationships:
  - from: paid_orders.customer_id
    to: customers.id
metrics:
  - name: total_revenue
    sql: "sum(amount) where status = 'paid'"

5.3 问数据(30 秒上手)

UI 里输入自然语言:

" 上个月付费用户的总营收是多少?按周拆分 "

WrenAI 流程:
1. RAG 检索相关 manifest(识别
customers / paid_orders / total_revenue
2. LLM 生成 SQL:
sql
SELECT date_trunc('week', paid_at) AS week,
sum(amount) AS revenue
FROM paid_orders
WHERE paid_at >= date_trunc('month', now() - interval '1 month')
AND paid_at < date_trunc('month', now())
AND customer_id IN (SELECT id FROM customers)
GROUP BY 1
ORDER BY 1


3. 展示生成的 SQL + 一键执行按钮
4. 自动选图表类型(line chart for time series)
5. 一键保存为 dashboard

5.4 接 Claude Desktop(Agent 用法)

// ~/.config/claude_desktop_config.json
{
  "mcpServers": {
    "wrenai": {
      "command": "npx",
      "args": ["-y", "@wrenai/mcp-server"],
      "env": {
        "WRENAI_API_URL": "http://localhost:5555",
        "WRENAI_PROJECT_ID": "my-project"
      }
    }
  }
}

Claude Desktop 里直接说:” 帮我看下上个月付费用户的营收趋势 ”,Claude 自动调 WrenAI。


六、风险与坑(重点:License 信号)

6.1 ⚠️ 未来 AGPL-3.0-only 风险(最关键)

WrenAI 的 LICENSE 文件里有这一段原文:

“This repository may, in the future, introduce modules licensed under the GNU Affero General Public License v3.0 only (‘AGPL-3.0-only’). When such modules are introduced, the table above will be updated to reflect their paths.”

这意味着
– 当前所有模块(
core/ sdk/ skills/ examples/)都是 Apache-2.0 ✅

未来可能引入 AGPL-3.0-only 模块 ⚠️
– AGPL-3.0 在 SaaS 场景下要开源整个应用(SSPL 同类)——
商业化产品集成要小心

判断
– ✅ 现在用没问题(Apache-2.0)
– ⚠️ 长期要观察,看 LICENSE 表格何时更新
– 🚨 如果你是 SaaS 产品想集成 WrenAI 当 GenBI 引擎,
要么 fork + 锁定老版本,要么等 SaaS 友好版的官方服务

这跟 Coolify(266 Apache-2.0)/ LiteParse(247 Apache-2.0)这些 纯 Apache 项目 不一样。WrenAI 是 ” 现在 Apache + 未来可能 AGPL” 的混合体,比纯 AGPL 项目宽松,但比纯 Apache 项目多了不确定性。

6.2 LLM 依赖

GenBI 是 LLM 原生应用:
– 必须有 OpenAI / Anthropic / Ollama / OpenRouter 等 LLM 接入
– LLM API 成本:每个问题 0.01-0.05 美元(视 query 复杂度)

生产环境要监控 LLM 成本(1000 业务方每天问 10 个问题 = $100-500/ 天)

6.3 语义层维护成本

manifest 不是一次写完就完事:
– 业务方新增需求 → 加 metric
– 表结构变更 → 更新 manifest
– 跨团队对齐术语 → review manifest

这跟 dbt models 维护成本相当,但多了一份 ”AI 看得懂 ” 的解释层。

6.4 T2S 准确率上限

即使有语义层,复杂 query(多表 join + 嵌套子查询 + 时间窗口)准确率仍可能下降。
降级方案:manifest 里写 SQL template,复杂问题走 template 而非 LLM 生成。

6.5 Streamlit UI 的工程化短板

自带的 Streamlit UI 适合演示和内部工具,不适合生产级 BI 平台
– 性能限制(Streamlit 单进程)
– 主题 / 品牌定制有限
– 多人协作弱

生产用要二次开发(参考 examples/ 里的自定义实现)

6.6 Open issues 331(活跃但压力大)

对比 Evidence(271)、Metabase(4K+)、Cube.js(500+),WrenAI 331 个 issues 数量适中,说明活跃且问题响应速度可能不错。


七、总结:3 个 ” 最值得装的理由 ” + 1 句 ” 先试一周 ”

最值得装的理由

  1. GenBI 范式是 BI 的下一站 —— WrenAI 是开源阵营里 第一个把 ” 自然语言 + 语义层 + 治理 + MCP” 四件套做透 的,比 Vanna 全栈、比 Evidence 自然语言原生、比 Metabase AI 透明可控。这是 2026 年开源 BI 的范式标杆
  2. Rust 引擎 + Python 应用层的工程美学 —— 罕见的 Python+Rust 双栈混部,Rust 负责 SQL 引擎性能,Python 负责 LLM 编排。 学习价值大于使用价值(读它的源码能学到现代数据栈架构)。
  3. MCP / Agent 时代的最优入口 —— Coding Agent(Claude Desktop / Cursor / OpenClaw)想 ” 问数据 ”,WrenAI 的 MCP server 是当前 最完整的开源选择,比 Evidence 的 page-level access 更主动,比 Vanna 的裸 Prompt 更可控。

先试一周

如果你有以下任一场景,今晚花 30 分钟跑一下

git clone https://github.com/Canner/WrenAI.git
cd WrenAI
# 配 LLM API Key + docker compose up -d

接一个你已有的 PostgreSQL → 写个 5 行 manifest → 问 3 个业务问题 → 让 Claude Desktop 接 MCP server 帮你问。如果你在第 20 分钟开始想 ” 为什么 Superset 不这么做 ”,那就对了

⚠️ 特别提醒:开始之前先确认你的场景能否接受 Apache-2.0 + 未来 AGPL-3.0-only 的混合 license。商业产品集成要签 Redis/MongoDB 同款的 ” 商用免责 ” 条款,或者 fork 锁定老版本。


参考

正文完