iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0

⚡《AI 知識系統建造日誌》這不是一篇純技術文章,而是一場工程師的魔法冒險。程式是咒語、流程是魔法陣、錯誤訊息則是黑暗詛咒。

請準備好你的魔杖(鍵盤),我們要繼續探索如何編排基礎組件,打造穩定、可擴展的 AI 知識系統。


魔法陣中的角色 ✨

  • 儲存陣營

    • Qdrant:守護向量寶石的寶庫
    • PostgreSQL:存放論文資料與元資料的書庫
    • MinIO:存放 PDF 檔案與中間結果的倉庫(可選)
  • 後端陣營

    • arxiv-flow:資料抓取與處理,確保知識原料齊全
    • noteserver:知識查詢與整合,對外提供魔法接口
    • email-flow:負責郵件通知,確保訊息及時送達
  • AI 魔法陣營

    • Ollama:本地 LLM,負責問答與文本生成

魔法舞台概念

  • 舞台劇比喻
    • 劇本 = docker-compose.yml
    • 演員 = 每個容器 (container)
    • 指揮棒 = docker compose up
    • 出場順序 = depends_on

六大基礎服務的舞台編排

你也想起舞嗎

下面是我們的七大服務舞台編排示例,每個小精靈都有自己的任務與資源。

networks:
  langfuse-otel-net:
    external: true

services:
    noteserver:
      build:
        context: .
        dockerfile: ./services/noteservice/Dockerfile.noteserver
      image: noteserver:latest
      container_name: note
      volumes:
        - ./note:/app
        - ./data/noteserver:/data
      ports:
        - "8022:8000"
      env_file:
        - .env
      depends_on:
        - arxiv-worker
        - postgres
        - qdrant
      networks:
        - ai-net

    ollama:
      image: ollama/ollama
      container_name: hi-ollama
      ports:
        - "11434:11434"
      volumes:
        - ./ollama_models:/root/.ollama
      networks:
        - ai-net

    arxiv-flow:
      build:
        context: .
        dockerfile: ./services/arxivservice/Dockerfile.arxiv
      image: arxiv-flow:latest
      container_name: arxiv-flow
      command: bash /app/deploy_flows.sh
      volumes:
        - ./arxiv:/app
        - ./data/arxiv_flow:/data
      env_file:
        - .env
      networks:
        - ai-net

    email-flow:
      build:
        context: .
        dockerfile: ./services/emailservice/Dockerfile.email
      image: email-flow:latest
      container_name: email-flow
      command: bash /app/deploy_flows.sh
      volumes:
        - ./email:/app
      env_file:
        - .env
      networks:
        - ai-net

    postgres:
      image: postgres:15
      container_name: postgres
      environment:
        POSTGRES_USER: user
        POSTGRES_PASSWORD: password
        POSTGRES_DB: ai_db
      volumes:
        - ./data/postgres:/var/lib/postgresql/data
      ports:
        - "5432:5432"
      networks:
        - ai-net

    qdrant:
      image: qdrant/qdrant:v1.2.0
      container_name: qdrant
      ports:
        - "6333:6333"
      volumes:
        - ./data/qdrant:/qdrant/storage
      networks:
        - ai-net
      
    orion:
      image: prefecthq/prefect:3-latest
      container_name: prefect-orion
      command: prefect server start --host 0.0.0.0 --port 4200
      ports:
        - "4200:4200" # Web UI + API
     environment:
        PREFECT_API_DATABASE_CONNECTION_URL: sqlite+aiosqlite:///prefect.db
      volumes:
        - ./data/prefect_data:/root/.prefect
      networks:
        - langfuse-otel-net

每個服務都是舞台上的小精靈。設定好依賴與網絡,才能確保演出順暢。


魔法指令

  • 啟動舞台
docker compose up -d

背景執行魔法,小精靈出現在舞台上,不干擾你的控制台。

  • 編譯魔法材料
docker compose build

把 Dockerfile 轉化為魔法石,準備施法材料。

  • 收回魔法小精靈
docker compose down

讓舞台恢復平靜,容器與網絡都被收回。

  • 查看小精靈動態
docker compose logs -f

即時追蹤每個容器的行為,便於偵錯。

  • 進入魔法世界
docker compose exec noteserver bash

可以直接操作容器內部,觀察或測試內部流程。


魔法設計考量

  • 資料持久化:使用 volumes 將容器內資料同步到宿主機。
  • 服務依賴depends_on + 健康檢查,確保啟動順序。
  • 避免端口衝突:映射容器端口到不同宿主端口(例:8022:8000)。
  • 模組化部署:每個服務都有自己的 Dockerfile,Compose 負責整體編排。

常見魔法失效與解法:

魔法失效 解法
服務啟不起來 檢查依賴順序與端口衝突
資料庫連線錯誤 驗證連線字串、環境變數
向量檢索慢 確認索引建立、批量插入策略
模型回應延遲 使用非同步 API,或預熱模型
任務失敗無重試 設定 Prefect retry 與 timeout

小結:魔法舞台的協奏

今天,我見證了整個 AI 知識系統的舞台活起來:PostgreSQL 穩定存取資料,Qdrant 提供迅速向量檢索,Ollama 靈巧生成語言魔法,Prefect 精準掌控流程順序。每個小精靈都在正確的時刻出現,運作協調,宛如一場精準的魔法交響樂,為高階 AI 魔法奠定堅實而穩固的基礎。


上一篇
Day 10|Infra|魔法學院必修課:AI 系統的基礎七術
下一篇
Day 12|資料管線魔法初探:讓 AI 系統每天自動抓論文(上)
系列文
論文流浪記:我與AI 探索工具、組合流程、挑戰完整平台13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言