20分钟本地跑通 WrenAI:自然语言查数据库,零门槛让 AI 替你写 SQL
【免费下载链接】WrenAIGenBI (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, such as BigQuery, Snowflake, PostgreSQL, ClickHouse, Amazon Redshift, Databricks and more.项目地址: https://gitcode.com/GitHub_Trending/wr/WrenAI
周三下午四点,运营把一句“这周哪个城市退款最多?”甩进群里,你盯着库半天没写出 SQL。WrenAI 就是为这一刻准备的开源工具:它让 AI 编码助手把自然语言查数据库,翻译成受治理的 SQL 并直接跑通。读完这篇,你会在自己电脑上装好 WrenAI CLI,连上数据库,用一句话问出结果,还会知道答案不准时去哪修。
WrenAI 的开放上下文层:上层 Agent 发问,中间 MDL / Memory / 受治理访问做语义与检索,下层执行到 22+ 数据源
一、先认识它:一句话原理和适合谁
这一节解决“它到底是不是你要找的东西”。WrenAI 不只是一个翻译器,而是把三件事拼在一起:
- MDL(Modeling Definition Language):用 YAML 描述“数据意味着什么”——表、列、关系、指标、视图,而不只是“数据存在哪”。Agent 读 MDL 写 SQL,而不是对着原始 schema 瞎猜。
- Memory 记忆层:把确认过的“自然语言→SQL”对存进项目文件,下次类似问题直接召回,越用越准。
- 受治理执行:查询先过 dry-plan 校验、行限制和结构化报错,避免“自信地给出错误结果”。
它适合:想让 AI 产出可信BI(答案和看板,而不只是像模像样的 SQL)的人、业务定义散落在数据库之外导致 Agent 老是写错的团队、以及要跨多种数据源用一个统一治理面的平台。如果只是想给单个 CSV 画一张图,或乐意让 Agent 无治理地猜 SQL,可以先不用它。
📌原理:schema 告诉 Agent“有什么”,MDL 告诉它“意味着什么”,记忆告诉它“什么行得通”。三层叠起来,答案才可信而非仅“看起来对”。
二、装环境:一份清单加一条连续流程
这一节把“需要什么”和“怎么拿到”合并成一路走完。前置只有 3 样:Python 3.11+、一个 AI 编码助手(Claude Code / Cursor / Cline 等)、以及 Git。不需要 Docker,也不需要单独起向量库——记忆用的是本地 LanceDB 索引。
先建独立虚拟环境,再装包,最后验证版本:
python3 -m venv ~/.venvs/wren && source ~/.venvs/wren/bin/activate pip install "wrenai[memory,main]" # 核心含 DuckDB;memory=记忆检索,main=交互+浏览器配置表单 wren version预期结果:终端打印出wrenai x.y.z版本号,说明 CLI 可用。
如果你的网络访问 PyPI 较慢,加清华镜像:
pip install "wrenai[memory,main]" -i https://pypi.tuna.tsinghua.edu.cn/simple💡技巧:想要 Postgres / BigQuery / Snowflake 等连接能力,在方括号里追加对应 extra,例如
wrenai[memory,main,postgres]。
接着给 AI 助手装一个发现桩,让它学会如何驱动这个 CLI:
npx skills add Canner/WrenAI # 自动识别已安装的 Agent,只装一个 wren 技能预期结果:日志显示在~/.claude/skills/wren/SKILL.md(或对应助手目录)落盘一个约 50 行的桩文件。
三、跑起来:配连接、建项目、验证连通
这一节把“配置 + 启动 + 验证”并成一条线,全程 3 处关键配置。
1)配连接档案(profile)。档案存数据库连接信息,独立于项目,避免凭据混进共享文件。用浏览器表单最省事:
wren profile add jaffle-shop --ui # 打开浏览器表单,数据源选 duckdb,填库所在目录预期结果:表单提交后终端提示档案已创建。
2)验证档案:
wren profile list # 查看,* 标记当前活动档案 wren profile debug # 试连,敏感字段自动打码预期结果:jaffle-shop出现在列表且带*,debug 无报错。
3)初始化项目并绑定档案。项目目录里放 MDL 与业务上下文:
mkdir -p ~/jaffle-wren && cd ~/jaffle-wren wren context init # 生成 wren_project.yml、models/、views/、knowledge/ wren context set-profile jaffle-shop # 把本项目锁死到该连接 wren context build # 把 YAML 编译成 target/mdl.json预期结果:目录下出现wren_project.yml、models/、knowledge/,且target/mdl.json生成成功。
⚠️注意:
wren_project.yml里的catalog/schema是Wren 命名空间,和你数据库里的 catalog/schema 无关,保持默认wren/public即可;每张表的真实库位置写在各 model 的table_reference里。
参考 jaffle_shop 示例项目 的完整结构,以及 quickstart 文档 里的逐步说明。
四、用起来:从一句提问到一张结果
这一节演示一个真实业务问题端到端走完。假设你已按示例把customers、orders两张表纳入 MDL(每张表一个models/<表>/metadata.yml),并写好relationships.yml里的关联。
在 AI 助手里直接问:
有多少客户下过不止一单?
助手背后按 usage 工作流 走 5 步:
wren memory fetch -q "客户 下过 不止一单" # 检索相关表/列/关系 wren memory recall -q "客户 下过 不止一单" # 召回历史相似问法 # Agent 基于 MDL 对象写 SQL wren dry-plan --sql 'SELECT COUNT(DISTINCT customer_id) FROM "orders" ...' # 先校验计划 wren --sql 'SELECT COUNT(DISTINCT customer_id) FROM "orders" GROUP BY ...' -o table wren memory store --nl "客户下过不止一单" --sql "SELECT ..." # 存下这次的 NL→SQL 对预期结果:-o table打印出结果表;store之后,下次问类似问法,recall就能直接命中这条已验证例子。
💡技巧:每存一条确认过的问法,记忆检索就更准。把
knowledge/rules/里写清“revenue 永远指 order 的 amount,不是某个支付渠道列”,能显著减少歧义。
五、用得好:两处调优加一张故障对照表
这一节解决“答案时准时不准、出错怎么定位”。
调优两处。第一是描述质量:给models/*/metadata.yml的properties.description补上业务含义,描述越具体,memory fetch命中越准。第二是规则约束:在knowledge/rules/里用##分节写命名约定与查询规则(比如“时间过滤一律用order_date,不要用created_at”)。改完任何文件,重建并重新索引:
wren context validate && wren context build && wren memory index预期结果:三步均无报错,索引重建完成。
高频故障对照:
| 现象 | 大概率原因 | 处理 |
|---|---|---|
| 查询连不上库 | 档案url填错 / 连错环境 | wren profile debug看打码后连接字段 |
| 结果偏但 SQL 不报错 | 关系或指标定义错 | 修relationships.yml/ model 描述后wren memory index |
| 引用了 MDL 外的表被拒 | strict_mode开启 | 把该表纳入 MDL,或调整策略 |
memory index首跑卡几十秒 | macOS 首次扫描原生库(一次性) | 属正常,之后再跑即正常 |
❌常见错误:答案不准时先怀疑“模型不够聪明”,其实 8 成是 MDL 描述或关系缺失。先补上下文,再谈别的。
六、走下去:文档、入口与贡献
这一节给你三条继续深入的门。
- CLI 全量参考:core/wren/docs/cli.md,含
wren memory/wren cube/wren genbi/wren serve mcp全部子命令。 - 概念与设计:什么是上下文、MDL 概念、记忆系统。
- 进阶能力:把答案变成可分享看板用 GenBI(指南),或把项目暴露成 MCP 服务给桌面端 Agent(
wren serve mcp)。
想上手就打开 skills 安装脚本 对应文档看交付模型;想贡献,从仓库的good first issue标签和 CONTRIBUTING 指南 入手。
现在轮到你了:把你手上任意一个库接成一个 profile,挑一句你天天要问的业务问题丢给 AI 助手,让 WrenAI 替你写 SQL 并跑通——再花两分钟,把这次确认的问法store进记忆,让下一次更准。
【免费下载链接】WrenAIGenBI (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, such as BigQuery, Snowflake, PostgreSQL, ClickHouse, Amazon Redshift, Databricks and more.项目地址: https://gitcode.com/GitHub_Trending/wr/WrenAI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考