docs: add frontend README Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com
docs: add frontend README
Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com
Aether Lens 是一个五层认知助手系统,通过 视频感知 → 语义理解 → 记忆认知 → 决策 → 执行 的流水线,为用户提供智能行动建议。
┌─────────────────────────────────────────────────────────────────┐ │ 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
五层职责:
d2lGPU
git clone https://gitlink.org.cn/caoweiqiong/Aether.git cd Aether
确保 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:
backend/c_layer/config.py
PG_CONFIG = { "host": "localhost", "port": 5432, "dbname": "memory_db", "user": "postgres", "password": "你的密码", }
cd backend pip install -r requirements.txt
主要依赖:fastapi uvicorn psycopg pgvector requests numpy
fastapi
uvicorn
psycopg
pgvector
requests
numpy
cd backend/e_layer npm install npx tsc # 编译 TypeScript → dist/mqConsumer.js
编辑 backend/config.json,填入 DeepSeek API 密钥:
backend/config.json
{ "llm_api_url": "https://api.deepseek.com/chat/completions", "llm_api_key": "sk-你的密钥", "model": "deepseek-chat", "temperature": 0.7, "max_tokens": 256, "timeout": 30 }
日常启动(不处理视频):
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"
用 Android Studio 打开(推荐):
frontend/
命令行构建:
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
http://10.0.2.2:8000
http://<PC_IP>:8000
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≠0 时 message 包含错误描述。
code=0
code≠0
message
用途:前端上传 MP4 视频,后端送入 A 层开始感知解析。
POST /api/video/upload
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}
GET /api/video/status/{job_id}
{ "job_id": "job_xxx", "status": "completed" }
status
processing
completed
failed
前端实现:主页顶部状态栏右侧 “上传视频” 按钮 → 弹出系统文件选择器 → 选中 MP4 → 调用上传接口 → 后端自动启动 A 层处理。
用途:前端显示后端五层实时运行状态,用户可设置反思触发时间。
系统有三种状态:
工作中和整理中可以同时存在——此时状态显示为「工作中 + 整理中」。
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
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 个时间点。
用途:后端 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" — 用户手动添加(前端显示添加时间)。
source: "system"
·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 角标和橙色边框,用户条目显示添加/更新时间。
用途:E 层执行完毕后生成行动卡片,推送到前端供用户确认或忽略。
两种来源:
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 类型名 + 换行 + 正文。
---
emoji 类型名 + 换行 + 正文
PUT /api/actions/{action_id} — 确认/拒绝行动
{ "decision": "confirmed" } // 确认 { "decision": "rejected" } // 忽略
确认/拒绝后该卡片不再出现在 status=pending 的列表中。
status=pending
前端实现:主页问候语下方卡片流。每张卡片显示标题 + 分段内容(带 emoji 图标)+ 「确认」「忽略」按钮。点击确认或忽略后即时消失并通知后端。
用途:用户直接输入文字指令(或语音转文字),跳过视频 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 层优先消费。
command_execution_plans
前端实现:底部 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
WS /api/actions/ws
splash
onboard/1~6
workspace
personal
device/detail
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
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
Aether Lens System v0.0.1
Aether Lens 是一个五层认知助手系统,通过 视频感知 → 语义理解 → 记忆认知 → 决策 → 执行 的流水线,为用户提供智能行动建议。
系统架构
五层职责:
部署方式
环境要求
d2lGPU环境1. 克隆仓库
2. 数据库初始化
确保 PostgreSQL 已安装并运行,然后:
数据库连接配置在
backend/c_layer/config.py:3. Python 依赖
主要依赖:
fastapiuvicornpsycopgpgvectorrequestsnumpy4. E 层编译
5. 配置 LLM API
编辑
backend/config.json,填入 DeepSeek API 密钥:6. 启动后端
日常启动(不处理视频):
带视频处理(需要 GPU 和 d2lGPU 环境):
启动过程输出示例:
停止后端:
7. 前端构建与安装
用 Android Studio 打开(推荐):
frontend/目录命令行构建:
安装到模拟器:
8. 前端连接后端
http://10.0.2.2:8000http://<PC_IP>:8000http://<服务器IP>:8000首次启动:APP 默认连接
http://10.0.2.2:8000。如需修改,进入 APP → Personal Space(右上角 YOUR SPACE)→ API Settings,添加/编辑 API 配置,填入后端地址和 API Key。前后端通信接口
所有接口统一响应格式:
code=0表示成功。code≠0时message包含错误描述。通道 1:视频上传 → A 层处理
用途:前端上传 MP4 视频,后端送入 A 层开始感知解析。
POST /api/video/uploadmultipart/form-datafile(必须)请求:
multipart/form-data,字段名file,值为 MP4 文件。响应:
轮询处理状态:
GET /api/video/status/{job_id}status可能值:processing→completed/failed前端实现:主页顶部状态栏右侧 “上传视频” 按钮 → 弹出系统文件选择器 → 选中 MP4 → 调用上传接口 → 后端自动启动 A 层处理。
通道 2:系统状态实时传输 & 反思时间设置
用途:前端显示后端五层实时运行状态,用户可设置反思触发时间。
系统有三种状态:
GET /api/status — 拉取系统状态(前端每 2 秒轮询)
反思时间管理:
GET /api/reflect/configPOST /api/reflect/schedule{"time": "14:30"}DELETE /api/reflect/schedule{"time": "14:30"}POST /api/reflect/trigger{}(或{"enable_tier1_llm": true})反思配置响应:
最多设置 3 个反思时间。
前端实现:主页顶部状态栏显示彩色圆点 + 状态文字 + 反思时间。点击时间弹出管理对话框,可添加/删除最多 3 个时间点。
通道 3:Tier1 用户核心画像
用途:后端 C 层自动整理的用户画像,前端展示并允许用户手动增删改。
Tier1 包含五个类别:
core_goalsrelationshipspreferenceshabitshealth_constraintsGET /api/tier1/{user_id} — 获取画像
条目标签:
source: "system"— C 层自动整理(前端显示·AI角标);source: "user"— 用户手动添加(前端显示添加时间)。PUT /api/tier1/{user_id} — 修改画像
前端实现:Personal Space → 我的画像 → 五组卡片网格。长按卡片可编辑或删除。右下角 + 按钮添加新条目。AI 条目带
·AI角标和橙色边框,用户条目显示添加/更新时间。通道 4:行动卡片(E 层 Planned Action)
用途:E 层执行完毕后生成行动卡片,推送到前端供用户确认或忽略。
两种来源:
GET /api/actions — 获取待处理行动卡片
content 结构化格式:各段用
---分隔。第一段为标题概述,后续每段为emoji 类型名 + 换行 + 正文。PUT /api/actions/{action_id} — 确认/拒绝行动
确认/拒绝后该卡片不再出现在
status=pending的列表中。前端实现:主页问候语下方卡片流。每张卡片显示标题 + 分段内容(带 emoji 图标)+ 「确认」「忽略」按钮。点击确认或忽略后即时消失并通知后端。
通道 5:用户指令
用途:用户直接输入文字指令(或语音转文字),跳过视频 A→B→C→D→E 流水线,指令进入优先队列直达 D/E 层。
POST /api/command
指令处理优先级高于管道事件——
command_execution_plans队列被 E 层优先消费。前端实现:底部 Hold-to-Speak Dock 有键盘按钮,点击弹出文本输入框。输入内容后点发送通过此接口传输到 E 层生成行动卡片。
其他后端接口
GET /healthGET /api/entity/listGET /api/entity/{id}GET /api/tier2/{entity_id}GET /api/tier3/recentGET /api/statsGET /api/video/jobsGET /api/reflect/historyWS /api/status/wsWS /api/actions/ws前端页面结构
splashonboard/1~6workspacepersonaldevice/detail技术栈
目录结构