Appearance
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:复杂任务自动甩给 Claudefallback:本地挂了自动切云端兜底
起步阶段不需要路由层,手动切就行。需求复杂了再加。
第 3 层:记忆 / 知识库层(长期记忆)
让助理"记得住"和"懂你的资料"。
- 对话记忆:存在本地数据库(SQLite / PostgreSQL)
- 知识库 RAG:把你的文档/笔记切块 → 向量化 → 存向量库(Chroma / pgvector)→ 提问时检索相关片段喂给模型
- 本地嵌入模型:用 Ollama 拉
nomic-embed-text,向量化也不花钱、不外流
第 4 层:门面层(五官 + 四肢)
你直接打交道的界面,也是接入各种能力的地方。
| 能力 | 实现 |
|---|---|
| 聊天 UI | Open 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,对比各个门面平台到底选哪个。