目录

Aether Lens System v0.0.1

Aether Lens 是一个五层认知助手系统,通过 视频感知 → 语义理解 → 记忆认知 → 决策 → 执行 的流水线,为用户提供智能行动建议。

  • 前端:Android 原生应用(Kotlin + Jetpack Compose + Material3)
  • 后端:Python 微服务集群(FastAPI + asyncio TCP Broker + PostgreSQL)

系统架构

┌─────────────────────────────────────────────────────────────────┐
│                    Aether Lens Android App                       │
│              (Kotlin · Jetpack Compose · Retrofit)               │
└──────────────────────┬──────────────────────────────────────────┘
                       │  REST API (:8000)
┌──────────────────────▼──────────────────────────────────────────┐
│                 C-层 (FastAPI Gateway)                            │
│           API 路由 · 消费 B-层事件 · 反射调度                      │
└──────────────────────┬──────────────────────────────────────────┘
                       │  TCP Broker (:6380)
     ┌─────────────────┼─────────────────┬──────────────┐
     ▼                 ▼                  ▼              ▼
   A-层              B-层               D-层           E-层
 (视频感知)        (语义聚合)          (机会决策)      (行动执行)
     │                 │                  │              │
     └─────────┬───────┘                  │              │
               ▼                          ▼              ▼
         a_events ──► b_events ──► opportunities ──► execution_plans
                                                  ──► e_results

五层职责

职责 输入 → 输出
A-层 视频感知(人脸/语音/场景识别) MP4 视频 → 原始感知事件
B-层 语义聚合 + LLM 语义生成 感知事件 → 语义摘要
C-层 认知记忆(Tier1画像/Tier2长期记忆/Tier3短期事件) 语义事件 → 记忆存储 + 机会构建
D-层 机会决策 机会 → 执行计划
E-层 行动执行(飞书/日历/语音反馈/Action Card) 执行计划 → 行动卡片

部署方式

环境要求

组件 最低版本 说明
Python 3.11 后端所有 Python 脚本
Node.js 18+ E 层 TypeScript 编译
PostgreSQL 14+ 主数据库,需安装 pgvector 扩展
JDK 17 前端 Android 构建
Gradle 8+ 随项目自带(gradlew)
Conda (可选) A 层 GPU 推理需要 d2lGPU 环境
Android Studio Hedgehog+ 前端开发和模拟器运行

1. 克隆仓库

git clone https://gitlink.org.cn/caoweiqiong/Aether.git
cd Aether

2. 数据库初始化

确保 PostgreSQL 已安装并运行,然后:

# 创建数据库
createdb -U postgres memory_db

# 启用 pgvector 扩展
psql -U postgres memory_db -c "CREATE EXTENSION IF NOT EXISTS vector;"

# 创建所有表(Tier1/Tier2/Tier3/Reflection/ActionCards/VideoJobs)
cd backend
python c_layer/rebuild_db.py

数据库连接配置在 backend/c_layer/config.py

PG_CONFIG = {
    "host": "localhost",
    "port": 5432,
    "dbname": "memory_db",
    "user": "postgres",
    "password": "你的密码",
}

3. Python 依赖

cd backend
pip install -r requirements.txt

主要依赖:fastapi uvicorn psycopg pgvector requests numpy

4. E 层编译

cd backend/e_layer
npm install
npx tsc          # 编译 TypeScript → dist/mqConsumer.js

5. 配置 LLM API

编辑 backend/config.json,填入 DeepSeek API 密钥:

{
  "llm_api_url": "https://api.deepseek.com/chat/completions",
  "llm_api_key": "sk-你的密钥",
  "model": "deepseek-chat",
  "temperature": 0.7,
  "max_tokens": 256,
  "timeout": 30
}

6. 启动后端

日常启动(不处理视频):

cd backend
python start_all.py --mode no-a

带视频处理(需要 GPU 和 d2lGPU 环境):

python start_all.py --video data/test.mp4

