第 5 节:项目介绍 - Text-to-BI 系统
阅读时间:约 7 分钟
难度级别:进阶
前置知识:了解 Vibe Coding 基本概念
本节概要
通过本节学习,你将了解:
- Text-to-BI 系统的业务背景和解决的问题
- 系统的核心功能和技术特性
- 完整的技术栈选型和架构概览
- 项目的创新点和学习价值
- 使用 Vibe Coding 开发的效率提升
引言
从本节开始,我们将深入介绍一个完全使用 Vibe Coding 方式开发的实战项目:Text-to-BI 系统。这是一个让用户通过自然语言查询数据的智能商业智能系统。
🎯 项目背景
问题场景
在传统的数据分析场景中,业务人员想要查询数据通常需要:
- 找技术人员:描述需求
- 等待开发:技术人员编写 SQL
- 反复沟通:确认查询结果是否符合预期
- 重复流程:每次新需求都要重复上述过程
这个流程效率低下,而且技术人员的时间被大量占用在简单的数据查询上。
解决方案
Text-to-BI 系统让业务人员可以:
用户输入:"统计各部门的员工数量"
↓
系统自动:生成 SQL → 执行查询 → 展示结果 → 提供分析
↓
用户获得:完整的数据报表和业务洞察
核心价值:
- ⚡ 即时响应:秒级返回查询结果
- 🎯 零门槛:无需学习 SQL
- 🤖 智能分析:自动提供数据洞察
- 📊 可视化:友好的表格展示
🌟 功能特性
1. 自然语言查询
用户可以用日常语言提问:
✅ "统计员工总数"
✅ "按性别统计员工数量"
✅ "显示各部门的员工分布"
✅ "查询2020年入职的员工"
2. 智能 SQL 生成
系统自动将自然语言转换为 SQL:
-- 用户:"统计各部门的员工数量"
-- 系统生成:
SELECT
dept_name,
COUNT(*) as employee_count
FROM employees
GROUP BY dept_name
ORDER BY employee_count DESC
3. 实时流式输出
查询过程实时展示,用户可以看到:
🔍 查询分析
↓
📝 生成的 SQL
↓
📊 查询结果
↓
💡 数据分析
4. 数据可视化
结果以清晰的表格形式展示:
| 部门 | 员工数量 |
|---|---|
| 技术部 | 150 |
| 销售部 | 120 |
| 市场部 | 80 |
5. 智能分析
AI 自动提供业务洞察:
**分析**
- 技术部员工最多,占总数的 42.9%
- 销售部和市场部员工数量相对均衡
- 建议关注技术部的人员管理和团队协作
**建议**:考虑优化部门间的人员配置
📸 系统截图
首页
系统提供两个核心功能入口:
- AI 聊天:通用对话功能
- AI 数据分析:Text-to-BI 查询
AI 聊天功能
支持与 AI 进行自然对话,可以:
- 咨询技术问题
- 讨论业务需求
- 获取建议和指导
AI 数据分析
输入自然语言问题,系统实时展示:
- 查询意图分析
- 生成的 SQL 语句
- 查询执行过程
最终展示:
- 格式化的数据表格
- 智能的数据分析
- 可操作的业务建议
🏗️ 技术架构概览
技术栈
后端:
Python 3.11
├── FastAPI # Web 框架
├── Agno # AI Agent 框架
├── CubeJS # 数据建模和查询
└── SQLite # 数据存储
前端:
Vue 3 + TypeScript
├── Vite # 构建工具
├── Naive UI # UI 组件库
├── Axios # HTTP 客户端
└── Marked # Markdown 渲染
AI 服务:
DeepSeek API # 大语言模型
系统架构
┌─────────────┐
│ 用户界面 │ (Vue 3)
└──────┬──────┘
│ HTTP/SSE
┌──────▼──────┐
│ FastAPI │
│ 后端服务 │
└──────┬──────┘
│
┌───┴───┐
│ │
┌──▼──┐ ┌─▼────┐
│Agno │ │CubeJS│
│Agent│ │ API │
└──┬──┘ └─┬────┘
│ │
│ ┌──▼──┐
│ │SQLite│
│ └─────┘
│
┌──▼────┐
│DeepSeek│
│ API │
└────────┘
核心流程
1. 用户输入自然语言问题
↓
2. FastAPI 接收请求
↓
3. Agno Workflow 启动
↓
4. CubeJS Agent 分析问题
↓
5. 生成 CubeJS 查询 JSON
↓
6. 调用 CubeJS API 获取 SQL
↓
7. 执行 SQL 查询获取数据
↓
8. 格式化结果为 Markdown
↓
9. Result Formatter Agent 分析数据
↓
10. 流式返回给前端
↓
11. 前端实时渲染展示
💡 核心创新点
1. Workflow 编排
使用 Agno Workflow 将复杂的查询流程分解为多个步骤:
workflow = Workflow(
name="TextToBIWorkflow",
steps=[
cubejs_agent, # 步骤1:生成查询
get_sql_and_execute, # 步骤2:执行查询
format_results, # 步骤3:格式化结果
result_formatter, # 步骤4:分析数据
]
)
优势:
- 每个步骤职责清晰
- 易于调试和优化
- 支持流式输出
- 可以灵活扩展
2. 专业 Agent
创建专门的 CubeJS Agent,理解数据模型:
agent = Agent(
name="CubeJSExpert",
model=DeepSeek(id="deepseek-chat"),
instructions="""
你是 CubeJS 查询专家。
可用的数据模型:
- employees: 员工信息
- measures: total_employees
- dimensions: gender, dept_name
生成标准的 CubeJS REST API 查询 JSON。
"""
)
优势:
- 专注于特定领域
- 提高查询准确性
- 减少错误率
3. 流式响应
使用 Server-Sent Events (SSE) 实现实时输出:
async def stream_workflow():
for event in workflow.run(query, stream=True):
if event.content:
yield f"data: {json.dumps(event.content)}\n\n"
优势:
- 用户体验好
- 实时反馈
- 减少等待焦虑
4. CubeJS 集成
使用 CubeJS 作为数据层:
# employees.cube.yml
cubes:
- name: employees
sql: SELECT * FROM employees
measures:
- name: total_employees
type: count
dimensions:
- name: gender
sql: gender
type: string
优势:
- 统一的数据模型
- 查询优化
- 缓存支持
- 权限控制
适用场景
这个项目的技术和方法可以应用于:
企业 BI 系统
- 销售数据分析
- 运营数据查询
- 财务报表生成
数据平台
- 自助查询服务
- 数据探索工具
- 报表生成系统
AI 应用
- 智能客服
- 知识问答
- 文档分析
本节小结
本节我们全面了解了 Text-to-BI 系统:
- 业务价值:解决了传统 BI 系统效率低下的问题,让业务人员可以直接用自然语言查询数据
- 核心功能:自然语言转 SQL、智能查询执行、实时流式输出、数据可视化、智能分析
- 技术架构:采用 FastAPI + Agno + CubeJS + Vue 3 的现代技术栈
- 创新点:Workflow 编排、专业 Agent、流式响应、CubeJS 集成四大亮点
- 开发效率:使用 Vibe Coding 开发仅需 3 天,相比传统方式效率提升约 5 倍
思考与练习
思考题
- 在你的工作中,有哪些场景可以应用类似的自然语言查询系统?
- 如果要扩展这个系统支持更复杂的查询(如多表关联、子查询),你会如何设计?
- 除了数据查询,这种 AI + Workflow 的架构还可以应用在哪些场景?
实践练习
-
需求分析:
- 列出你所在公司/项目中常见的数据查询需求
- 分析哪些适合用自然语言查询
- 评估实现的技术难度
-
技术调研:
- 研究 CubeJS 的官方文档
- 了解 Agno 框架的基本用法
- 对比其他类似的技术方案
-
原型设计:
- 画出你理想中的 Text-to-BI 系统界面
- 设计 3-5 个典型的查询场景
- 思考如何优化用户体验