AI 原生数据分析工作台

面向物业分析团队建设 AI 原生数据工作台,采用 Clean Architecture / Ports and Adapters 架构,支持自然语言数据分析、结构化意图解析、分析计划生成、流式执行进度、多轮追问和历史上下文保留。接入 LLM Provider、Cube 语义查询、Neo4j 图谱适配和 Redis 队列 + Worker 异步任务链路。

设计起点:分析不是一次回答

这个项目最重要的判断是:数据分析不是“用户问一句,模型答一句”。真实分析更像一段可追踪的任务过程,包含意图、约束、计划、执行、结果、追问和复盘。

Clean Architecture 与工程治理

采用 Clean Architecture / Ports and Adapters 架构,将领域模型、应用用例、基础设施适配器和 Next.js 表现层解耦。接入 LLM Provider、Cube 语义查询、Neo4j 图谱适配、Redis 队列 + Worker 异步任务链路,支撑长时间分析任务。处理超时、降级、AbortSignal 取消、限流、错误语义、权限边界、多轮会话事实错位和结果持久化等工程治理问题。

工程上的关键拆分

  • 把领域模型、应用用例、基础设施适配器和 Next.js 表现层拆开,避免所有 AI 逻辑堆在接口层。
  • 把长时间分析任务放进 Redis 队列和 Worker,前端订阅执行状态,而不是阻塞等待最终答案。
  • 通过 Cube 语义层和 Neo4j 图谱给模型提供结构化上下文,减少纯文本提示词的漂移。
  • 把权限检查放到服务端查询链路,避免 Agent 在生成查询时绕开组织、项目或角色边界。
Intent问题意图、时间边界、组织范围、候选因素
Plan分析计划、执行步骤、工具选择、可视化状态
Run队列任务、流式进度、取消、重试和错误语义
Explain结论、证据、追问、上下文和历史复盘
我避免把 AI 工作台做成同步接口
维度同步聊天框分析工作台
过程用户只能等能看到计划、阶段、进度和失败原因
状态刷新就丢会话、任务和结果持久化
数据模型自己组织上下文语义层、图谱和权限共同约束查询
复盘很难解释为什么这样答保留工具调用、输入参数和中间结论
  1. 解析用户问题,抽取指标、时间、组织、对象和候选因素。
  2. 生成可展示的分析计划,让用户知道系统准备怎么查。
  3. 提交后台执行队列,流式返回阶段状态和关键中间结果。
  4. 把结构化结果、自然语言结论和追问建议一起持久化。
  5. 下一轮追问复用会话上下文,而不是重新开始猜。
analysis-use-case.tsts8 行
type AnalysisUseCase = {
  parseIntent(question: string): Intent;
  buildPlan(intent: Intent, context: BusinessContext): AnalysisPlan;
  authorize(plan: AnalysisPlan, user: UserScope): GuardResult;
  enqueue(plan: AnalysisPlan): AnalysisJob;
  stream(jobId: string): AsyncIterable<ExecutionEvent>;
  summarize(result: QueryEvidence[]): Insight;
};