启动过程输出示例:

Layers to start: [broker, b_layer, c_layer, d_layer, e_layer]
[broker] PID=29752 → Broker ready on port 6380
[b_layer] PID=43472
[c_layer] PID=44508 → API: 0.0.0.0:8000
[d_layer] PID=71000
[e_layer] PID=71432 (Node.js)
All layers launched!

停止后端:

# Windows
taskkill /F /IM python.exe & taskkill /F /IM node.exe

# Linux / Mac
pkill -f "python.*run.py" && pkill -f "node.*mqConsumer"

7. 前端构建与安装

用 Android Studio 打开(推荐):

  1. Android Studio → File → Open → 选择 frontend/ 目录
  2. 等待 Gradle 同步
  3. 点击 Run(▶)选择模拟器或 USB 设备

命令行构建:

cd frontend

# Windows (Git Bash):
export JAVA_HOME="/c/Program Files/Java/jdk17/jdk-17.0.12+7"
./gradlew assembleDebug

# APK 输出: frontend/app/build/outputs/apk/debug/app-debug.apk

安装到模拟器:

adb install frontend/app/build/outputs/apk/debug/app-debug.apk

8. 前端连接后端

运行方式 APP 后端地址 说明
Android 模拟器 http://10.0.2.2:8000 自动映射到宿主机 localhost,无需配置
USB 真机 http://<PC_IP>:8000 在 APP Personal Space → API 配置中手动设置
后端部署在服务器 http://<服务器IP>:8000 同上

首次启动:APP 默认连接 http://10.0.2.2:8000。如需修改,进入 APP → Personal Space(右上角 YOUR SPACE)→ API Settings,添加/编辑 API 配置,填入后端地址和 API Key。


前后端通信接口

所有接口统一响应格式:

{ "code": 0, "data": {...}, "message": "success" }

code=0 表示成功。code≠0message 包含错误描述。

通道 1:视频上传 → A 层处理

用途:前端上传 MP4 视频,后端送入 A 层开始感知解析。

方法 POST /api/video/upload
Content-Type multipart/form-data
字段名 file(必须)

请求multipart/form-data,字段名 file,值为 MP4 文件。

响应

{
  "job_id": "job_20260522_153422_a902a0",
  "status": "processing",
  "file_size_mb": 30.9,
  "created_at": "2026-05-22T15:34:22"
}

轮询处理状态GET /api/video/status/{job_id}

{ "job_id": "job_xxx", "status": "completed" }
  • status 可能值:processingcompleted / failed

前端实现:主页顶部状态栏右侧 “上传视频” 按钮 → 弹出系统文件选择器 → 选中 MP4 → 调用上传接口 → 后端自动启动 A 层处理。


通道 2:系统状态实时传输 & 反思时间设置

用途:前端显示后端五层实时运行状态,用户可设置反思触发时间。

系统有三种状态

状态 判定条件
工作中 (WORKING) A/B/C/D/E 任意一层队列有未处理数据,或最近 10 秒内有事件流过
整理中 (ORGANIZING) C 层正在执行反思(整理 Tier1 画像和 Tier2 长期记忆)
休眠 (SLEEPING) 既不在工作中也不在整理中

工作中和整理中可以同时存在——此时状态显示为「工作中 + 整理中」。

GET /api/status — 拉取系统状态(前端每 2 秒轮询)

{
  "state": "WORKING",
  "states": ["WORKING", "ORGANIZING"],
  "queues": { "a_events": 5, "b_events": 2, "opportunities": 1, "execution_plans": 0, "e_results": 0 },
  "video_processing": { "has_active_job": true, "job_id": "job_xxx", "progress": 0.6 },
  "reflecting": true,
  "layer_status": {
    "broker": "running", "b_layer": "running",
    "c_layer": "running", "d_layer": "running", "e_layer": "running"
  }
}

反思时间管理

