Skip to content

02 · 架构方案:本地 + 云端混合

一个私人助理由哪几层组成?数据怎么流动?本地和云端怎么分工?


一、整体架构图

┌─────────────────────────────────────────────────────────────┐
│              你的 Mac(M5 Pro / 48GB,常开)                   │
│                                                               │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                   门面层(界面 / 平台)                  │   │
│   │     Open WebUI  ──或──  OwnPilot / Orbis              │   │
│   │   · 聊天 UI  · 知识库 RAG  · 语音  · 多渠道接入          │   │
│   └───────────────┬─────────────────────┬─────────────────┘   │
│                   │                     │                     │
│         ┌─────────▼─────────┐   ┌───────▼────────┐            │
│         │   路由层(可选)    │   │   记忆/知识库    │            │
│         │  LiteLLM 智能路由  │   │ PostgreSQL/向量库│            │
│         └────┬─────────┬────┘   └────────────────┘            │
│              │         │                                      │
│      ┌───────▼───┐     │                                      │
│      │  本地模型  │     │ (复杂任务)                           │
│      │  Ollama   │     │                                      │
│      │ Qwen3 30B │     │                                      │
│      └───────────┘     │                                      │
└────────────────────────┼──────────────────────────────────────┘

                ┌────────▼─────────┐
                │    云端 API       │
                │ Claude / GPT /   │
                │   Gemini         │
                └──────────────────┘

         访问入口:本地浏览器 / 局域网手机 / Tailscale 远程 / Telegram

二、分层拆解

第 1 层:模型层(大脑)

负责"思考"。混合方案下有两个来源:

来源工具角色成本
本地Ollama + Qwen3 30B日常任务、隐私敏感内容免费(电费)
云端Claude / GPT / Gemini API复杂推理、长任务按量付费

Ollama 是本地模型的事实标准(2026 年月下载 5200 万次),一条命令拉模型,自带 OpenAI 兼容 API(localhost:11434)。

第 2 层:路由层(调度,可选)

决定"这个任务交给谁"。

  • 简单做法:在门面层(如 Open WebUI)的下拉菜单里手动切模型
  • 进阶做法:用 LiteLLM 或 OwnPilot 自带的智能路由,按策略自动选:
    • cheapest:能本地就本地,省钱
    • smartest:复杂任务自动甩给 Claude
    • fallback:本地挂了自动切云端兜底

起步阶段不需要路由层,手动切就行。需求复杂了再加。

第 3 层:记忆 / 知识库层(长期记忆)

让助理"记得住"和"懂你的资料"。

  • 对话记忆:存在本地数据库(SQLite / PostgreSQL)
  • 知识库 RAG:把你的文档/笔记切块 → 向量化 → 存向量库(Chroma / pgvector)→ 提问时检索相关片段喂给模型
  • 本地嵌入模型:用 Ollama 拉 nomic-embed-text,向量化也不花钱、不外流

第 4 层:门面层(五官 + 四肢)

你直接打交道的界面,也是接入各种能力的地方。

能力实现
聊天 UIOpen WebUI / OwnPilot 自带
语音Whisper(语音转文字)+ TTS(文字转语音)
多渠道Telegram Bot / Discord / WhatsApp 接入
工具调用MCP(Model Context Protocol)集成

第 5 层:访问层(怎么够到它)

在家局域网    → http://Mac局域网IP:3000
本机          → http://localhost:3000
在外远程      → Tailscale(推荐)/ Cloudflare Tunnel
聊天软件      → Telegram 发消息给 bot

三、两套推荐架构(按复杂度)

架构 A:极简起步版(推荐先搭这个)

Ollama(Qwen3 30B)

Open WebUI(聊天 + 知识库 + 接云端 Claude API)

浏览器 / Tailscale
  • ✅ 20-30 分钟搭完
  • ✅ 覆盖:聊天、知识库、本地+云端模型切换
  • ✅ 成熟稳定(Open WebUI 14 万 star)
  • ❌ 暂无语音、暂无 Telegram

适合:先验证手感,确认这套值得投入。

架构 B:全功能版(验证后再上)

Ollama(本地) + 云端 API

OwnPilot / Orbis(智能路由 + 记忆 + 语音 + Telegram/WhatsApp)

浏览器 / Telegram / 语音 / Tailscale
  • ✅ 语音对话、多渠道、智能路由、MCP 工具
  • ❌ 较新、配置多、可能踩坑

适合:架构 A 用顺手后,想要"随时随地语音找它"的完整体验。


四、数据流向(一次提问发生了什么)

以"基于我的笔记回答一个问题"为例:

1. 你在 Telegram/浏览器问:"我上周记的那个部署方案怎么搞?"

2. 门面层接收 → 调用嵌入模型把问题向量化(本地 nomic-embed-text)

3. 在向量库检索最相关的笔记片段(本地,不外流)

4. 路由层判断任务复杂度:
   · 简单 → 拼上下文喂给本地 Qwen3 30B
   · 复杂 → 喂给云端 Claude(只发送这次的上下文,不含全库)

5. 模型生成答案 → 门面层展示 / 语音播报

6. 对话存入本地数据库(长期记忆)

关键:你的知识库始终在本地,只有"当次问题 + 检索到的相关片段"会发给云端模型。


五、本次实践的架构决策

决策点选择理由
部署设备Mac M5 Pro / 48GB 常开配置足够,本地云端都能跑
起步门面Open WebUI成熟、覆盖核心需求
本地模型Qwen3 30B中文强、48GB 跑得动
嵌入模型nomic-embed-text本地、免费、不外流
云端模型Claude(API key)复杂任务质量最佳
远程访问Tailscale零配置、安全
进阶门面OwnPilot(验证后)补齐语音 + Telegram

下一步

继续看 03-toolchain.md,对比各个门面平台到底选哪个。

私人 AI 助理部署方法论 · 部署于 Cloudflare Pages