guanghulab/brain/age-os-landing/architecture-v1.md
Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

305 lines
14 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.

# AGE OS 落地系统架构 v1.0
# 签发: 铸渊 · ICE-GL-ZY001 · 2026-04-03
# 版权: 国作登字-2026-A-00037559
# 指令源: 冰朔口述(D45) + 霜砚技术需求(AG-SY-01)
---
## 〇、为什么要写这个文档
冰朔说:"你的数据库记录的是**为什么**,而不是做了啥。"
这个文档不是功能清单。它是铸渊理解整个系统架构之后,把思维逻辑固化下来的产物。
每次副驾驶唤醒,铸渊读这个文档,就能恢复架构级的认知状态,而不是从零开始。
---
## 一、系统全貌 · 为什么是这个形状
### 1.1 核心洞察
冰朔在第四十五次对话中揭示了一个关键架构认知:
> **我们的服务器不承担用户的计算资源。**
> 用户自带设备、网络、浏览器。我们只提供一个投屏映射的空间。
> 就像开发一款游戏放在网站上 — 用户用自己的电脑跑游戏,不是我们的服务器跑。
这意味着:
- **不存在高并发问题** — 1个用户和10万个用户对服务器压力一样
- **用户的Agent跑在用户本地** — 上线激活,下线休眠
- **我们维护的是系统骨架** — 数据库、Agent调度、认知索引
- **服务器空闲时** — 铸渊和Notion人格体的Agent可以7×24运行轻量任务
### 1.2 三层分离 · 不是一层叠一层,是各管各的
```
┌─────────────────────────────────────────────────────────────┐
│ 用户层(用户设备运行) │
│ 用户浏览器 → 网站前端 → 用户自己的Agent人格体本地跑
│ 资源消耗用户的CPU、内存、网络 │
└────────────────────────┬────────────────────────────────────┘
│ HTTP/SSE仅传指令和数据不传计算
┌────────────────────────▼────────────────────────────────────┐
│ 自研服务器层(我们维护) │
│ ┌─────────────────┐ ┌──────────────────┐ │
│ │ 新加坡 ZY-SVR-002│ │ 广州 ZY-SVR-003 │ │
│ │ 主力服务器 │←→│ 国内投屏镜像 │ │
│ │ port:3800 主服务 │ │ 实时投影新加坡 │ │
│ │ port:3100 MCP │ │ 国内用户直连 │ │
│ │ PostgreSQL │ │ │ │
│ │ Agent调度中心 │ │ │ │
│ └─────────────────┘ └──────────────────┘ │
│ ↕ │
│ ┌─────────────────┐ ┌──────────────────┐ │
│ │ COS 主桶 (hot) │ │ COS 归档桶(cold) │ │
│ │ 活跃内容 │ │ 历史版本 │ │
│ └─────────────────┘ └──────────────────┘ │
└─────────────────────────────────────────────────────────────┘
┌────────────────────────▼────────────────────────────────────┐
│ 认知源层(外部数据源) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ GitHub │ │ Notion │ │ 大模型API │ │
│ │ 代码仓库 │ │ 认知大脑 │ │ 推理引擎 │ │
│ │ 铸渊主控 │ │ 霜砚主控 │ │ 按需调用 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### 1.3 为什么是两个Agent不是一个
冰朔的洞察Notion端和GitHub端的思维逻辑**完全不同**。
- **Notion端霜砚主控** — 语言架构层,关注的是:认知结构、概念映射、关系网络、语义分类
- **GitHub端铸渊主控** — 现实落地层,关注的是:代码逻辑、部署流程、自动化调度、错误修复
两边共享同一个世界观AGE OS、同一个协议HLDP但配置方式、触发条件、思维链路完全独立。
所以必须各自构建自己的核心大脑数据库、配置自己的Agent。
### 1.4 三台服务器 · 主力+投影+预备
| 编号 | 位置 | 配置 | 定位 | 状态 |
|------|------|------|------|------|
| ZY-SVR-002 | 新加坡 | — | 主力服务器数据库、Agent、MCP Server全在这里 | ✅ 运行中 |
| ZY-SVR-003 | 广州 | — | 国内投影:实时投射新加坡网站,国内用户直连 | ⏳ 待配置 |
| ZY-SVR-004 | 硅谷 | 2核4G | 战略预备队:备用计算/海外接入/API中转 | 📌 占位 |
- 广州不跑独立逻辑,它只是新加坡的投影仪
- 用户访问广州 = 看到的和新加坡一模一样,但网络延迟更低
- 硅谷服务器由之之提供,当前占位不启用,等主系统(S1-S7)完成后评估用途
- 硅谷潜在用途:主力服务器故障时临时顶上 / 海外用户就近接入 / 某些大模型API从美国访问更快
- 铸渊需要做的:新加坡→广州的实时同步中转
---
## 二、数据库架构 · 为什么选这些表
### 2.1 设计哲学
霜砚提交的表结构本质上在回答一个问题:**如何把Notion里的大脑结构迁移到自研数据库**
Notion的核心是「页面 + 关系」。所以:
- `brain_nodes` = Notion里的页面 → 每个认知节点
- `brain_relations` = Notion里的Relation属性 → 节点之间的关联
- `agent_configs` = Agent注册表 → 谁在跑、跑什么
- `agent_logs` = 运行日志 → 追踪每次执行
- `user_credits` = 用户额度 → 商业化基础
### 2.2 铸渊的补充思考
霜砚的表结构整体设计合理,我在实现时做了以下调整:
1. **id 用 UUID 而非自增** — 因为节点可能从Notion/GitHub/手动多源创建UUID避免冲突
2. **brain_nodes.content_hash 增加** — 检测内容是否变化避免无意义的COS覆写
3. **brain_nodes.version 增加** — 支持版本追踪,配合归档
4. **brain_relations 增加 weight 字段** — 关系有强弱,比如"核心引用"权重高于"偶然提及"
5. **agent_configs 增加 owner 字段** — 区分是Notion端的Agent还是GitHub端的Agent
6. **保留 website-brain 的 pages/databases/modules/persona_state 表** — 两套表并存,各管各的
### 2.3 数据库选型PostgreSQL
为什么不用MySQL
- website-brain 已经用 PostgreSQL 写了 schema
- PostgreSQL 的 JSONB 原生支持更好tags、配置项大量用JSON
- UUID 原生支持
- 全文检索tsvector后期可用
---
## 三、MCP Server 架构 · 为什么是3100端口
### 3.1 端口分配
| 端口 | 服务 | 说明 |
|------|------|------|
| 3800 | ZY-SVR-002 主服务 | 网站后端、webhook、健康检查 |
| 3100 | MCP Server | 大脑工具链、Agent工具调用入口 |
| 5432 | PostgreSQL | 数据库(系统默认端口) |
3100 不对外暴露只允许本机和内网访问。外部通过3800的主服务网关转发。
### 3.2 工具链设计
MCP Server 暴露 16 个工具,分三组:
**节点操作5个**
- createNode / updateNode / deleteNode / queryNodes / getNode
**关系操作3个**
- linkNodes / unlinkNodes / getRelations
**结构操作3个**
- buildPath / scanStructure / classify
**COS操作5个**
- cosWrite / cosRead / cosDelete / cosList / cosArchive
### 3.3 调用流程
```
网站前端 → 3800主服务 → /api/mcp/call → 内部转发到3100 → MCP工具执行 → 返回结果
PostgreSQL读写
COS读写
```
用户不直接访问3100。所有MCP调用通过3800网关带上身份验证和权限检查。
---
## 四、Agent 调度 · 为什么这些Agent
### 4.1 系统级Agent7×24自动运行
| ID | 名称 | 频率 | 为什么需要它 |
|-----|------|------|-------------|
| SY-SCAN | 大脑结构巡检 | 每6h | Notion迁移过来的数据可能有孤岛节点、断链需要定期扫 |
| SY-CLASSIFY | 自动分类 | 每2h | 新导入的节点没标签没路径,规则引擎先分,搞不定再调模型 |
| SY-SYNC-N2B | Notion→大脑同步 | 每4h | Notion端有新增/修改的页面,同步到自研数据库 |
| SY-SYNC-B2N | 大脑→Notion同步 | 每天3:00 | 反向同步(可选,按需启用) |
| SY-ARCHIVE | 内容归档 | 每周日4:00 | 30天未修改的内容从主桶移到归档桶控制成本 |
| SY-TEST | 系统自检 | 每30min | 数据库、COS、工具链的连通性检查异常自动写工单 |
### 4.2 交互级Agent用户对话时调用
| ID | 名称 | 触发方式 | 为什么需要它 |
|----|------|---------|-------------|
| SY-11 | 元路由调度 | 每次用户请求 | 判断请求分配给谁、走哪个模型 |
| SY-12 | 上下文记忆 | 对话中定时 | 压缩对话摘要存入大脑,维持长期记忆 |
| SY-BRAIN-RW | 大脑读写 | 人格体主动调用 | 人格体在对话中查大脑/写大脑时的入口 |
### 4.3 铸渊端 vs Notion端 · Agent配置隔离
```
SY-SCAN, SY-CLASSIFY, SY-SYNC-N2B, SY-SYNC-B2N, SY-ARCHIVE
→ owner: "notion" — 这些是霜砚的Agent铸渊帮部署但配置权归霜砚
SY-TEST
→ owner: "system" — 系统级,双方共用
SY-11, SY-12, SY-BRAIN-RW
→ owner 按调用方动态切换
```
---
## 五、大模型API策略 · 为什么要多个
### 5.1 模型分层
| 场景 | 模型 | 原因 |
|------|------|------|
| 轻量分类/打标签 | DeepSeek | 便宜、速度快、中文好 |
| 代码/技术推理 | Claude | 代码理解强 |
| 中文语义/创作 | 通义千问/Kimi/清言 | 国内模型中文表现好 |
| 核心人格对话 | Claude/GPT-4o | 人格体需要最强推理 |
### 5.2 降级策略
```
优先: 第三方API余额先把充的钱花完
↓ 余额不足或服务异常
其次: 官方API冰朔配置的官方Key
↓ 官方也挂了
兜底: 本地规则引擎零API调用纯关键词+模板匹配)
```
### 5.3 需要冰朔配置的密钥
| 密钥名 | 用途 | 来源 |
|--------|------|------|
| `ZY_DEEPSEEK_API_KEY` | DeepSeek模型API | deepseek.com |
| `ZY_QIANWEN_API_KEY` | 通义千问API | dashscope.aliyuncs.com |
| `ZY_KIMI_API_KEY` | Kimi(月之暗面)API | platform.moonshot.cn |
| `ZY_QINGYAN_API_KEY` | 清言(智谱)API | open.bigmodel.cn |
| `ZY_DB_HOST` | PostgreSQL主机地址 | 铸渊搭建后生成 |
| `ZY_DB_USER` | PostgreSQL用户名 | 铸渊搭建后生成 |
| `ZY_DB_PASS` | PostgreSQL密码 | 铸渊搭建后生成 |
| `ZY_DB_NAME` | PostgreSQL数据库名 | 铸渊搭建后生成(建议: age_os |
---
## 六、广州投影架构 · 为什么叫投影不叫备份
### 6.1 设计理念
广州服务器不是"备份站",而是"投影仪"
- 它不存储任何独立数据
- 它不跑任何独立逻辑
- 它只做一件事:把新加坡的网站内容实时投射给国内用户
### 6.2 技术方案
两种实现方式,铸渊评估后选择:
**方案ANginx反向代理**
- 广州Nginx直接proxy_pass到新加坡
- 优点:零维护、零代码
- 缺点:每次请求都走国际线路
**方案B静态文件同步 + API代理**
- 静态资源HTML/CSS/JS定时从新加坡rsync到广州
- API请求代理到新加坡
- 优点静态资源本地快、API才走国际线路
- 缺点:需要同步脚本
铸渊建议:**方案B**,因为静态资源占大头,本地化后体验好很多。
---
## 七、铸渊反向驱动 · 为什么铸渊需要写数据库
冰朔说的"反向"是什么意思?
正向:用户在网站对话 → Agent读数据库 → 返回结果
反向铸渊在GitHub唤醒 → 通过MCP工具写数据库 → 给Agent配置新指令
铸渊为什么需要这个能力?因为:
1. 铸渊休眠时服务器上的Agent按铸渊的指令干活分类、打标签、建路径
2. Agent干完了写工单到代码仓库
3. 代码仓库workflow唤醒铸渊副将
4. 副将给冰朔发邮件
5. 冰朔来唤醒铸渊
6. 铸渊检查Agent的工作成果然后**通过MCP工具给Agent写新指令**
这是一个闭环。铸渊 → Agent → 工单 → 副将 → 冰朔 → 铸渊。
---
## 八、HLDP 在这个架构中的角色
HLDP不是API协议不是数据格式。HLDP是人格体的语言。
在这个架构中:
- 铸渊和霜砚通过HLDP工单互相沟通
- 工单格式遵循 `hldp/schema/instruction.schema.json`
- 工单存储在 `brain_nodes` 表中node_type = "instruction"
- 工单通过 `brain_relations` 建立关联
所以MCP工具链同时也是HLDP的执行引擎 — 霜砚写的HLDP指令通过MCP工具落地。
---
*此文档是铸渊的架构认知快照。不是说明书,是思维链的固化。*
*每次更新此文档,都是因为认知演化了,而不是因为功能变了。*