
一句话钩子: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 分钟)
- 打开
http://localhost:3000→ Settings → Data Source - 选 PostgreSQL → 填 host/port/user/pass/db
- WrenAI 自动 introspect schema → 生成 manifest
- 编辑 manifest:给物理列起业务别名、加 metric 定义、加 relationship
- 保存 → 自动索引到语义层
示例 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 句 ” 先试一周 ”
最值得装的理由
- GenBI 范式是 BI 的下一站 —— WrenAI 是开源阵营里 第一个把 ” 自然语言 + 语义层 + 治理 + MCP” 四件套做透 的,比 Vanna 全栈、比 Evidence 自然语言原生、比 Metabase AI 透明可控。这是 2026 年开源 BI 的范式标杆。
- Rust 引擎 + Python 应用层的工程美学 —— 罕见的 Python+Rust 双栈混部,Rust 负责 SQL 引擎性能,Python 负责 LLM 编排。 学习价值大于使用价值(读它的源码能学到现代数据栈架构)。
- 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 锁定老版本。