操作 端点 请求体
查看配置 GET /api/reflect/config
添加时间 POST /api/reflect/schedule {"time": "14:30"}
删除时间 DELETE /api/reflect/schedule {"time": "14:30"}
手动触发 POST /api/reflect/trigger {} (或 {"enable_tier1_llm": true})

反思配置响应:

{
  "schedule_times": ["01:00", "14:00"],
  "max_daily_reflections": 3,
  "min_interval_minutes": 60,
  "today_reflection_count": 1,
  "last_reflection_at": "2026-05-22"
}

最多设置 3 个反思时间。

前端实现:主页顶部状态栏显示彩色圆点 + 状态文字 + 反思时间。点击时间弹出管理对话框,可添加/删除最多 3 个时间点。


通道 3:Tier1 用户核心画像

用途:后端 C 层自动整理的用户画像,前端展示并允许用户手动增删改。

Tier1 包含五个类别:

类别键 前端中文名
core_goals 我的目标
relationships 我的人
preferences 我喜欢的
habits 我是谁
health_constraints 我在意的

GET /api/tier1/{user_id} — 获取画像

{
  "user_id": "entity_0001",
  "critical_facts": {
    "core_goals": [
      { "id": "sys_a3f2b1", "text": "用户希望完成系统开发", "source": "system", "created_at": "2026-05-22 01:00" },
      { "id": "user_c8d9e0", "text": "下个月学习 Rust",      "source": "user",   "created_at": "2026-05-22 15:30" }
    ],
    "relationships": [],
    "preferences": [],
    "habits": [],
    "health_constraints": []
  }
}

条目标签source: "system" — C 层自动整理(前端显示 ·AI 角标);source: "user" — 用户手动添加(前端显示添加时间)。

PUT /api/tier1/{user_id} — 修改画像

// 添加一个条目
{ "category": "core_goals", "action": "add", "item": { "text": "你的新条目内容" } }

// 编辑已有条目(需要 id)
{ "category": "core_goals", "action": "update", "item": { "id": "user_c8d9e0", "text": "修改后的内容" } }

// 删除已有条目
{ "category": "core_goals", "action": "delete", "item": { "id": "user_c8d9e0" } }

只能修改 source: "user" 的条目。source: "system" 的条目由 C 层自动管理。

前端实现:Personal Space → 我的画像 → 五组卡片网格。长按卡片可编辑或删除。右下角 + 按钮添加新条目。AI 条目带 ·AI 角标和橙色边框,用户条目显示添加/更新时间。


通道 4:行动卡片(E 层 Planned Action)

用途:E 层执行完毕后生成行动卡片,推送到前端供用户确认或忽略。

两种来源

来源 说明
管道 (pipeline) 视频 → A→B→C→D→E 自然流程产出
指令 (command) 用户在前端直接输入文字/语音指令,跳过视频处理直接下达

GET /api/actions — 获取待处理行动卡片

GET /api/actions?status=pending&source=all&page=1&page_size=20
{
  "total": 5,
  "actions": [{
    "id": "act_1779352771903_vyjmz7",
    "source": "pipeline",
    "type": "notification",
    "title": "🎤 语音反馈 +2项",
    "content": "确认参与连续10小时聊天计划,已安排日程\n---\n🎤 语音反馈\n你已确认参与...\n---\n📅 日程\n已创建\"聊天马拉松\"日程\n---\n💬 飞书消息\n已发送选题确认消息",
    "confidence": 0.8,
    "status": "pending",
    "context": { "trigger_summary": "..." },
    "created_at": "2026-05-22T15:34:00"
  }]
}

content 结构化格式:各段用 --- 分隔。第一段为标题概述,后续每段为 emoji 类型名 + 换行 + 正文

PUT /api/actions/{action_id} — 确认/拒绝行动

{ "decision": "confirmed" }   // 确认
{ "decision": "rejected"  }    // 忽略

确认/拒绝后该卡片不再出现在 status=pending 的列表中。

