第 5 节:项目介绍 - Text-to-BI 系统

0 阅读6分钟

第 5 节:项目介绍 - Text-to-BI 系统

阅读时间:约 7 分钟
难度级别:进阶
前置知识:了解 Vibe Coding 基本概念

本节概要

通过本节学习,你将了解:

  • Text-to-BI 系统的业务背景和解决的问题
  • 系统的核心功能和技术特性
  • 完整的技术栈选型和架构概览
  • 项目的创新点和学习价值
  • 使用 Vibe Coding 开发的效率提升

引言

从本节开始,我们将深入介绍一个完全使用 Vibe Coding 方式开发的实战项目:Text-to-BI 系统。这是一个让用户通过自然语言查询数据的智能商业智能系统。

🎯 项目背景

问题场景

在传统的数据分析场景中,业务人员想要查询数据通常需要:

  1. 找技术人员:描述需求
  2. 等待开发:技术人员编写 SQL
  3. 反复沟通:确认查询结果是否符合预期
  4. 重复流程:每次新需求都要重复上述过程

这个流程效率低下,而且技术人员的时间被大量占用在简单的数据查询上。

解决方案

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%
- 销售部和市场部员工数量相对均衡
- 建议关注技术部的人员管理和团队协作

**建议**:考虑优化部门间的人员配置

📸 系统截图

首页

首页.png

系统提供两个核心功能入口:

  • AI 聊天:通用对话功能
  • AI 数据分析:Text-to-BI 查询

AI 聊天功能

AI聊天.png

支持与 AI 进行自然对话,可以:

  • 咨询技术问题
  • 讨论业务需求
  • 获取建议和指导

AI 数据分析

AI数据分析-1.png

输入自然语言问题,系统实时展示:

  • 查询意图分析
  • 生成的 SQL 语句
  • 查询执行过程

AI数据分析-2.png

最终展示:

  • 格式化的数据表格
  • 智能的数据分析
  • 可操作的业务建议

🏗️ 技术架构概览

技术栈

后端:

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 系统:

  1. 业务价值:解决了传统 BI 系统效率低下的问题,让业务人员可以直接用自然语言查询数据
  2. 核心功能:自然语言转 SQL、智能查询执行、实时流式输出、数据可视化、智能分析
  3. 技术架构:采用 FastAPI + Agno + CubeJS + Vue 3 的现代技术栈
  4. 创新点:Workflow 编排、专业 Agent、流式响应、CubeJS 集成四大亮点
  5. 开发效率:使用 Vibe Coding 开发仅需 3 天,相比传统方式效率提升约 5 倍

思考与练习

思考题

  1. 在你的工作中,有哪些场景可以应用类似的自然语言查询系统?
  2. 如果要扩展这个系统支持更复杂的查询(如多表关联、子查询),你会如何设计?
  3. 除了数据查询,这种 AI + Workflow 的架构还可以应用在哪些场景?

实践练习

  1. 需求分析

    • 列出你所在公司/项目中常见的数据查询需求
    • 分析哪些适合用自然语言查询
    • 评估实现的技术难度
  2. 技术调研

    • 研究 CubeJS 的官方文档
    • 了解 Agno 框架的基本用法
    • 对比其他类似的技术方案
  3. 原型设计

    • 画出你理想中的 Text-to-BI 系统界面
    • 设计 3-5 个典型的查询场景
    • 思考如何优化用户体验

上一节第 4 节:Vibe Coding 的工具链
下一节第 6 节:技术架构与设计思路