Chuyển đến nội dung chính

第 1 課:AI Agent 平台架構概述

為什麼需要一個平台而不是單一腳本? Gateway + Monorepo 架構、雙資料庫設計(PostgreSQL + MongoDB + Redis)、技術堆疊決策。分析 xClaw 源代码。

🧠 人工智慧與機器學習 — 第 0 課 第 1 課:AI Agent 架構概述 平台

從零開始搭建AI代理平台-與xClaw實戰

第 1 部分:Monorepo 架構與平台

亞洲開發網

簡介

您可以用 20 行程式碼編寫一個呼叫 OpenAI API 的 Python 腳本。但當需要時:

  • 支援10個不同的法學碩士提供者並具有自動回退功能?
  • 多租戶 — 許多組織共享相同的平台但資料隔離?
  • 視覺化工作流程建立器,因此不知道如何編碼的人也可以建立 AI 管道?
  • 插件系統根據每個行業(醫療保健、金融、法律)進行擴展?
  • 聊天頻道同時連接 Telegram、Discord、Slack、Zalo?

那麼您需要一個人工智慧代理平台——而不是腳本。


1. 為什麼需要平台?

1.1 腳本與平台

方面單一腳本人工智慧代理平台
法學碩士提供者硬編碼 1 提供者10+ 供應商,自動回退
使用者1 開發人員多租用戶、RBAC
知識無RAG 管道 + 知識庫
自動化手動觸發器視覺化工作流程引擎
可擴充性編輯代碼外掛系統、網域包
頻道CLI / APITelegram、Discord、Slack、Web...
監控控制台日誌審核日誌、指標、儀表板

1.2 實際問題

想像一下您正在為一家公司建立人工智慧:

CEO:     "Tôi muốn chatbot hỗ trợ khách hàng trên Telegram và Zalo"
CTO:     "Phải hỗ trợ nhiều LLM, có thể chuyển provider khi cần"
Dev:     "Cần workflow automation cho quy trình nội bộ"
Legal:   "Data giữa các phòng ban phải cách ly, có audit log"
Finance: "Agent phải hiểu domain tài chính"

一個劇本並不能滿足一切。你需要一個平台。


2. xClaw 概述架構

xClaw 採用 Gateway + Monorepo 架構:

┌─────────────────────────────────────────────────────┐
│                    Clients                           │
│  Web App │ Telegram │ Discord │ Slack │ Zalo │ CLI   │
└─────────────────┬───────────────────────────────────┘
                  │ HTTP / WebSocket / Bot APIs
                  ▼
┌─────────────────────────────────────────────────────┐
│              API Gateway (@xclaw-ai/gateway)         │
│              Hono — Port 3000                        │
│  ┌──────┬──────┬──────┬──────┬──────┬──────┐        │
│  │ Auth │ RBAC │ Rate │ CORS │ Audit│ PII  │        │
│  │      │      │Limit │      │ Log  │Filter│        │
│  └──────┴──────┴──────┴──────┴──────┴──────┘        │
├─────────────────────────────────────────────────────┤
│              Core Engine (@xclaw-ai/core)            │
│  ┌──────────┬────────────┬──────────┬────────────┐  │
│  │  Agent   │  LLM       │  RAG     │ Workflow   │  │
│  │  Engine  │  Router    │  Engine  │ Engine     │  │
│  ├──────────┼────────────┼──────────┼────────────┤  │
│  │  Tools   │  Skills    │  Memory  │ Monitoring │  │
│  │  Registry│  Manager   │  Manager │ Store      │  │
│  └──────────┴────────────┴──────────┴────────────┘  │
├─────────────────────────────────────────────────────┤
│                 Data Layer                           │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐          │
│  │PostgreSQL│  │ MongoDB  │  │  Redis   │          │
│  │(Config)  │  │(AI/Chat) │  │ (Cache)  │          │
│  └──────────┘  └──────────┘  └──────────┘          │
└─────────────────────────────────────────────────────┘

2.1 為什麼要採用這種架構?

網關模式:

  • 所有客戶的單一入口點
  • 中間件鏈:Auth → RBAC → Rate Limit → Route Handler
  • 輕鬆新增頻道而不影響核心

Monorepo 模式:

  • 所有包之間共用類型
  • 建造順序清晰,附有項目參考
  • 原子變更 - 編輯類型定義,所有套件同時更新

3. 雙資料庫設計

最重要的架構決策:根據資料性質分離資料庫。

3.1 PostgreSQL — 結構化設定數據

tenants ──┬── tenantSettings
          ├── users ──── userRoles ──── roles ──── rolePermissions ──── permissions
          ├── oauthAccounts
          ├── workflows ──── workflowExecutions
          ├── integrationConnections
          └── webhooks

**為什麼選擇 PostgreSQL? **

  • ACID事務-確保使用者/角色操作的一致性
  • 關係連線-跨多個表格查詢使用者權限
  • Drizzle ORM — 類型安全、編譯時 SQL 驗證
  • 模式遷移—版本控制資料庫模式

3.2 MongoDB — 靈活的人工智慧數據

sessions ──── messages
agent_configs
memory_entries
audit_logs (TTL: 90 days)
system_logs (TTL: 30 days)