前端实现:主页问候语下方卡片流。每张卡片显示标题 + 分段内容(带 emoji 图标)+ 「确认」「忽略」按钮。点击确认或忽略后即时消失并通知后端。


通道 5:用户指令

用途:用户直接输入文字指令(或语音转文字),跳过视频 A→B→C→D→E 流水线,指令进入优先队列直达 D/E 层。

POST /api/command

// 请求
{ "text": "提醒我下午3点开会", "type": "text" }

// 响应
{ "command_id": "cmd_20260522_153000_a1b2c3", "status": "processing" }

指令处理优先级高于管道事件——command_execution_plans 队列被 E 层优先消费。

前端实现:底部 Hold-to-Speak Dock 有键盘按钮,点击弹出文本输入框。输入内容后点发送通过此接口传输到 E 层生成行动卡片。


其他后端接口

端点 说明
GET /health 健康检查
GET /api/entity/list 实体列表
GET /api/entity/{id} 实体详情
GET /api/tier2/{entity_id} 长期记忆
GET /api/tier3/recent 短期事件
GET /api/stats 全局统计
GET /api/video/jobs 视频任务历史
GET /api/reflect/history 反思历史记录
WS /api/status/ws 系统状态 WebSocket 推送
WS /api/actions/ws 行动卡片 WebSocket 推送

前端页面结构

页面 路由 说明
闪屏 splash 启动页
引导流程 onboard/1~6 首次使用:设置昵称→声纹→画像→蓝牙→API→权限
工作台主页 workspace 问候语 + 系统状态栏 + 行动卡片 + 语音/指令输入
个人空间 personal 我的画像 + API 配置 + 设备管理 + 产品理念
设备详情 device/detail 设备信息和连接管理

技术栈

组件 技术
后端框架 FastAPI + Uvicorn
数据库 PostgreSQL 14 + pgvector + SQLite (Tier3)
消息中间件 自建 asyncio TCP Broker (:6380)
LLM DeepSeek API(B 层语义生成、D 层决策、E 层行动规划)
CV 模型 YOLO(场景识别)、InsightFace(人脸识别)、OpenAI Whisper(语音识别)
前端框架 Kotlin + Jetpack Compose + Material3
网络层 Retrofit 2.9 + OkHttp 4.12
状态管理 StateFlow + DataStore Preferences
编译 JDK 17 + Gradle 9.0

目录结构

Aether/
├── README.md
├── backend/
│   ├── start_all.py             # 一键启动全部服务
│   ├── config.json              # LLM API 配置
│   ├── requirements.txt
│   ├── a_layer/                 # 视频感知
│   │   ├── run.py               #   入口
│   │   └── src/                 #   人脸/语音/场景模型
│   ├── b_layer/                 # 语义聚合
│   │   ├── run.py
│   │   └── semantic_generator.py #   LLM Prompt 构造
│   ├── c_layer/                 # 认知记忆 + API
│   │   ├── run.py               #   启动 API + Consumer
│   │   └── c_online/
│   │       ├── api_server.py    #   FastAPI 路由注册
│   │       └── gateway/         #   各 API 模块
│   ├── d_layer/                 # 机会决策
│   │   └── run.py
│   ├── e_layer/                 # 行动执行
│   │   ├── src/
│   │   │   ├── mqConsumer.ts    #   MQ 消费者
│   │   │   └── ActionPlanner.ts #   LLM 行动规划
│   │   └── dist/                #   编译输出
│   ├── message_queue/
│   │   └── broker.py            # TCP Broker
│   └── shared/                  # 共享工具(MQ Client / Logger)
└── frontend/
    ├── app/
    │   └── src/main/java/com/aether/app/
    │       ├── MainActivity.kt
    │       ├── MainViewModel.kt
    │       ├── network/          # Retrofit API 接口 + DTO
    │       ├── data/repository/  # 数据仓库层
    │       ├── ui/screens/       # 页面 Composable
    │       └── ui/components/    # UI 组件
    └── build.gradle.kts
关于
296.5 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号