visionA/docs/autoflow/02-prd/product-positioning.md
jim800121chen fb7da5d180 chore(autoflow): migrate .autoflow/ 共享層文件至 docs/autoflow/
依 autoflow-agent workspace v2 設計把 PRD / 設計 / 架構 / 交付類
共享文件從個人層 .autoflow/(ignored)搬到 docs/autoflow/(進 git),
讓團隊可共享產品與架構文件,個人層只留 progress / review / testing 等
per-branch 筆記。

- 02-prd/        21 個檔(PRD、features、market-analysis 等)
- 03-design/     18 個檔(design-spec、wireframes、flows 等)
- 04-architecture/ 31 個檔(TDD、design-doc、ADR×14、API 規格等)
- 07-delivery/   3 個檔(project-summary、phase-0.6-handover、stage-deployment-setup)

合計 73 檔。原檔已從 .autoflow/ 移除(migration 工具執行 git mv,
但因 .autoflow/ 在 .gitignore 中、git 將此操作視為新增、無 rename history)。
2026-05-04 16:55:55 +08:00

168 lines
7.5 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.

# 2. 產品定位 — visionA Cloud vs local-tool vs edge-ai-platform POC
> 父文件:[PRD.md](PRD.md)
---
## 2.1 三個產品的關係圖
```
┌─────────────────────────────────────────────────────────────┐
│ Innovedus 產品線關係 │
│ │
│ edge-ai-platform (POC) ─── Deprecate ────> 2026 Q3 封存 │
│ │ │
│ │ 把核心模組搬過來relay / tunnel / cluster
│ ▼ │
│ visionA Cloud本專案Phase 0 雛形中) │
│ │ │
│ │ │
│ │ 共用同一套前端 UI不同 API base URL
│ │ │
│ ▼ │
│ local-tool離線版繼續維護不動
│ │
└─────────────────────────────────────────────────────────────┘
```
---
## 2.2 三者的定位比較
| 維度 | local-tool | edge-ai-platform POC | visionA Cloud |
|------|-----------|---------------------|---------------|
| 產品形態 | 桌面 AppWails 打包)| 桌面 App + Relay Server | Web SaaS |
| 網路需求 | 完全離線 | 有/無網路皆可 | 必須連網 |
| 目標場景 | 現場 demo、鎖網環境 | POC 實驗 | 遠端操作、多裝置管理 |
| 使用者數 | 單人(本機)| 單人 / POC 小隊 | 多用戶、多租戶 |
| Auth | 無 | 無token hardcode| 有(雛形 stub|
| 模型儲存 | 本機 filesystem | 本機 filesystem | S3-compat 介面 |
| 叢集推論 | ❌ 不支援 | ✅ 有POC 版)| ✅ 有(產品化)|
| Tunnel 遠端 | ❌ 不支援 | ✅ 有token = MAC hash| ✅ 有Pairing Token|
| 維護策略 | **持續維護、不變動** | **停止功能開發、2026 Q3 封存** | **主力產品,長期投入** |
---
## 2.3 核心原則:兩種模式,同一套前端
**使用者不需要選「模式」。** 前端程式碼只有一份,差別在:
```typescript
// local-tool: 前端跑在 Wails WebViewAPI base URL 是 localhost
const API_BASE = "http://127.0.0.1:3721"
// visionA Cloud: 前端跑在瀏覽器API base URL 是雲端
const API_BASE = "https://api.visiona.cloud"
```
實作上:
- visionA-frontend 編譯成兩個產物:
- `build/local/` → 餵給 local-tool 的 Wails embed`API_BASE=localhost`
- `build/cloud/` → 部署到 CDN / 雲端 hosting`API_BASE=api.visiona.cloud`
- 兩者共用 95% 的元件、頁面、store。只有
- API base URL 不同
- Auth 相關頁面(登入 / 註冊 / Pairing**只在雲端版出現**
- local-tool 特有的 Wails 控制台事件**只在離線版處理**(透過 feature flag / build flag
### 為什麼這樣做
1. **不用維護兩份 UI**:改一次 bug 兩邊都好
2. **local-tool 不被動到**Phase 0 階段 local-tool 的前端原始碼不動,等 Phase 1 再評估是否把 visionA-frontend 反向 sync 回 local-tool
3. **使用者體驗一致**:用過 local-tool 的人轉到 cloud 不用重學
### 什麼情況下共享程式碼會破功
- local-tool 的 WebSocket URL 是 `ws://127.0.0.1:3721/ws/...`cloud 是 `wss://api.visiona.cloud/ws/...` — 必須抽到 config
- local-tool 沒有 Authcloud 有 Auth — Auth 相關元件用 feature flag 隱藏
- local-tool 顯示 ServerStatusDashboardWails 控制台cloud 不該顯示 — 用 feature flag
**Design Agent 需留意**:設計規格需要標注哪些元件「只在 cloud 顯示」、哪些「只在 local 顯示」。
---
## 2.4 使用情境對照
### 情境 AFAE 阿哲做客戶 demo
| 步驟 | 傳統做法local-tool | visionA Cloud 做法 |
|------|---------------------|-------------------|
| 準備 | 帶筆電 + Kneron 裝置到客戶現場 | 客戶現場先寄一台筆電 + 裝置過去(或客戶自備),裝 local agent 並 pairing |
| Demo 中 | 筆電螢幕分享給客戶 | 阿哲自己筆電開 visionA Cloud畫面分享給客戶或客戶自己用瀏覽器打開|
| Demo 後 | 收回筆電 | 裝置留在客戶那,阿哲之後繼續用 cloud 管理 |
### 情境 BSI Sarah 管多個客戶現場
| 步驟 | 傳統做法 | visionA Cloud 做法 |
|------|---------|-------------------|
| 佈署 | 每個客戶一台筆電跑 local-toolSarah 要飛去每家 | 每個客戶佈署一台 local agent + pairingSarah 在辦公室集中管理 |
| 監控 | 打電話問客戶「現在裝置狀態?」 | 打開儀表板看所有裝置即時狀態 |
| 叢集 | 做不到 | 把多客戶的裝置組叢集,做加權 RR |
### 情境 C開發者 Mike 做模型 A/B Test
| 步驟 | 傳統做法 | visionA Cloud 做法 |
|------|---------|-------------------|
| 對比 | 手動切換模型一個一個跑 | 叢集推論,同時在 3 台裝置跑不同模型,一個畫面看結果 |
| 轉檔 | 跑去 kneron_model_converter 網站手動轉 | 從 visionA Cloud 點「轉檔」,後端打 converter API |
---
## 2.5 產品邊界(做什麼、不做什麼)
### Phase 0 做:
- ✅ 裝置管理(遠端)
- ✅ 模型管理(上傳、瀏覽)
- ✅ 推論操作Camera / Image / Video / Batch
- ✅ Pairing 流程
- ✅ 基本儀表板
- ✅ 會員系統介面stub雛形不接真的 auth
- ✅ 叢集推論(從 POC 搬)
- ✅ 轉檔整合的 API 契約(等 converter 團隊實作)
### Phase 0 不做:
- ❌ 模型訓練(那是 Edge Impulse / converter 的事)
- ❌ 真實 Auth 系統JWT、OAuth、2FA 等)— 留介面,用 stub
- ❌ 真實資料庫接入 — 用 in-memory
- ❌ 真實 S3 / MinIO — 用 local filesystem 實作 ObjectStorage 介面
- ❌ Billing、使用量計費
- ❌ Multi-region / HA 部署
- ❌ 真實 Converter 整合(等 API 建好再接)
- ❌ ObservabilityPrometheus / Grafana / Tracing
- ❌ Mobile App
### 永遠不做:
- ❌ 取代 local-tool — local-tool 的離線場景是真實需求,會一直存在
- ❌ 模型訓練功能 — 超出產品邊界
- ❌ 非 Kneron 硬體支援 — 違反產品定位
---
## 2.6 對 local-tool 的影響(必須控制)
visionA Cloud 開發過程中,**local-tool 必須保持 0 regression**。
| 項目 | 處理方式 |
|------|---------|
| local-tool 的前端程式碼 | Phase 0 完全不動 |
| local-tool 的後端程式碼 | Phase 0 完全不動 |
| local-tool 的 Go module (`visiona-local`) | 和 visionA-backend 的 module (`visiona-backend` 暫定) **完全獨立** |
| 共用程式碼 | Phase 0 不共用各自維護。Phase 1 再評估是否抽共用 pkg |
| local-tool 測試 | 繼續在 CI 跑,不能因為新專案而停擺 |
**未來Phase 1+)可能的整合方向**(不在本 PRD 範圍):
- 讓 local-tool 同時具備「pairing 上雲」的功能 → 變成同時是離線工具 + cloud agent
- 前端程式碼抽成 monorepo 共用 package
---
## 連結
- 上一章:[產品策略](strategy.md)
- 下一章:[市場分析](market-analysis.md)
- 跳回:[PRD 索引](PRD.md)