Files
awoooi/docs/architecture/ARCHITECTURE.md
OG T b77e151387 feat(ai): ADR-036 NVIDIA Nemotron Tool Calling 整合
Phase 20 - 提升 Tool Calling 精準度 50% → 83.3%

新增:
- src/models/nvidia.py: Pydantic Schema
- src/services/nvidia_provider.py: NvidiaProvider 類別
- tests/test_nvidia_provider.py: 15 項單元測試 (全部通過)

修改:
- ai_router.py: AIProvider.NVIDIA + route_tool_calling()
- ai_rate_limiter.py: NVIDIA 限制 (5 RPM, 100/day)
- models.json: NVIDIA 配置
- cd.yaml: Secrets 注入 NVIDIA_API_KEY

路由策略:
- Tool Calling: Nemotron → Gemini → Claude
- 一般對話: Ollama → Gemini → Claude (不變)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-29 00:00:08 +08:00

9.2 KiB
Raw Permalink Blame History

AWOOOI 架構文檔

統帥鐵律:嚴禁臨時方案,所有架構決策必須符合長期維護性

核心架構原則

Four Iron Laws (四大鐵律)

  1. Async-First - 所有 Handler 必須是 async def
  2. CORS Whitelist - 嚴格來源控制,禁止 wildcard (*)
  3. Pydantic Config - 類型安全的設定驗證
  4. structlog - 結構化 JSON 日誌

HTTP Client 架構 (2026-03-21 架構回歸)

問題背景

原始實作使用 subprocess.run(["curl", ...]) 作為 httpx 404 問題的臨時解法。 統帥明令禁止此類臨時方案,要求回歸原生 httpx AsyncClient。

永久解決方案

src/core/http_client.py - Lifespan 管理的連線池
├── get_clickhouse_client() - ClickHouse 專用 Client
├── get_general_client()    - Ollama/Gemini/Claude 通用 Client
├── init_all_http_clients() - 啟動時初始化
└── close_all_http_clients() - 關閉時清理

關鍵配置

httpx.AsyncClient(
    base_url=settings.CLICKHOUSE_URL,
    timeout=httpx.Timeout(30.0, connect=10.0),
    trust_env=False,  # 🔧 禁止 HTTP_PROXY 干擾
    limits=httpx.Limits(max_connections=100, max_keepalive_connections=20),
)

Lifespan 整合

# src/main.py
@asynccontextmanager
async def lifespan(_app: FastAPI):
    # Startup
    await init_all_http_clients()  # ✅ 連線池建立
    yield
    # Shutdown
    await close_all_http_clients()  # ✅ 連線池回收

驗證結果

Status: 200
Elapsed: 28.71ms (< 50ms 目標)
Method: httpx_native

五主機架構 (2026-03-28 K-HA 更新)

主機 IP 角色 服務
DevOps 192.168.0.110 CI/CD + 監控 Harbor:5000, GH Runner, Sentry:9000, Langfuse:3100
Security 192.168.0.112 安全掃描 Kali Scanner:8080
K3s Server #1 192.168.0.120 Control-Plane MASTER keepalived (priority=101)
K3s Server #2 192.168.0.121 Control-Plane BACKUP keepalived (priority=100)
VIP 192.168.0.125 HA Endpoint K3s API:6443 + NodePort (32334/32335)
AI+Web 192.168.0.188 AI/DB/Web Ollama:11434, OpenClaw:8089, PostgreSQL:5432 (K3s Datastore), Redis:6380, SignOz:3301

K3s 高可用架構 (ADR-033)

              VIP 192.168.0.125 (keepalived)
                       ↓
        ┌──────────────┼──────────────┐
        ▼              ▼              ▼
     mon(120)      mon1(121)    PostgreSQL(188)
   K3s MASTER    K3s BACKUP     K3s Datastore
   priority=101  priority=100   (Kine protocol)

關鍵變更 (2026-03-28)

  • 雙 Control-Plane (120+121)
  • 外接 PostgreSQL Datastore (188:5432)
  • VIP 192.168.0.125 (keepalived VRRP)
  • CI/CD kubeconfig 指向 VIP
  • 故障轉移 < 3 秒

SignOz 整合架構

┌─────────────────────────────────────────────┐
│                 AWOOOI API                   │
│                 (port 8000)                  │
├─────────────────────────────────────────────┤
│  signoz_client.py                           │
│  └── get_clickhouse_client()                │
│      └── httpx.AsyncClient (Lifespan)       │
└─────────────────┬───────────────────────────┘
                  │ HTTP POST (< 50ms)
                  ▼
┌─────────────────────────────────────────────┐
│           ClickHouse HTTP API               │
│           192.168.0.188:8123                │
├─────────────────────────────────────────────┤
│  signoz_metrics.distributed_samples_v4      │
│  - signoz_calls_total (RPS)                 │
│  - signoz_latency_count (P99)               │
└─────────────────────────────────────────────┘

