docs: 同步问答链路抽离到 ai-gateway 后的架构文档
README.md/PROGRESS.md 里大量描述还停留在"FAM-Edge 自己维护 Gemini→NVIDIA→ Ollama 问答降级链"的旧架构,跟实际代码(FAM-Edge 已改为转发客户端,模型链 整个搬到独立的 ai-gateway 服务)不一致,逐处订正: - 新增 §3.4 AI-Gateway 模块章节、部署拓扑图、Gitea 仓库表新增 ai-gateway 条目 - 模块表(FAM-Core/FAM-Edge)、API 文档、数据库 compute_provider 说明更新 - §6.2/6.3 本地 Ollama 与模型适配器章节:去掉已删除的 OllamaAdapter/role=text, 问答降级链路图重画为"FAM-Edge 转发 -> AI-Gateway 内部降级" - 修复已经损坏(合并冲突残留)且过时的 fam-edge/config.yaml 示例,新增 ai-gateway/config.yaml 示例;如实记录两份 .env 各自独立维护的实际部署状态 - PROGRESS.md 补一条 2026-08-23 变更记录 + 服务运行状态表新增 AI-Gateway 行 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
16
PROGRESS.md
16
PROGRESS.md
@@ -1,15 +1,25 @@
|
||||
# 项目进度追踪
|
||||
|
||||
> 最后更新: 2026-08-22 12:45
|
||||
> 最后更新: 2026-08-23
|
||||
|
||||
## 服务运行状态
|
||||
|
||||
| 服务 | 节点 | 地址 | 状态 | 验证结果 |
|
||||
|------|------|------|------|---------|
|
||||
| FAM-Core | NAS | 0.0.0.0:8000 | ✅ 运行中 | health=ok, gunicorn 单 worker;Oracle-Sync + MotionNotifier 轮询 SS 事件推送(游标 DB 续用/失败重试) |
|
||||
| FAM-Edge | Oracle | 0.0.0.0:5000 | ✅ 运行中 | systemd 守护(fam-edge.service);素材→运动片段分割→只分析片段;队列消费正常 |
|
||||
| FAM-Edge | Oracle | 0.0.0.0:5000 | ✅ 运行中 | systemd 守护(fam-edge.service);素材→运动片段分割→只分析片段;问答改为转发 AI-Gateway;队列消费正常 |
|
||||
| **AI-Gateway** | Oracle | 0.0.0.0:5100 | ✅ 运行中 | systemd 守护(ai-gateway.service),2026-08-23 新增;独立仓库/独立部署;`/health` 正常,端到端问答实测成功(provider=nvidia) |
|
||||
| MariaDB | NAS | 127.0.0.1:3306 | ✅ 运行中 | 10.11.11, 6 张表, utf8mb4 |
|
||||
| Ollama | Oracle | 127.0.0.1:11434 | ✅ 运行中 | qwen2.5:7b,仅智能问答兜底(不参与视觉/融合) |
|
||||
| Ollama | Oracle | 127.0.0.1:11434 | ✅ 运行中 | qwen2.5:7b,仅智能问答兜底(不参与视觉/融合);**被 AI-Gateway 调用,不再被 FAM-Edge 直接调用** |
|
||||
|
||||
## 2026-08-23 问答链路抽离为独立 ai-gateway 服务
|
||||
|
||||
- **决策**:原本嵌在 FAM-Edge 里的问答模型降级链(NVIDIA 文字模型链 → Gemini 非 flash 文字模型链 → 本地 Ollama 兜底,含 key 轮换/熔断)跟视频分析业务无关,是通用能力,抽成独立服务(OpenAI 兼容协议 `/v1/chat/completions`),除了 FAM-Edge 自己(改为转发调用),别的项目也能直接接入
|
||||
- **新增独立仓库/项目 `ai-gateway`**(http://192.168.50.64:3000/ericwyuan/ai-gateway):`app.py`(Flask,`/v1/chat/completions` 流式+非流式、`/v1/models` 占位、`/health` 免鉴权)/ `auth.py`(Bearer token 鉴权,fail-closed)/ `orchestrator.py`(`ChatOrchestrator`,按 provider 顺序降级,保留"未吐字才切换、已吐字后中途失败直接结束"语义)/ `adapters/`(NVIDIA/Gemini/Ollama,纯文本,从 fam-edge 对应适配器裁剪 chat 相关代码而来);测试 37/37 通过
|
||||
- **FAM-Edge 侧改动**(commit `5caeb29`):`qa.py` 重写为 HTTP 转发客户端(调 ai-gateway `/v1/chat/completions`,翻译回原有 `run_qa`/`run_qa_stream` 契约,`api_gateway.py` 和 FAM-Core 调用方零改动);删除 `model_adapters/ollama_adapter.py` 及其测试;`gemini_adapter.py`/`nvidia_adapter.py` 移除 `chat()`/`chat_stream()`/问答专用超时(只保留 `analyze_video`);`app.py` 移除 Ollama 预热逻辑;`config.yaml` 移除 3 个问答专用 model 条目,新增 `ai_gateway` 客户端配置块;测试 125/125 通过
|
||||
- **部署**:Oracle 新建 `/opt/ai-gateway/`(独立 venv,Python 3.8),systemd `ai-gateway.service` 守护,gunicorn 绑定 `0.0.0.0:5100`(对外直接开放,Bearer token 鉴权,用户明确选择"别的项目也能从这台机器之外访问"而不是仅本机);`AI_GATEWAY_TOKEN`/`NVIDIA_API_KEY`/`GEMINI_API_KEY*` 存在独立的 `/opt/ai-gateway/.env`(用户选择两份 `.env` 各自独立维护,而非复用 `/opt/fam-edge/.env`,代价是以后轮换 key 需要改两处)
|
||||
- **验证**:`/health` 通过;`curl` 直接测 `/v1/chat/completions`(带 token)端到端成功,provider=nvidia;FAM-Edge `/api/edge/chat/ask` 非流式 + `/api/edge/chat/ask/stream` 流式均验证通过,事件格式(`provider_trying`/`chunk`/`done`)不变,中文无乱码;队列/pending/failed 数量正常,无积压
|
||||
- **已知代价**:NVIDIA/Gemini key 现在两处各存一份(`/opt/fam-edge/.env` + `/opt/ai-gateway/.env`),非最初设计的"复用同一份",用户已知情并选择保留现状
|
||||
|
||||
## 2026-08-22 运动事件驱动架构(v3)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user