站点图标 高效码农

不会SQL也能3分钟自动生成数据图表?Wren AI独家实践指南

用自然语言问数据库: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、图表和文字洞察。

它由三个核心模块组成:

  1. 语义层(Semantic Layer)
    把数据库里的表、字段、关联关系翻译成人类语言,并告诉大模型“这里有什么、该怎么算”。
  2. 大模型路由(LLM Router)
    支持 OpenAI、Gemini、Claude、DeepSeek、Ollama 等十几种模型,自动挑选或回退,确保生成 SQL 的准确性。
  3. 应用接口(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 连接数据源

  1. 点击左侧 “Connections” → “Add Connection”。
  2. 选择 DuckDB → 填路径(默认已预置 ecommerce.duckdb)。
  3. 保存后,系统会自动扫描表结构,生成语义模型(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 天每天的订单金额折线图”

系统会:

  1. 生成 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;
    
  2. 运行 SQL 并返回折线图
  3. 给出 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

  1. 打开 Settings → API Keys → Generate
  2. 复制 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:

  1. 语义层兜底:所有指标提前定义,模型只能调用,不能创造。
  2. 执行前校验:系统会用 SQL Parser 检查语法,再用数据库执行计划验证表和字段存在。
  3. 白名单模式:管理员可关闭“自由提问”,只允许问预设问题模板。

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. 下一步:从“能问”到“敢问”

  1. 持续迭代语义层
    每周花 30 分钟 review 新增字段,保持模型新鲜。
  2. 建立问题字典
    把高频问题整理成“官方问法”,减少同义反复。
  3. 监控准确率
    在后台打开 “Query Log”,每周抽样 20 条人工验证,准确率低于 85 % 及时调模型或改语义。

9. 结语

Wren AI 把“写 SQL”的门槛降到“说话”的级别,但背后的严谨性并没有打折:

  • 语义层保证指标口径统一
  • 多模型路由保证生成质量
  • 开放 API 让开发者能二次创造

如果你厌倦了“提需求 → 等排期 → 返工”的循环,不妨花 3 分钟本地跑一遍,再花 1 小时把公司最核心的 10 个指标搬进语义层。
剩下的,就交给一句自然语言吧。


立即体验

退出移动版