Files
2026-06-16 00:38:57 +08:00

44 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ADR-0001 · 技术选型决策记录
> 项目:AIAudit(本地私有化大模型电信运营商 AI 全域内审平台)
> 状态:已接受(MVP 基线)
> 日期:2026-06
> 关联:`0-req-AIAudit.md`、`1-prd-AIAudit.md`、`2-task-AIAudit.md`(任务 P0.1
## 背景
平台需在本地内网部署、数据零出域,具备本体/知识图谱、双时态/时序、本地 LLM 推理、向量检索等能力,并需信创适配。技术选型需在"能力完整"与"组件最少、出域面最小、便于信创"之间取得平衡。
## 决策
| 层 | 选型 | 说明 |
| --- | --- | --- |
| 后端 | Python 3.12 + FastAPI | 贴近 LLM/数据/ML 生态,异步任务友好 |
| 前端 | React + TypeScript + Vite | 看板/下钻交互成熟 |
| 主存储 | PostgreSQL 16 | 一库多能,降低组件数与出域面 |
| 知识图谱 | PostgreSQL + Apache AGE | 免独立图库,信创友好,满足 MVP 多跳穿透 |
| 双时态/时序 | PostgreSQL 时态列 + TimescaleDB | 双时态回放 + 时间序列一体 |
| 向量检索 | pgvector | 与主库同栈,免独立向量库 |
| 任务调度 | Celery + Redis | 全量扫描异步任务、进度反馈 |
| 文件/对象 | MinIO(本地 S3) | 凭证/底稿存储,不出域 |
| LLM 推理 | Provider 抽象:开发期 DashScope 公网千问;生产 vLLM + 本地 70B | 见下"LLM 抽象与红线" |
| 部署 | 本地 Homebrew 安装(开发)→ 生产内网裸机/信创环境 | 不使用 Docker;开发直接用本机 PostgreSQL 16 + 本地服务 |
## LLM 抽象与数据零出域红线(关键约束)
- LLM 通过统一 `LLMProvider` 接口接入,至少实现两种:`DashScopeProvider`(公网千问,**仅开发/测试**)、`VllmProvider`(本地,生产)。
- **红线:公网 Provider 只允许处理脱敏/样例假数据,严禁传入任何真实审计数据。** 通过配置开关 + 环境标识(dev/prod)强约束;prod 环境禁用任何公网 Provider。
- 切换 Provider 仅改配置,不改业务代码。
## 本机环境结论(开发机)
- Mac mini · Apple M4 · 16GB · macOS 26.5.1ARM64);磁盘可用 ~170GB。
- 开发 MVP 够用(样例数据 + 公网千问 API + Docker 组件)。
- **不能本地运行 70B**;生产推理需独立 GPU 服务器(A100/H100/国产 GPU)跑 vLLM。
## 备选与未选原因
- 独立 Neo4j 图库:能力更强但增加组件与信创/授权负担,MVP 暂不引入;图谱压力增大时再评估。
- 独立时序库 / 独立向量库:同理,先用 PG 一体化,后续按压力拆分。
- 后端 Java Spring Boot:企业集成习惯好,但 LLM/数据/ML 生态以 Python 为主,会多一层;若团队为 Java 班底可改为"Java 主服务 + Python 分析/推理服务"。
## 影响
- 开发环境:本机 Homebrew 安装 PostgreSQL 16 + TimescaleDB + pgvector,不使用 Docker(已移除 docker-compose 与自定义镜像);初始化脚本见 `infra/postgres/setup_local.sh`
- 生产部署需规划独立 GPU 推理节点(任务 P3.5 信创适配同步评估)。