Files
hunjing/docs/architecture/system-architecture.md
T

177 lines
10 KiB
Markdown
Raw 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.
# 魂镜系统总架构
> 状态:重写目标态(rewrite/1.0 基线)
> 上位约束:[产品宪章](../product/constitution.md)、[全产品主 PRD](../product/master-prd.md)、根目录 `AGENTS.md` 完整技术栈
> 实现进度以[能力矩阵](../operations/capability-matrix.md)为准,本文不声明任何能力已落地。
## 1. 架构基准
魂镜产品定义(六域、镜树、三级记忆、司命禁域等)保持产品与领域文档权威不变;工程架构以根目录 `AGENTS.md` 的完整技术栈为基准,按五层组织:
| 层 | 技术 | 文化名 | 核心职责 |
| --- | --- | --- | --- |
| 前端 | Next.js 16 + React 19 + TypeScript | 琉璃镜 | 全部 Web 界面、镜树阅读与局部树图、治理与可解释呈现、Live2D 与浏览器通感 |
| BFF | Node.js 22 + Fastify + Zod | 照壁 | 鉴权透传、SSE/WebSocket 代理、响应裁剪、openapi-fetch 类型桥接 |
| 后端核心 | Python 3.12+ + FastAPI + SQLAlchemy 2.0 | 灵台 | 六域业务、插件化认知运行时(九枢)、事件溯源、司命裁决、百工注册 |
| 高并发 I/O 层 | Go 1.25+ | 神识 / 博闻 | 神识:模型网关(Provider/路由/流式/BYOK/计量);博闻:MCP 联网搜索 |
| 桌面端 | Rust + Tauri v2 | 镜匣 | 最小桌面壳:承载琉璃镜、本地能力桥、乾坤本地执行通道 |
| 隔离执行 | Rust + axum(独立 HTTP 服务) | 乾坤 | 不可信代码隔离执行、资源上限、进程组清理、HMAC 授权 |
| 感知/本地推理辅助 | Python | 天目 / 元炁 | 天目:本地 OCR;元炁:本地 LLM / Embedding / Rerank / 多模态推理 |
文化名与工程对象的登记、新增与退役以[契约词典 §2](../contracts/contract-glossary.md) 为单一事实源。
## 2. 服务拓扑
```mermaid
flowchart LR
subgraph Clients[客户端]
Browser[浏览器]
Desktop[镜匣 · Tauri 壳]
end
subgraph Edge[边缘层]
Nginx[天门 · Nginx 统一入口]
BFF[照壁 · Fastify BFF]
end
subgraph Core[核心层]
LT[灵台 · Python 后端核心<br/>六域业务 + 插件化运行时]
end
subgraph GoIO[高并发 I/O 层]
SS[神识 · Go 模型网关]
BW[博闻 · Go MCP 搜索]
end
subgraph Aux[辅助服务]
QK[乾坤 · Rust 沙箱]
TM[天目 · OCR]
YQ[元炁 · 本地推理]
end
subgraph Data[数据层]
PG[(金匮 · PostgreSQL / SQLite)]
RD[(灵泉 · Redis)]
OS[(玉函 · MinIO / 本地对象)]
VEC[(灵犀 · pgvector / Milvus)]
end
Browser --> Nginx
Desktop --> Nginx
Nginx --> BFF
BFF --> LT
LT --> SS
SS --> Provider[模型 Provider / BYOK Endpoint]
SS --> YQ
LT --> BW
LT --> QK
LT --> TM
LT --> PG
LT --> RD
LT --> OS
LT --> VEC
SS --> RD
```
要点:
1. 所有客户端请求经照壁进入灵台;琉璃镜与镜匣不持有平台密钥、不直连神识或乾坤。
2. 神识是唯一模型出口:灵台向神识发送版本化模型请求,神识负责协议转换、路由、流式与计量;元炁作为神识的一种本地 Endpoint 接入,不走独立通道。
3. 博闻等 MCP 服务由灵台百工注册与调用;玄关(旧 Go MCP 管理网关)退役,MCP 服务登记并入灵台百工。
4. 乾坤只执行经司命裁决且范围明确的请求;乾坤不判断风险、不拥有人物状态。
## 3. 交互总链路
```mermaid
sequenceDiagram
participant UI as 琉璃镜/镜匣
participant ZB as 照壁 BFF
participant LT as 灵台
participant SS as 神识
participant QK as 乾坤
participant BW as 博闻
UI->>ZB: HTTPS + JWT Cookie + Idempotency-Key
ZB->>LT: 鉴权透传 + 裁剪后请求
LT->>LT: 命台排队 + 司命裁决 + 上下文投影
alt 模型推理
LT->>SS: 版本化模型请求 + run_id/trace_id
SS-->>LT: 标准化流(SSE)+ 用量
else 工具执行
LT->>BW: 百工工具调用(如联网搜索)
BW-->>LT: 观察结果
LT->>QK: 已授权执行请求 + 限制 + trace
QK-->>LT: 执行观察与审计证据
end
LT->>LT: 净化标证 + 状态事务 + Outbox 事件
LT-->>ZB: SSE 事件流 / JSON
ZB-->>UI: 透传流 + 响应裁剪
```
灵台返回的工具与模型结果先作为带来源的观察进入事件日志,不自动成为事实、人物答复或长期记忆;该铁律的运行时保障见[灵台运行时](lingtai-runtime.md)。
## 4. 灵台内部分层
```mermaid
flowchart TD
API[API 层 · api/v1 + SSE]
Domain[六域领域层<br/>镜生 / 缘契 / 三界 / 形仪 / 灵台域 / 天宰]
Kernel[极小硬核 Kernel<br/>不变量裁决 + 命台并发 + 事件溯源 + 循环骨架]
Plugins[插件层 · 九枢装配<br/>灵核 / 太一 / 司命 / 烛照 / 河图 / 洛书 / 息壤 / 百工 / 天工阁]
Infra[基础设施复用层<br/>auth / RBAC / 审计 / 事件存储 / 幂等 / SSE 网关]
API --> Domain
Domain --> Kernel
Kernel --> Plugins
Domain --> Infra
```
- 领域层按六域建模,拥有业务规则与状态;运行时详细设计见[灵台运行时](lingtai-runtime.md),数据模型见[数据模型](data-model.md)。
- Kernel 是不可插拔的最小核心:镜树不变量(重新生成不覆盖、未归真不入忆、归真不静默回滚)、命台唯一前台意识流、司命禁域裁决点、"模型可见即可重建"断言。
- 九枢全部以插件装配;司命插件常驻,其禁域规则挂载点不可卸载、不可降权。
## 5. 数据总架构
- 关系数据库(本地 SQLite / 生产 PostgreSQL)是当前状态唯一事实源;本地开发默认 SQLite 文件,正式环境 PostgreSQL,按需启用 Redis、Milvus、Neo4j/NebulaGraph 与对象存储。
- 关键事件、治理裁决与外部行动写入 append-only 事件日志(一炁),与状态变更经同一事务或 Outbox 一致提交。
- 向量检索:PostgreSQL + pgvector 为标准档;Milvus(灵犀)只在真实规模需要时引入;开发档可用 SQLite + 本地向量层。向量索引可重建,不是权威事实源。
- 对象存储:本地文件系统(开发)→ MinIO(自建)→ S3 兼容(云)。
- 可重建索引、缓存与派生视图在任何恢复流程中都从权威数据重建并校验。
## 6. 可靠性总架构
- 核心文字相伴官方云 1.0 目标 SLO 99.9%;权威人物数据 RPO ≤ 5 分钟、RTO ≤ 1 小时;媒体与可重建索引可采用更宽目标。
- 手段:健康检查、超时与限流、神识端点故障切换(首字超时切道)、幂等键、事务/Outbox、可验证备份与恢复演练。
- SSE 断线续传:事件带单调序号,客户端以 `Last-Event-ID` 重连,中间状态可在 Redis 缓存恢复;恢复不得违反"未完成芽体不伪装为完整候答"。
- 模型、工具与区域故障下安全降级:降级只影响能力可用性,不破坏人物连续性与已归真经历。
## 7. 部署分档
| 档位 | 目标 | 基础设施 |
| --- | --- | --- |
| 本地开发 | 单机开发测试,不可用于生产 | SQLite、本地对象、进程内协调;允许示例凭证与宿主端口 |
| 轻量单机 | 私人闭环、低运维自托管 | SQLite、本地对象,可选本地向量层与 Redis |
| 标准服务器 | 稳定多人/多人物服务 | PostgreSQL + pgvector、Redis、MinIO;按需 Milvus / Neo4j |
| 官方区域云 | 区域驻留、可运营 | 五层服务区域化部署、区域内高可用、备份与灾备体系 |
- Docker 编排位于根目录 `docker/`:`docker-compose.infra.yml`(数据库/缓存/向量/图库/对象存储)与 `docker-compose.app.yml`(照壁、灵台、神识、琉璃镜、乾坤、天目、元炁、博闻、天门 Nginx),容器名以 `hunjing-` 开头,共享网络 `hunjing-net`。
- 镜匣(Tauri 壳)为桌面构建产物,不进 Compose;其本地能力桥与乾坤的对接见[BFF 与桌面壳](bff-and-desktop.md)。
- 部署档位改变基础设施规模,不改变各服务逻辑职责或禁域;`change-me` 凭证、无认证管理端口与 `STORAGE_PROVIDER=local` 只允许本地开发档。
## 8. 阶段启用矩阵
| 服务 | P0 | P1 | P2 |
| --- | --- | --- | --- |
| 琉璃镜 | 镜树核心界面、人物、记忆治理、设置 | 形仪工坊、Live2D、语音、通感 | 天工阁、叩心、神识阁完整治理 |
| 照壁 | 鉴权透传 + SSE 代理 + 类型桥接 | 媒体裁剪与聚合 | 多区域入口 |
| 灵台 | 六域核心 + 插件运行时 + 司命 + 百工基础 | 形仪/语音/通感域扩展 | 天工阁、叩心、区域与计费 |
| 神识 | chat 槽位、平台目录、BYOK、计量 | vision/ASR/TTS/image/embedding/rerank 槽位 | 配额与成本治理 |
| 博闻 | 百工注册的联网搜索 | — | 搜索配额 |
| 乾坤 | 基础隔离执行 | 设备安全扩展 | 双裁决与硬急停 |
| 天目/元炁 | 元炁作为本地 Endpoint 可选 | 天目 OCR 接入通感 | — |
| 镜匣 | — | 设计预留 | 最小桌面壳交付 |
## 9. 架构决策记录
| 决策 | 结论 | 备选与后果 |
| --- | --- | --- |
| 架构基准 | 以 AGENTS.md 完整技术栈为准,docs/architecture 按其重写 | 备选为四服务目标态文档;后果是 BFF/桌面端进入范围,旧"灵台承载 ai_provider"过渡态终止 |
| BFF 选型 | Fastify | NestJS 结构更强但体量重;SSE 代理场景 Fastify 负担最小 |
| 神识时序 | 重写期间新建 Go 神识,一次性替换 Python `ai_provider` | 先契约后迁移可降低风险,但会保留两套模型出口;已选择避免二次迁移 |
| 运行时理念 | 采纳"一切皆插件"(deepseek-harness),司命禁域与身份不变量为不可插拔硬核 | 纯插件化会使禁域可被卸载,违反宪章;硬核例外是宪章级约束 |
| 玄关处置 | 退役,MCP 服务登记并入灵台百工 | 保留独立 MCP 网关会多一个服务与鉴权面;百工本就是唯一能力注册中心 |
| 桌面端 | 实现最小镜匣壳(Tauri),加载琉璃镜 + 本地能力桥 | 仅设计预留会推迟桌面验证;完全桌面化超出 1.0 需要 |