用自然语言问数据库:Wren AI 入门到实践
让不会写 SQL 的人也能在 3 分钟内拿到图表和洞察
这篇文章能帮你解决什么?
场景 | 传统做法 | Wren AI 做法 |
---|---|---|
公司周报要一张“过去 30 天付费用户留存”的图 | 拉数据工程师排期 → 写 SQL → 画图 → 返工 | 直接问:“过去 30 天的付费用户留存率折线图” → 10 秒出图 |
产品经理想看不同渠道的 LTV | 打开 BI 工具拖拽字段 → 发现缺指标 → 找人补数据 | 问:“按渠道计算平均 LTV” → 直接返回数字和解释 |
开发者想在自己 App 里加一个“AI 数据问答”功能 | 研究 LLM、写 Prompt、调接口、做缓存 | 调用 Wren AI API,两行代码搞定 |
1. Wren AI 是什么?
一句话:
Wren AI 是一个开源的 GenBI(生成式商业智能)代理,能把你的自然语言问题变成准确的 SQL、图表和文字洞察。
它由三个核心模块组成:
-
语义层(Semantic Layer)
把数据库里的表、字段、关联关系翻译成人类语言,并告诉大模型“这里有什么、该怎么算”。 -
大模型路由(LLM Router)
支持 OpenAI、Gemini、Claude、DeepSeek、Ollama 等十几种模型,自动挑选或回退,确保生成 SQL 的准确性。 -
应用接口(API & Embed)
提供 REST API,方便把问答能力塞进自家产品、飞书机器人、Slack 机器人或网页。
2. 三分钟上手:本地安装
以下步骤全部来自官方文档,亲测在 macOS、Ubuntu、Windows WSL2 均可复现。
2.1 前置条件
-
Docker & Docker Compose -
至少 4 GB 空闲内存 -
一个可访问的数据库(示例用 DuckDB 演示,无需额外安装)
2.2 一键启动
# 克隆仓库
git clone https://github.com/Canner/WrenAI.git
cd WrenAI/docker
# 启动所有服务
docker compose up -d
首次启动会拉取 4 个容器:
容器 | 作用 |
---|---|
wren-ui | 前端页面 |
wren-engine | 语义解析与 SQL 生成 |
wren-ai-service | 大模型调用与缓存 |
duckdb | 示例数据库 |
浏览器打开 http://localhost:3000
,看到下图界面即成功:
3. 第一次对话:从“提问”到“图表”的完整链路
3.1 连接数据源
-
点击左侧 “Connections” → “Add Connection”。 -
选择 DuckDB → 填路径(默认已预置 ecommerce.duckdb
)。 -
保存后,系统会自动扫描表结构,生成语义模型(MDL)。
3.2 校验语义层
系统会把 orders
, users
, products
等表翻译成如下模型:
-
Metric: total_revenue = SUM(order_items.price)
-
Dimension: order_date
,user_country
-
Relationship: orders.user_id → users.id
你可以直接修改别名,例如把 order_items.price
改成“订单金额”,后续提问时就能用中文。
3.3 提问
在顶部输入框输入:
“最近 7 天每天的订单金额折线图”
系统会:
-
生成 SQL SELECT DATE(order_date) AS day, SUM(price) AS total_revenue FROM orders WHERE order_date >= CURRENT_DATE - INTERVAL 7 DAY GROUP BY day ORDER BY day;
-
运行 SQL 并返回折线图 -
给出 AI 摘要:
“最近 7 天的收入呈上升趋势,周二达到峰值 $12,345。”
4. 深入:如何确保答案可信?
4.1 语义层的三道保险
保险 | 说明 | 举例 |
---|---|---|
Schema 约束 | 字段类型、主外键、枚举值 | 防止把字符串当数字 |
业务指标 | 预定义聚合口径 | LTV = SUM(revenue) / COUNT(DISTINCT user_id) |
权限控制 | 行级、列级脱敏 | 销售只能看自己区域的数据 |
4.2 大模型选择建议
官方测试了以下组合(越高越好):
模型 | 复杂 SQL 准确率 | 平均响应时间 | 备注 |
---|---|---|---|
GPT-4-turbo | 92 % | 4 s | 推荐生产环境 |
Gemini-1.5-pro | 89 % | 3 s | 成本低,适合 POC |
Ollama-llama3:8b | 71 % | 9 s | 本地离线场景 |
低能力模型会给出“看似合理”的错误 SQL,因此请优先用最强模型。
5. 把能力嵌入你的产品:API 速通
5.1 获取 API Key
-
打开 Settings → API Keys → Generate -
复制 sk-***
,有效期 30 天,可刷新。
5.2 发起请求
curl -X POST https://api.getwren.ai/v1/ask \
-H "Authorization: Bearer sk-***" \
-H "Content-Type: application/json" \
-d '{
"question": "去年各月营收",
"mdl_hash": "duckdb_ecommerce_abc123"
}'
返回结构:
{
"sql": "SELECT ...",
"chart": { "type": "line", "data": [...] },
"summary": "营收从 1 月的 $10k 增长到 12 月的 $80k..."
}
5.3 前端嵌入
官方提供了一个 Streamlit Demo,核心代码不到 30 行:
import streamlit as st, requests
q = st.text_input("想问什么?")
if q:
r = requests.post("https://api.getwren.ai/v1/ask", json={"question": q}, headers=headers)
st.line_chart(r.json()["chart"]["data"])
6. 常见问题 FAQ
Q1:支持哪些数据库?
A:
-
云数仓:BigQuery、Snowflake、Redshift、Athena -
开源:PostgreSQL、MySQL、ClickHouse、DuckDB -
商业:SQL Server、Oracle、Trino
如果你的数据源不在列表,到 GitHub Discussion 投票,官方按月评估。
Q2:企业内部有敏感数据,能私有化吗?
A:可以。
-
开源版:用 Docker Compose 一键部署在本地或 VPC。 -
商业版:提供 Helm Chart,可装进 Kubernetes,配合 Ollama 实现大模型也本地化。
Q3:如何防止大模型“胡编”?
A:
-
语义层兜底:所有指标提前定义,模型只能调用,不能创造。 -
执行前校验:系统会用 SQL Parser 检查语法,再用数据库执行计划验证表和字段存在。 -
白名单模式:管理员可关闭“自由提问”,只允许问预设问题模板。
Q4:不会写 SQL 的运营同学能直接用吗?
A:可以。
-
在语义层把 DATEDIFF(order_date, signup_date)
定义成“用户生命周期(天)”后,运营直接问:“用户生命周期分布”,系统返回直方图。
7. 真实案例:一家跨境电商的 48 小时落地实录
以下信息来自官方 Discord 用户分享,经授权摘录。
时间 | 动作 | 成果 |
---|---|---|
Day 1 上午 | 工程师用 Docker 起服务 | 15 分钟完成 |
Day 1 下午 | 数据分析师把 87 张表拖进语义层 | 定义 34 个业务指标 |
Day 2 上午 | 市场团队开始用自然语言问“上周 TikTok 渠道 ROI” | 准确率 90 % |
Day 2 下午 | 把 API 嵌进飞书机器人 | 销售随时在群里提问 |
8. 下一步:从“能问”到“敢问”
-
持续迭代语义层
每周花 30 分钟 review 新增字段,保持模型新鲜。 -
建立问题字典
把高频问题整理成“官方问法”,减少同义反复。 -
监控准确率
在后台打开 “Query Log”,每周抽样 20 条人工验证,准确率低于 85 % 及时调模型或改语义。
9. 结语
Wren AI 把“写 SQL”的门槛降到“说话”的级别,但背后的严谨性并没有打折:
-
语义层保证指标口径统一 -
多模型路由保证生成质量 -
开放 API 让开发者能二次创造
如果你厌倦了“提需求 → 等排期 → 返工”的循环,不妨花 3 分钟本地跑一遍,再花 1 小时把公司最核心的 10 个指标搬进语义层。
剩下的,就交给一句自然语言吧。
立即体验
-
在线试用(无需安装):Wren AI Cloud -
本地安装文档:docs.getwren.ai -
加入 1.3k 人社区:Discord