Quasar 的产品定位是多数据源计算存储智能代理——为 Agent 提供数据底座。把散落在各处的数据(数据库/数仓/数据湖/对象存储/消息/API/文件)统一接入、自动清洗、灵活转化、高性能计算,以 AI Agent 为自然语言操作入口。向上对 Agent 暴露结构化数据接口(OneID 画像宽表 / 圈人结果 / 聚合指标),让上层 Agent 无需关心数据从哪来、怎么算——只管基于高质量的画像和标签做决策。支持计算存储分离(计算集群弹性扩缩,Doris 存算分离)也支持一体化部署(单机开箱即用),默认存储引擎为 Apache Doris。在此之上,多租户隔离、实时 ID-Mapping / OneID 归一、统一画像宽表、圈人激活、数据治理与隐私合规都是开箱功能。并带一套对标 Twilio Segment 的控制台作为应用层(连接 → 用户 → 对象 → 客户 → 触达 → 协议 → 隐私 → 监控 → 知识库 → 应用 → 分析)。
本地全栈即跑、登录即用:控制台带强制登录门禁(团队成员即登录账号,挂在 workspace 下);右上角常驻智能助手(DeepSeek 对话 + 桥接 MCP 工具 + 后台任务);可视化编排走真实 Apache Airflow 调度;数据源覆盖 44 个主流连接器(数据库/数仓/数据湖/对象存储/消息/查询引擎);并内置知识库(云盘式多模态存储)、应用市场、分析看板(NL 一句话生成图表/看板)。
名字含义:Agent —— DeepSeek 驱动的自然语言圈人/查询与 MCP 工具,让 LLM 安全地操作数据平台(候选 DSL 必须过校验层,绝不直出 SQL);DataHub —— 多源数据接入的归一中枢,把小程序/企微/表单/App/批量导入等多渠道数据,实时归一为 OneID 并打宽成统一画像。
官网:https://quasar-site-gray.vercel.app · 产品介绍(在线文档):quasar-site-gray.vercel.app/product.html(Quickstart → 各模块 → 语义层 → 场景案例 → FAQ → API,含真实截图) · 仓库:github.com/MrRobot2658/Quasar
控制台为对话形态:左侧会话 · 中间智能助手(Ask / Agent 双模式)· 右侧「数据底座」实时概览 + 「知识库」LLM 上下文策展面板。
设计文档(均在
docs/下,按一级目录分模块):1 平台底座 + 9 业务模块 + 3 扩展菜单(知识库 / 应用 / 分析),各含 详细/技术设计 + TODOs。实时链路架构/规模 → 00-platform;ID-Mapping 画像伸缩 / MCP 调用链路 → 02-unify。· OpenAPI · 前端说明
目标架构(数据链路层级,自上而下;详见 00-platform)。本地 dev 用 ID-Mapping 服务 + MySQL 模拟 Flink/Doris;StreamPark / DolphinScheduler / Doris 为生产目标组件。
图 1 · 数据链路层级(接入 → Kafka → Flink → MySQL → Doris)
┌─ L1 · 接入层(数据入口)
│ 小程序 / 企微 / 表单 / App / 批量导入 API
│ 统一封装为 UserEvent(tenant_id + channel + link_keys + properties)
▼
┌─ L2 · Kafka 消息层(事件总线)
│ tenant-{id}-events(大租户独立 Topic) · shared-tenant-events(微租户共享)
│ 按 tenant_id / channel_id 分区,保证同一用户事件有序
▼
┌─ L3 · Flink 实时计算层(StreamPark 管控)
│ Job-1 ID-Mapping(OneID 识别 / merge) → Job-2 画像聚合 → Job-3 宽表打宽
│ 输出 enriched-events,并行写入下游存储
▼
┌─ L3+ · Redis 热层(旁路,< 5ms 点查)
│ Flink Job-1 同步写入 channel → one_id 映射,供实时识别 / 热点查询
▼
┌─ L4 · MySQL 业务冷层(持久化 / 审计)
│ one_id 发号器 · id_mapping 离线导入 · merge_log 合并审计 · 租户配置
▼
└─ L5 · Doris OLAP 层(画像 / 圈选)
id_mapping · user_profile · user_wide
大租户独立库 + BE Tag,小租户共享库 tenant_id 分区
── 查询层(只读)── SQL Engine + 数据 Agent ← 业务应用 / MA / BI;模板查询 → Doris / Redis
── 调度管控层(K8s)── StreamPark:Flink Job 启停扩缩 · DolphinScheduler:离线导入/批标签/运维
(dev 用 Apache Airflow 承载「可视化编排 Pipelines」的真实调度)
组件与端口
| 组件 | 端口 | 说明 |
|---|---|---|
| Nginx 网关 | 8080 | 首页 + Quasar 控制台 + API 路由代理 |
| Quasar 控制台(前端) | 8080/console/ | 对标 Segment 的 React SPA(生产);dev 用 5173 |
| SQL Engine | 8002 | OLAP 查询层 + Agent(模板 SQL + DSL 圈人 + NL 圈人 + 只读 MCP,与 Doris 解耦) |
| ID-Mapping | 8001 | 实时合并服务 API(OneID 识别 / merge) |
| MySQL 8 | 3308 | 业务库:id_mapping / user_profile / user_groups / merge_log / object_* |
| Redis 7 | 6381 | OneID 热缓存 |
| Kafka / Kafka UI | 9094 / 8083 | 多租户事件总线 / Topic 可视化 |
| Airflow | 8088 | 可视化编排 Pipelines 的真实调度后端(admin/admin),SQL Engine 经其 REST API 触发 DAG |
| 智能助手 assistant | 8004 | 多智能体:路由 → 数据查询(MCP)/分析(建图表看板)/任务/通用 |
前端技术栈:React 18 + Vite + TailwindCSS。数据链路:浏览器 /api/* → (dev: vite 代理 / 生产: nginx)→ SQL Engine :8002 → MySQL,毫秒级实时查询。前端信息架构(IA)完全对标 Segment。
控制台按 Segment 的顶层分区组织。标注说明:真实 = 走 SQL Engine→MySQL 的实时查询;Mock = 纯前端演示数据(页面右上有「Mock 数据」角标),后端尚未接入(路线图)。
首页总览看板:核心 KPI 卡(用户/客户/线索/订单数、GMV、线索转化率)+ 关键分布图表(各对象量、订单状态、线索阶段、客户行业,点击可下钻明细)+ 快捷入口(创建受众 / 接入数据源)。复用「分析」的 KPI 与可下钻图表组件。
| 功能 | 英文 | 状态 | 说明 |
|---|---|---|---|
| 数据源 | Sources | 真实 |
数据源卡片列表;可视化 ETL:CSV/粘贴 → 字段映射(自动/手动) → 预览 → 导入到任意对象,可建关系 |
| 数据源目录 | Source Catalog | 真实 |
44 个主流连接器平铺成卡片(按 8 类分组:数据库/数仓/数据湖/查询引擎/对象存储/流/文件/API),点卡片填名即建数据源。如 MySQL/PostgreSQL/ClickHouse/MongoDB/Snowflake/BigQuery/Iceberg/Delta/S3/Kafka/Trino… 目录级(连接逻辑为占位适配器) |
| 可视化编排 | Pipelines (Flow) | 真实 |
拖拽节点连线编排 ETL → 保存为管道 |
| 管道 | Pipelines | 真实 |
管道列表(行表)→ 详情;点「执行」经 Apache Airflow 真实触发 DAG(动态多任务展开);详情含拓扑、执行历史、暂停/恢复调度 |
| 数据源详情 | Source Detail | Mock |
Write Key、Schema 事件、实时事件流 Debugger |
| 目的地 | Destinations | Mock |
广告/MA/分析/Webhook 目录,把数据激活到下游 |
| Reverse ETL | Reverse ETL | 真实 |
以数仓为源的任务,run-now 触发 + 运行记录(调度模拟) |
| 数据仓库 | Warehouses | 真实 |
连接器目录连数仓(Doris/Snowflake/Iceberg…),同步状态 |
| Functions | Functions | Mock |
自定义代码在数据源/目的地侧转换数据 |
| 功能 | 英文 | 状态 | 说明 |
|---|---|---|---|
| 用户档案 | Profiles | 真实 |
按标识符/属性检索用户宽表(distinct OneID),支持筛选器全部能力 |
| 档案详情 | Profile Detail | Mock |
单用户:身份标识、特征 Traits、事件时间线 |
| 身份解析 | Identity Resolution | Mock |
channel→one_id 合并规则(唯一性/上限/merge 策略) |
| 计算特征 | Computed Traits | 真实 |
标签体系与覆盖人数(来自 /tags) |
| SQL 特征 | SQL Traits | Mock |
在数仓上跑自定义 SQL 生成特征 |
| 预测 | Predictions | Mock |
购买倾向/流失/LTV 等预测模型 |
| 档案同步 | Profiles Sync | Mock |
把统一档案持续同步回数仓 |
| 关联对象 | Objects | 真实 |
客户/订单/商品/门店主数据浏览(同一筛选器,锁定对象) |
| 功能 | 英文 | 状态 | 说明 |
|---|---|---|---|
| 受众 | Audiences | 真实 |
已保存人群包列表(来自 /segments) |
| 创建受众 | Build Audience | 真实 |
统一筛选器:多条件、AND/OR、跨对象链式多跳 + 边条件、自然语言圈人;实时预估人数 + SQL 预览;存为受众 |
| 受众详情 | Audience Detail | Mock |
规模趋势、连接的目的地 |
| 旅程 | Journeys | Mock |
多步自动化旅程与转化 |
| 群发 | Broadcasts | Mock |
一次性 Push/短信/EDM 触达 |
埋点计划 Tracking Plans(事件 Schema 校验)· 违规 Violations(类型/必填校验)· 转换 Transformations(入库前重命名/删除/映射)。
数据管控 Data Controls(PII 检测与哈希/阻断)· 同意管理 Consent(分类与厂商映射)· 删除与抑制 Deletion & Suppression(GDPR 请求)。
投递概览 Delivery(吞吐/成功率/P95/趋势/数据源健康)· 告警 Alerts · 事件日志 Event Delivery。
云盘式多模态文件存储:上传文档/图片/音视频/压缩包(按类型自动归类 + 图片缩略图);虚拟目录、搜索、类型筛选;文件详情可预览/下载;可关联到对象(user/account/order…,上传时或详情页增删关联)。文件字节存盘(kb_data 卷),元数据/关联落库。
控制台右栏「知识库」按卡帕西 LLM 知识库管理模式组织(上下文 = RAM、文件 = 磁盘):分域文件夹承载多模态资料,文档为知识主干;每个文件/整域可一键策展进/出 LLM 上下文(持久化 kb_files.in_context),顶部上下文预算条按 token_estimate 实时估算工作记忆占用。接口:GET /api/kb/files、POST /api/kb/files/{fid}/context。
应用市场:按类别平铺第三方应用,连接/断开状态按租户持久化。默认收录 CRM(Salesforce / HubSpot / 销售易)· 广告(广点通 / 巨量引擎 / 百度营销)· 消息(短信 / 邮件 / 企业微信 / 钉钉)· 分析(神策 / GA4)。
- 看板列表:内置 3 个画像看板(用户画像 / 客户画像 / 转化率ROI,含 KPI 卡 + 多图)+ 自定义看板。
- NL 一句话生成:描述一句话(如「做一个电商运营看板,看订单和商品」)→ DeepSeek 从白名单数据源目录受限选图(LLM 不写 SQL)→ 直接生成看板;进详情可二次编辑(改标题 / 加减图表)。同样支持 NL 生成单个图表。
- 图表下钻:点击任意图表的数据点(柱/饼/线)→ 弹出该点背后的明细记录表。
- 图表库 recharts(柱/线/面/饼),数据源为安全聚合(COUNT / 白名单字段 GROUP BY)。
控制台右上角的对话助手,采用多智能体架构:路由器先判定意图,分派给专职智能体,各有独立系统提示与工具集:
- 数据查询 —— 桥接 41 个只读 MCP 工具(查 schema/受众/对象/画像…)。
- 分析 —— 自然语言创建图表 / 看板(调
/analyst/*/nl落库,回复带「打开看板」直链)。 - 任务 —— 「发布任务」落到 reverse-ETL 调度模拟后台运行。
- 通用 —— 产品介绍/答疑 + 页面导航(无业务工具)。
打开页面:助手默认加载 docs/page-routes.md(全部功能页面路由),用户说「打开/前往 X 页面」即调用 open_page 跳转。回复带「智能体 · X」标识;建好的图表/看板可一键跳转。服务独立(:8004);DeepSeek 不可用时降级。
主动式埋点 Copilot —— 助手不只被动等问:前端埋点采集左侧页面行为,近实时推给助手(POST /observe),经启发式门控 + LLM 判断后主动弹出建议(如任意页面长时间停留会主动问询、空结果时建议放宽条件、报错时帮排查)。两层门控控成本,只产出「建议 + action」不自动写,侧边栏铃铛可免打扰。
控制台强制登录:团队成员(IAM users)即登录账号,挂在 workspace(租户)下;邮箱+密码登录,登录后 workspace 切到该用户租户,右上角显示用户 + 登出。演示账号 admin@acme.com / 密码 demo123(详见「使用规则」)。
通用 General(工作区信息,真实)· 权限管理 Access Management(IAM 成员/角色/团队/邀请,真实)· API 令牌(真实)· 审计日志 Audit Trail(真实)· MCP 设置(展示智能助手可调用的 MCP 工具清单,真实)。
- ID-Mapping
:8001:多渠道实时合并,OneID 发号、merge 审计、画像查询。 - SQL Engine
:8002:模板 SQL、对象/关系 DSL 圈人、自然语言查询(DeepSeek 意图识别 → 模板 SQL)、可视化 ETL 导入、只读 MCP。
# 0. 克隆
git clone https://github.com/MrRobot2658/Quasar.git # 或 SSH: git@github.com:MrRobot2658/Quasar.git
cd Quasar
# 1. 启动全栈(含前端构建)
# MySQL/Redis/Kafka/SQL Engine/ID-Mapping/Nginx/Airflow/智能助手 + 前端生产构建
docker compose up -d --build
docker compose ps # 等待全部 healthy(Airflow 首次 db migrate 稍慢)
bash scripts/apply_migrations.sh # 应用增量迁移(含登录/知识库/应用/分析等表与演示数据)
# 2. 灌入演示数据(多渠道合并模拟)
bash scripts/simulate_kafka.sh # 走完整 Kafka 链路(推荐,含租户 1001/1002)
# 或:bash scripts/simulate_via_api.sh # 直接调 API,跳过 Kafka
# 3. 打开控制台并登录
# http://localhost:8080/console/ → admin@acme.com / demo123
# (可选)前端开发态热更
cd frontend && npm install && npm run dev # → http://localhost:5173/- 前端已并入 compose:
frontend服务生产构建 →frontend_dist卷,由 nginx 托管于http://localhost:8080/console/,无需单独启动。仅改前端时再用 vite:5173(/api/*自动代理到 SQL Engine:8002)。 - DeepSeek(自然语言查询):复制
.env.example→.env,填DEEPSEEK_API_KEY(已 gitignore)。 - 接真实 Doris:设
OLAP_BACKEND=doris OLAP_HOST=doris-fe OLAP_PORT=9030。 - 按规模模拟集群:
bash scripts/scale-up.sh {dev|large|xlarge}(<1万 / 1亿 / 2亿)。
访问入口
| 用途 | 地址 |
|---|---|
| Quasar 控制台(开发态) | http://localhost:5173/ |
| Quasar 控制台(生产/网关) | http://localhost:8080/console/ |
| SQL Engine Swagger | http://localhost:8002/docs |
| ID-Mapping Swagger | http://localhost:8001/docs |
| Airflow UI | http://localhost:8088/ · 账号 admin / admin |
| MySQL | localhost:3308 · db dataagent · user dataagent / dataagent123 |
真实 vs Mock:带「Mock 数据」角标的页面是前端演示,未接后端、改动不落库。真实数据页(数据源导入、用户档案 Profiles、受众 Audiences、计算特征)走 SQL Engine→MySQL,操作即落库。
登录:控制台强制登录。演示账号(密码均 demo123):admin@acme.com、zhang.tech@acme.com、zhao.sales@acme.com、sun.mkt@acme.com 等(属技术部/销售部/市场部)。登录后 workspace 自动切到该用户租户。
多租户:顶栏 Workspace 下拉切换租户(1001/1002);所有查询自动按 tenant_id 隔离。
分析看板(NL 生成):「分析 › 看板列表」点「新建看板」→ 一句话描述 → 生成并创建 → 进看板可改标题、加减图表;图表点数据点可下钻看明细。内置三个画像看板开箱即用(数据来自演示数据)。
知识库:「知识库」上传任意文件,可在上传/详情里关联到对象记录(如 account/A3001);nginx 已放开 /api 上传体积上限至 200MB。
智能助手(多智能体):右上角「智能助手」对话。按意图自动分派:查数据(MCP 工具)、建图表/看板(如「做一个电商运营看板」→ 自动建好并给跳转链接)、发布后台任务、打开页面(如「打开知识库」「带我去转化率ROI看板」→ 自动跳转)、通用答疑。需在 .env 配 DEEPSEEK_API_KEY。
可视化编排 Pipelines(Apache Airflow 调度)
「连接 › 可视化编排」拖拽节点连线 → 保存为管道;在「管道 Pipelines」页点执行,SQL Engine 通过 Airflow REST API 触发 DAG 真实运行(管道页顶部有 Airflow 连接状态条 + 「打开 Airflow」入口)。
- 调度后端:单容器 Airflow(scheduler + webserver,SQLite + SequentialExecutor),UI
http://localhost:8088(admin/admin)。 - 承载 DAG:
airflow/dags/dataagent_pipeline.py—— 一个参数化通用 DAG,所有管道运行共用;触发时把tenant_id / pipeline_name / 节点列表放进dag_run.conf。DAG 用动态任务映射(.expand)在运行时按 conf 的节点数展开成多任务:plan → run_node × N → finish,每个画布节点对应一个 task 实例(无需为每个管道单独建 DAG)。画布连线顺序(edges)暂未体现为任务依赖,mapped 任务并行执行。 - 接口:
POST /api/connections/pipelines/{id}/execute触发;GET /api/connections/scheduler/health查连通性。Airflow 不可达时执行会优雅降级为本地模拟(不报错)。 - 配置(
docker-compose.yml的 sql-engine 环境变量):AIRFLOW_API_URL/AIRFLOW_USER/AIRFLOW_PASSWORD/AIRFLOW_DAG_ID/AIRFLOW_UI_URL。 - 改/加 DAG:编辑
airflow/dags/下的 py 文件(已挂载进容器),Airflow scheduler 约 30s 内自动加载。 - 生产目标仍是 DolphinScheduler / StreamPark;Airflow 是 dev 下「可视化编排」的真实调度落地。
圈人规则:统一筛选器支持 ① 多条件 + AND/OR ② 跨对象链式多跳关联(如 用户→下单→商品)③ 关系边条件 ④ 自然语言(中文描述 → DSL)。查询前可「预估人数」并预览生成的 SQL,满意后「存为受众」。
ETL 导入规则:数据源仅 csv/inline 可运行;字段按目标对象类型强转,主键缺失会告警,未知字段直接 400;可在导入时按关系建 object_relations。
常用 API / NL 查询
# 模板查询:按 OneID 查画像宽表
curl -X POST http://localhost:8002/query/profile_by_one_id \
-H "Content-Type: application/json" -d '{"params":{"tenant_id":1001,"one_id":100001}}'
# 自然语言查询(经网关)
curl -X POST http://localhost:8080/nl-query \
-H "Content-Type: application/json" -d '{"question":"查手机号13800138001的用户画像","tenant_id":1001}'
# 渠道 → OneID 映射 / 合并日志
curl http://localhost:8001/mapping/1001/phone/13900001111
curl http://localhost:8001/merge-log/1001核心表:tenants(租户配置)· id_mapping(渠道ID→OneID)· user_profile / doris_user_wide(画像/宽表)· object_*(客户/订单/商品/门店)· user_groups/segments(受众)· merge_log(合并审计)。
停止与清理
docker compose down # 停止
docker compose down -v # 停止并清除数据卷