AI Fallback 策略 (ADR-006 v1.3 + ADR-036)

一般對話任務

Ollama (local) → Gemini (cloud) → Claude (cloud) → mock_fallback
     ↓              ↓                 ↓                ↓
   免費           $0.001/1K        $0.003/1K        開發用
   188:11434     API Key          API Key          無 LLM

Tool Calling 任務 (ADR-036 - 待批准)

Nemotron (cloud) → Gemini (cloud) → Claude (cloud) → 拒絕執行
     ↓                  ↓                 ↓
   免費 tier         $0.001/1K        $0.003/1K
   精準度 83%        API Key          API Key
   延遲 11-45s

Provider 對照表

Provider 用途 延遲 精準度 成本
Ollama 即時對話、簡單查詢 < 5s $0
Nemotron Tool Calling、K8s 操作 11-45s 高 (83%) 免費 tier
Gemini 通用備援 2-5s 中高
Claude 複雜推理、CRITICAL 2-5s 最高

Phase 7: 視覺主權組件

已完成組件

組件 路徑 功能
GlobalPulseChart components/charts/global-pulse-chart.tsx 4 指標卡片 + Sparkline
AIProcessStepper components/charts/ai-process-stepper.tsx 5 步 AI 決策流程
TimeSeriesChart components/charts/time-series-chart.tsx 通用趨勢圖

Nothing.tech 設計語言

/* 主色調 */
--nothing-white: #FFFFFF;
--nothing-gray-50: #FAFAFA;
--nothing-gray-900: #171717;
--nothing-red: #EF4444;

/* 玻璃效果 */
.glass-card {
  background: rgba(255, 255, 255, 0.7);
  backdrop-filter: blur(16px);
  border: 1px solid rgba(0, 0, 0, 0.05);
}

Phase 6: 架構硬化 (2026-03-23)

來源: docs/ARCHITECTURE_CODE_REVIEW.md 技術債審查

項目 現狀 目標 優先級
Multi-Sig 持久化 In-Memory dict Redis Hash + Redlock 🔴 P0
GraphRAG 遷移 In-Memory dict Neo4j / Redis Graph 🔴 P0
SSE 容錯驗證 ADR-004 已規劃 驗證實作 🟢 P2
水平擴展 單實例 Redis Pub/Sub + Sticky Session 🟡 P1

Phase 8-10: 生產修復與監控

  • Phase 8: OTEL/SignOz v3/Telegram UX/Worker 分離
  • Phase 9: OpenClaw Agent Teams (多專家共識)
  • Phase 10: Sentry Self-Hosted 整合 (192.168.0.110:9000)

Phase 11: 對話式 AI UI/UX

組件 路徑 功能
ConversationalView components/conversational-view.tsx ChatGPT 風格雙欄
BatchModeSelector components/batch-mode-selector.tsx 批次處理 + 風險過濾
useKeyboardShortcuts hooks/useKeyboardShortcuts.ts Y/N 長按 + 方向鍵

Phase 12: Ollama 深度整合

  • 12.1 Tool Calling 優化 (準確率 100%)
  • 12.2 本地模型優化 (Qwen2.5:7b + ModelRouter)

Phase 13: Enterprise AIOps (規劃中)

┌─────────────────────────────────────────────────────────────┐
│                   Phase 13 Enterprise AIOps                 │
├─────────────────────────────────────────────────────────────┤
│  13.1 CI/CD 整合                                            │
│  ├── GitHub Webhook → OpenClaw                              │
│  ├── CI 失敗 → AI 診斷                                       │
│  └── AI 自動修復 (風險分級)                                   │
│                                                              │
│  13.2 Tool 實作 (P0 - Mock → 真實)                           │
│  ├── SignOz MCP (Trace/Logs/Metrics)                        │
│  ├── Kubernetes MCP (kubectl exec)                          │
│  ├── PostgreSQL MCP (歷史查詢)                               │
│  └── 維運手冊 RAG (Markdown 向量化)                          │
│                                                              │
│  13.3 智能路由                                               │
│  ├── Intent Classifier (意圖判別)                            │
│  ├── Complexity Scorer (難度評分)                            │
│  └── AI Router (動態模型選擇)                                │
└─────────────────────────────────────────────────────────────┘

變更紀錄

日期 版本 變更
2026-03-25 1.3 新增 Phase 8-13 完整進度ClawBot → OpenClaw
2026-03-22 1.1 新增 Phase 6 架構硬化 Roadmap (Code Review 來源)
2026-03-21 1.0 架構回歸:移除 subprocess+curl實作 httpx Lifespan
2026-03-21 1.0 Phase 7 視覺組件GlobalPulseChart, AIProcessStepper