Files
sentinel-home-ai/PROGRESS.md
ericwyuan c596bf7603 feat: FAM-UI deployed on NAS (Streamlit 1.61.1)
- Streamlit 1.61.1 + pandas 2.3.3 installed in fam-ui venv (Python 3.10)
- FAM-UI running headless on 0.0.0.0:8501, HTTP 200, health=ok
- config.yaml synced to NAS (core_url + MariaDB unix_socket)
- All 5 services now running: FAM-Core, FAM-Edge, FAM-UI, MariaDB, Ollama
- PROGRESS.md: task 27 complete
2026-08-20 00:36:37 +08:00

149 lines
7.9 KiB
Markdown
Raw 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.
# 项目进度追踪
> 最后更新: 2026-08-20 00:35
## 服务运行状态
| 服务 | 节点 | 地址 | 状态 | 验证结果 |
|------|------|------|------|---------|
| FAM-Core | NAS | 0.0.0.0:8000 | ✅ 运行中 | health=ok, Python 3.10 venv, API 全部测试通过 |
| FAM-Edge | Oracle | 0.0.0.0:5000 | ✅ 运行中 | health=ok, chat proxy 已验证 |
| MariaDB | NAS | 127.0.0.1:3306 | ✅ 运行中 | 10.11.11, 6 张表, utf8mb4 |
| Ollama | Oracle | 127.0.0.1:11434 | ✅ 运行中 | llava-phi3, 通过 FAM-Edge 代理访问 |
| Tailscale | Oracle ↔ NAS | 100.74 ↔ 100.70 | ⚠️ 待修复 | Tailscale 运行但端口不通当前用公网IP |
| FAM-UI | NAS | 0.0.0.0:8501 | ✅ 运行中 | Streamlit 1.61.1, HTTP 200, health=ok |
## 环境状态
### Oracle Cloud (129.146.203.203) - FAM-Edge 节点
| 项目 | 状态 | 备注 |
|------|------|------|
| OS | Ubuntu 20.04 ARM64 | Ampere A1 2C12G |
| Python | 3.8.10 | python3-venv 已安装 |
| pip | 25.0.1 (venv内) | |
| FFmpeg | 已安装 | apt 安装 |
| Ollama | 0.32.14 | |
| llava-phi3:latest | 2.9 GB 已拉取 | |
| Python 依赖 | 全部安装成功 | flask, gunicorn, requests, PyYAML, opencv, numpy |
| 模块导入验证 | PASS | FAM-Edge 全部 8 个模块导入正常 |
| 代码部署 | /opt/fam-edge/ | rsync 同步 |
| venv | /opt/fam-edge/venv/ | 已创建 |
| Tailscale | 1.102.2 已安装 | **待用户认证** |
### Synology NAS (192.168.50.64) - FAM-Core + FAM-UI 节点
| 项目 | 状态 | 备注 |
|------|------|------|
| 型号 | DS220+ (Geminilake) | DSM 7 |
| Python | 3.8.15 (系统) + 3.10.20 (venv) | FAM-Core/UI venv 使用 Python 3.10 |
| pip3 | venv 内可用 | fam-core/venv + fam-ui/venv |
| MariaDB | **10.11.11 已运行** | 端口 3306, root 密码 iLoveJava5! |
| sentinel_home_ai 库 | **6 张表已创建** | DDL 执行成功 |
| Docker | 24.0.2 (ContainerManager) | 路径 /var/packages/ContainerManager/target/usr/bin/docker |
| Tailscale | **已运行** | IP: 100.70.234.39, hostname: ericwyuan-nas |
| FAM-Core venv | ✅ 已创建 | Python 3.10.20, flask/PyMySQL/gunicorn/PyYAML/requests |
| FAM-UI venv | ✅ 已创建 | Python 3.10.20, Streamlit 1.61.1 + pandas 2.3.3 |
| Streamlit | ✅ 已安装 | 1.61.1, 运行于 0.0.0.0:8501 (headless) |
### 网络互通 (Tailscale)
| 节点 | Tailscale IP | 状态 |
|------|-------------|------|
| NAS (ericwyuan-nas) | 100.70.234.39 | 已连接 |
| Oracle (oracle-fam-edge) | 待认证 | **需用户访问认证 URL** |
| 当前方案 | Oracle Tailscale 待认证,认证后可直连 | |
## 模型可行性基准测试 (Task 1.4)
### 测试环境
- Oracle Ampere A1 2C12G ARM64
- Ollama 0.32.14 + llava-phi3:latest (2.9 GB)
- Python 3.8.10 + requests
### 测试结果
| 场景 | 加载时间 | Prompt 处理 | 生成时间 | Token 数 | 总耗时 | 是否达标(≤8s) |
|------|---------|------------|---------|---------|--------|-------------|
| 冷启动 (首次推理) | 54.56s | 37.40s | 17.22s | 86 | 109.21s | 否 (首次加载) |
| 预热 (无限制) | 0.06s | 0.20s | 13.06s | 65 | 13.35s | 否 |
| 预热 (num_predict=30) | 0.07s | 1.41s | 2.83s | 15 | **4.34s** | **PASS** |
### 结论
1. **冷启动延迟**: 首次推理需加载 2.9GB 模型到内存,耗时 ~55s。建议通过 systemd keep-alive 或定时心跳保持模型常驻
2. **预热性能**: 模型加载后,单图推理可控制在 4-5s限制输出 30 token满足 ≤8s 设计目标
3. **ARM CPU 瓶颈**: token 生成速度 ~0.1-0.2s/token多帧分析(5-8帧)需合理设置 `num_predict`(默认 500)
4. **已优化**: OllamaAdapter 新增 `num_predict` 可配置参数,默认 500
## 任务进度
### 已完成
| # | 任务 | 提交 | 日期 |
|---|------|------|------|
| 1 | 项目骨架 + 全部 Python 模块代码 | `d741ade` 等 | 2026-08-19 |
| 2 | DDL 数据库建表脚本 | `d741ade` | 2026-08-19 |
| 3 | 部署脚本 + 文档 | `d741ade` | 2026-08-19 |
| 4 | __init__.py 导出链路 | `c45464c` | 2026-08-19 |
| 5 | Storage-Cleaner 补全 | `5e4587b` | 2026-08-19 |
| 6 | 服务器凭证写入 README | `ba905d2` | 2026-08-19 |
| 7 | requirements.txt 兼容 Python 3.8 | `c1bfac5` | 2026-08-19 |
| 8 | Oracle 部署: venv + 依赖 + 导入验证 | `50d8353` | 2026-08-19 |
| 9 | 模型基准测试 (llava-phi3 ≤8s PASS) | `50d8353` | 2026-08-19 |
| 10 | OllamaAdapter 优化 (num_predict) | `50d8353` | 2026-08-19 |
| 11 | Tailscale 安装 (Oracle + NAS) + 认证 | `e5ac667` | 2026-08-19 |
| 12 | NAS MariaDB DDL 执行 (6 张表) | `e5ac667` | 2026-08-19 |
| 13 | db_layer.py 切换 PyMySQL (45KB 替代 19MB) | ✅ 完成 | 2026-08-19 |
| 14 | config_loader.py 路径修复 (3 级 dirname) | ✅ 完成 | 2026-08-19 |
| 15 | NAS Python 依赖安装 (flask/gunicorn/pymysql/PyYAML) | ✅ 完成 | 2026-08-19 |
| 16 | NAS 代码部署 + FAM-Core 导入验证 PASS | ✅ 完成 | 2026-08-19 |
| 17 | NAS DB 连接验证 PASS (PyMySQL → MariaDB 10.11.11) | ✅ 完成 | 2026-08-19 |
| 18 | config.yaml 实际配置 (FAM-Core + FAM-Edge + FAM-UI) | ✅ 完成 | 2026-08-19 |
| 19 | NAS 启动 FAM-Core (gunicorn, Python 3.10 venv) | ✅ 完成 | 2026-08-19 |
| 20 | Oracle 启动 FAM-Edge (gunicorn) | ✅ 完成 | 2026-08-19 |
| 21 | MariaDB JSON 路径兼容修复 (name_member) | ✅ 完成 | 2026-08-20 |
| 22 | FAM-Core API 全端点测试通过 | ✅ 完成 | 2026-08-20 |
| 23 | FAM-Edge 聊天代理端点 (/api/edge/chat) | ✅ 完成 | 2026-08-20 |
| 24 | FAM-UI PyMySQL 迁移 | ✅ 完成 | 2026-08-20 |
| 25 | FAM-Core 配置切换至 Oracle 公网 IP | ✅ 完成 | 2026-08-20 |
| 26 | 端到端聊天验证 (Core→Edge→Ollama) | ✅ 完成 | 2026-08-20 |
| 27 | NAS 安装 Streamlit + pandas + 部署 FAM-UI | ✅ 完成 | 2026-08-20 |
### 待完成
| # | 任务 | 依赖 | 优先级 |
|---|------|------|--------|
| 28 | 视频端到端集成测试 | FAM-UI ✅ | 高 |
| 29 | 单元测试 (JSON parser, circuit breaker, schema) | - | 中 |
| 30 | Tailscale 防火墙修复 (NAS↔Oracle) | - | 低 |
## 技术决策记录
1. **移除 google-generativeai SDK 硬依赖** - 代码用 requests 直接调 REST API兼容 Python 3.8
2. **rsync 替代 git clone** - Oracle 无法直连 NAS Gitea (无 Tailscale),用 rsync 从本地同步
3. **num_predict 参数** - ARM CPU 上 llava-phi3 生成速度较慢,限制输出 token 数控制延迟
4. **PyMySQL 替代 mysql-connector-python** - 45KB 纯 Python 替代 19MB C 扩展NAS 无需编译
5. **MariaDB JSON 路径兼容** - MariaDB 10.11 不支持 MySQL 的 `$[*]` 通配符 JSON 路径和 `->` 操作符name_member() 改用 Python 层解析 + 逐行 UPDATE
6. **Python 3.10 venv** - NAS 系统 Python 3.8 过旧,用 Synology Python3.10 包创建 venv
7. **FAM-Edge 聊天代理** - Ollama 端口 11434 未对外暴露FAM-Edge 新增 /api/edge/chat 代理转发至本地 Ollama
8. **Oracle 公网 IP 替代 Tailscale** - Tailscale 两节点在线但端口不通防火墙edge_url 和 ollama_url 改用 Oracle 公网 IP 129.146.203.203
## FAM-Core API 测试结果 (2026-08-20)
| 端点 | 方法 | 测试数据 | 结果 |
|------|------|---------|------|
| /health | GET | - | ✅ `{"service":"fam-core","status":"ok"}` |
| /api/status | GET | - | ✅ `{"dispatcher_running":true,"scheduler_running":true}` |
| /api/member/list | GET | - | ✅ 返回 2 名成员 (人物A未命名, 人物B=汤圆) |
| /api/member/unnamed | GET | - | ✅ 返回 1 名未命名成员 (人物A) |
| /api/member/name | POST | 人物A→张三 | ✅ 成功命名, 0 条事件记录回溯更新 |
| /api/chat/ask | POST | "今天有什么事件?" | ✅ 端到端成功, 回答"今天没有观察到张三" |
## 端到端聊天链路验证 (2026-08-20)
```
用户 → FAM-Core (NAS:8000) → FAM-Edge (Oracle:5000) → Ollama (Oracle:11434)
/api/edge/chat 代理 /api/generate 本地
```
- FAM-Core 调用 `ollama_url` 配置的 `http://129.146.203.203:5000/api/edge/chat`
- FAM-Edge 代理转发至 `http://127.0.0.1:11434/api/generate`
- 回答正常返回chat_history 记录已保存 (chat_id=1)