跳转到内容

架构原理与 Local-First (Architecture & Local-First)

架构原理与 Local-First

理解 AMC WebUI 的整体技术架构与数据流向,有助于进行深度的企业级部署与二次开发。


整体架构分层

┌──────────────────────────────────────────────────────────┐
│ 用户浏览器 (Browser Context) │
│ ┌─────────────────────────┐ ┌───────────────────────┐ │
│ │ React 18 前端 SPA │ │ IndexedDB 持久化层 │ │
│ │ Zustand 状态 / UI 组件 │ │ (Web Locks 跨标签写锁)│ │
│ └───────────┬─────────────┘ └───────────┬───────────┘ │
│ │ (BYOK 直连 或 代理转发) │ │
└──────────────┼────────────────────────────┼──────────────┘
│ │
┌───────────▼────────────────────────────▼───────────┐
│ 【可选】独立 Node API 服务 (Docker / VM) │
│ • /api/gemini/* -> 统一代理与服务端密钥兜底 │
│ • /api/openai/* -> 第三方服务商安全路由转发 │
│ • /api/live (WS) -> Live 双向 WebSocket 全代理 │
│ • stdio MCP 进程桥接 (受控环境开启) │
└───────────┬────────────────────────────────────────┘
┌───────────▼────────────────────────────────────────┐
│ 云端上游服务提供商 (Cloud Upstreams) │
│ • Google Gemini 官方 API (HTTP / WSS) │
│ • OpenAI / DeepSeek / OpenRouter 等第三方服务商 │
└────────────────────────────────────────────────────┘

核心设计要点

1. IndexedDB + Web Locks 跨标签写锁

为了在支持同时开启多个浏览器标签页的同时避免数据覆写,AMC WebUI 通过 navigator.locks.request 为数据库写操作加排他锁,并利用 BroadcastChannel 实时跨标签页广播会话变更事件,达成类似协同编辑的数据一致性。

2. Node API 服务的定位与边界

Node API 服务(server/ 源码)是专为可信自托管环境 (Trusted Self-Hosted) 设计的轻量级辅助网关:

  • 默认遵循 BYOK 优先:如果浏览器请求携带了用户自备的 API Key,Node 服务仅负责透传网络,绝不强制覆盖。
  • 当浏览器未携带 Key 时,才回落至服务端配置的 GEMINI_API_KEY
  • 如果打算对公网无限制开放,建议在外部结合 Cloudflare Access、Authelia 或 Nginx 补充鉴权与审计流控。