**為什麼選擇 MongoDB? **

  • 靈活的模式-人工智慧訊息具有複雜的結構(工具呼叫、圖像、嵌入)
  • 時間序列 TTL — 自動清理審核日誌、系統日誌
  • 文件儲存-無需標準化聊天記錄
  • 高寫入吞吐量-許多並發聊天會話

3.3 Redis — 記憶體緩存

  • 會話快取-避免每個要求的資料庫往返
  • 速率限制計數器
  • 即時指標聚合

4. 技術堆疊決策

決定選擇考慮的替代方案原因
語言打字稿Python、Go、Rust全端(後端+前端),良好的LLM SDK生態
API架構榮譽資格Express、Fastify、Koa輕量級、Web 標準、邊緣就緒、良好的中間件
前端React 19 + ViteNext.js、Vue、SvelteVite HMR 速度快,最大的 React 生態
國家管理祖斯坦Redux、Jotai、MobX輕量級,無樣板
PG ORM細雨Prisma、TypeORM、Kysely類型安全的 SQL,無運行時開銷,輕鬆自訂查詢
授權JWT + bcryptPassport.js、Auth0自託管、簡單、無第三方依賴
建造碼頭工人K8s,裸機開發人員的 Docker Compose,以後可輕鬆擴展到 K8s
模組環境管理通用JS標準、驚天動地、頂級等待

5. Monorepo 結構

xClaw/
├── packages/
│   ├── shared/          # Foundation types & constants
│   ├── core/            # Agent engine, LLM, RAG, workflow, monitoring
│   │   └── src/
│   │       ├── agent/       # Agent class, EventBus
│   │       ├── llm/         # LLM adapters, router
│   │       ├── rag/         # RAG engine, vector store, embeddings
│   │       ├── workflow/    # Workflow engine, node handlers
│   │       ├── tools/       # Tool registry
│   │       ├── skills/      # Skill manager
│   │       ├── memory/      # Memory manager
│   │       ├── streaming/   # Stream utilities
│   │       ├── monitoring/  # Metrics collection
│   │       ├── guardrails/  # Input/output safety
│   │       ├── tracing/     # Distributed tracing
│   │       └── plugins/     # Plugin loader
│   ├── db/              # Drizzle ORM (PG) + MongoDB driver
│   │   └── src/
│   │       ├── schema/      # Drizzle table definitions
│   │       ├── migrations/  # SQL migrations
│   │       ├── mongo.ts     # MongoDB connection
│   │       ├── seed.ts      # Initial data
│   │       └── monitoring-store.ts
│   ├── gateway/         # Hono HTTP server, all API routes
│   │   └── src/
│   │       ├── auth.ts      # Login, register, JWT
│   │       ├── chat.ts      # Chat endpoint
│   │       ├── knowledge.ts # RAG endpoints
│   │       ├── workflows.ts # Workflow CRUD + execute
│   │       ├── rbac.ts      # RBAC management
│   │       ├── monitoring.ts
│   │       └── ... (30+ route files)
│   ├── server/          # Entry point, startup orchestration
│   ├── integrations/    # 11 service connectors
│   ├── domains/         # 13 industry domain packs
│   ├── skills/          # Built-in skills
│   ├── skill-hub/       # Marketplace, MCP adapters
│   ├── ml/              # 12 ML algorithms, AutoML
│   ├── cli/             # CLI interface
│   ├── sandbox/         # Sandboxed code execution
│   ├── web/             # React frontend
│   └── channels/        # Telegram, Discord, Slack, Zalo, MS Teams
├── docker-compose.yml
├── Dockerfile
└── package.json

建置順序(項目參考)

shared → db → core → integrations → domains → ml → skills → skill-hub → gateway → server

每個包都清楚地聲明了它的依賴關係 tsconfig.json 項目參考。建構 server 將自動按順序建立所有依賴項。


6. 實踐:探索 xClaw

6.1 克隆並運行

git clone --recurse-submodules https://github.com/xdev-asia-labs/xClaw.git
cd xClaw
cp .env.example .env
docker compose up --build

6.2 訪問

# Login
curl -X POST http://localhost:3000/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]", "password": "password123"}'

# Kết quả: {"token": "eyJhbG..."}

6.3 探索原始碼

打開IDE,看一下主要檔案:

文件功能
packages/shared/src/types/所有 TypeScript 類型
packages/core/src/agent/agent.ts代理類別-平台的核心
packages/core/src/llm/llm-router.tsLLM路由與後備
packages/core/src/rag/rag-engine.ts完整的 RAG 管道
packages/core/src/workflow/workflow-engine.ts工作流程執行
packages/gateway/src/gateway.ts榮譽伺服器設定
packages/db/src/schema/資料庫架構

7. 總結

透過這篇文章您已經了解了:

  • 為什麼我們需要人工智慧代理平台而不是單一腳本
  • Gateway + Monorepo Architecture — 高效率的程式碼組織
  • 雙資料庫設計 — PostgreSQL用於配置,MongoDB用於AI數據,Redis用於緩存
  • 技術堆疊決策 — 選擇 TypeScript、Hono、Drizzle、React 的原因
  • xClaw的原始碼結構

下一篇文章: 我們將從頭開始設定 TypeScript monorepo — npm 工作區、專案參考、共用類型。