本文档旨在帮助开发者快速理解 NexQuery AI 的架构设计,并掌握从本地开发到生产部署的完整流程。
NexQuery AI 采用 Monorepo 结构,使用 pnpm workspace 管理所有包。
nexquery-ai/
├── backend/ # [Backend] AdonisJS 6 应用
│ ├── app/ # 核心业务代码
│ │ ├── controllers/ # Http 控制器 (Auth, AI, DataSources...)
│ │ ├── services/ # 业务逻辑服务 (LangChain, Scheduler, FinOps...)
│ │ ├── models/ # Lucid ORM 模型
│ │ └── ...
│ ├── database/ # 迁移 (migrations) 与 种子 (seeders)
│ └── start/ # 路由与应用启动钩子
├── frontend/ # [Frontend] Vue 3 + Vite 应用
│ ├── src/
│ │ ├── components/ # UI 组件 (Shadcn + CodeMirror 6)
│ │ ├── pages/ # 路由页面
│ │ ├── stores/ # Pinia 状态管理
│ │ └── ...
├── miniprogram/ # [Mobile] Uni-app 微信小程序
├── packages/shared/ # [Shared] 前后端共享模块
│ ├── src/
│ │ ├── constants/ # 共享常量 (Permissions, Roles)
│ │ └── services/ # 共享逻辑 (CryptoService)
├── docs/ # 项目文档
└── package.json # Monorepo 根配置核心逻辑位于 backend/app/services/lang_chain_service.ts。
- Agentic Mode (SQL/Lucene Agent):
- 触发: 用户选择了具体的数据源。
- 机制: 挂载
ListTables,GetTableSchema,ValidateSql等 Tools。 - Flow: RAG (Schema Retrieval) -> Reasoning -> Tool Execution -> Self-Correction -> SQL Generation。
- General Mode (Chat):
- 触发: 用户选择 "No Context"。
- Logic: 纯粹的 LLM 对话。
- Hybrid Model Strategy:
- Chat Model: 负责推理 (e.g., GPT-4o, DeepSeek-V3)。
- Embedding Model: 负责向量检索 (e.g., text-embedding-3-small, GLM-Embedding)。
- 两者可在
Settings中独立配置,实现成本与性能的最优平衡。
为了控制 AI 成本,系统实现了闭环的 FinOps 监控:
- 计算:
ModelCostService解析 LLM 响应中的usage字段,结合模型单价计算成本。 - 存储: 记录至
ai_usage_logs表。 - 展示:
AiFinOpsController提供聚合 API,供管理端看板展示 Top Consumers 和 成本趋势。
- 传输加密: 前后端通过
API_ENCRYPTION_KEY对敏感 Payload (如 API Key, DB Password) 进行 AES 加密。 - 配置隔离: 生产环境强制开启加密 (
API_ENCRYPTION_ENABLED=true),开发环境可选。 - RBAC: 使用中间件
auth和checkPermission进行路由级权限拦截。
pnpm install本地开发 ASR (语音转文字) 功能需要安装:
- FFmpeg: 用于将浏览器音频转换为符合 AI 供应商要求的格式。
- macOS:
brew install ffmpeg - Ubuntu:
sudo apt install ffmpeg
- macOS:
复制 .env.example 为 .env 并配置:
DB_PASSWORD: 数据库密码AI_API_KEY: 既然是大模型应用,这是必须的 (OpenAI / GLM format)AI_BASE_URL: 模型厂商的 API 地址
推荐按照以下步骤启动,以获得完整的功能支持:
# 1. 启动基础设施
docker compose up -d
# 2. 初始化数据库
pnpm backend:migrate
pnpm backend:seed
# 3. 启动全栈应用
pnpm dev该命令会并行运行后端 (pnpm backend:dev) 和前端 (pnpm frontend:dev)。
生产环境建议使用 Docker Compose 进行全量容器化部署。
# 构建并后台运行
docker compose --profile app up -d --build
# 查看日志
docker compose --profile app logs -f首次部署需初始化数据库结构与默认数据:
# 运行迁移
docker compose --profile app exec backend node ace migration:run --force
# 填充种子数据 (默认账号与权限)
docker compose --profile app exec backend node ace db:seedgit pull
docker compose --profile app down
docker compose --profile app up -d --build
# 如果有数据库变更
docker compose --profile app exec backend node ace migration:run- Q: 为什么前端显示 "Network Error"?
- A: 检查
.env中的VITE_API_URL是否指向了正确的后端地址。开发环境通常是http://localhost:3333。
- A: 检查
- Q: AI 回答很慢?
- A: 检查
AI_TIMEOUT_SEC设置。如果是复杂 Schema,建议调大超时时间(默认 600s)。
- A: 检查
- Q: 只有 General Chat 能用,SQL Agent 报错?
- A: 确保所选的数据源配置正确,并点击了 Settings -> Test Connection 确保连通性。Agent 需要先获取 Schema 才能工作。