跳轉至

olw

Overview

olw(全名:olw — Synto;前稱 Obsidian LLM Wiki 的後繼者)是一個以大型語言模型(LLM)維護的個人 wiki 服務。olw 採用自我託管(self-hosted)模式,常見部署於 Oracle Cloud 上的 Docker 容器內。olw 的設計核心是將「快速筆記同步系統」FNS(fast-note-sync)視為唯一事實來源(source of truth),並透過 LiteLLM 統一接駁不同 LLM 模型,讓人工智能自動整理、撰寫及更新 wiki 條目。

本條目所記錄的 olw 版本為 0.7.0-synto,容器名稱是 olw。它使用外部 Docker 網絡 cf_network,並被指派靜態 IP 172.21.0.56。服務資料存放於 olw_data volume,容器內對應路徑為 /data/vault

olw 不是一個傳統的「安裝即用」應用程式;它更像一個持續運行的 LLM 寫作服務。每日清晨 06:30(香港時間),外部排程工具 QwenPaw cron 會觸發 olw 的處理管線。該管線會從 FNS 讀取筆記、交由 LLM 生成或修訂草稿,再由 QwenPaw 審核(approve/reject)。獲批准的內容會經由 sync.py 寫回 FNS,最終成為 wiki 的正式內容。

Architecture

olw 的整體架構包含以下部分:

  • olw 容器:由 olw:0.7.0-synto 映像檔建立,執行於 Docker Compose 環境。容器使用 command: ["sh", "-c", "sleep infinity"] 保持存活,等待外部觸發,而不是自行啟動常駐服務。
  • FNS 整合:olw 以 FNS_URLFNS_TOKENFNS_VAULTFNS_CLIENT 連接 fast-note-sync。FNS 是所有 wiki 內容的權威來源;olw 不會直接管理本地檔案,而是透過 FNS 進行同步。
  • LiteLLM 模型層OLW_PROVIDER_URL 指向 LiteLLM 提供的 API 端點。olw 分別使用 OLW_FAST_MODELOLW_HEAVY_MODEL 對應快速與重型任務。例如日常草稿或標題生成可使用 fast model,深度分析或長文寫作則使用 heavy model。
  • QwenPaw cron:負責每日 06:30 觸發管線。QwenPaw 不只是計時器,亦扮演「編輯審核者」角色,對 LLM 生成的草稿作出 approve 或 reject 決定。被 reject 的草稿不會進入 FNS。
  • sync.py:管線的一部分,負責將已核准的草稿轉換成 FNS 可接受的格式並推送回去。此腳本可手動執行,亦可由 QwenPaw cron 自動呼叫。
  • 內部 HTTP API:olw 在 :8180 提供 HTTP API,供 FastMCP 工具呼叫。此 API 只綁定在 cf_network 內部網絡,不會對外發布,因此其他連接到同一 Docker 網絡的容器可以安全地使用。
  • 可選 MCP 伺服器:若設定 SYNTO_MCP_PORT,olw 會在指定埠號(例如 :8181)啟用唯讀的 Synto MCP server,讓 MCP client 查詢 wiki 內容。此功能預設關閉。

Deployment

olw 在 Oracle Cloud 上的部署以 Docker Compose 為基礎。假設環境已安裝 Docker 及 Docker Compose,並已建立外部網絡 cf_network,部署步驟大致如下:

  1. 準備項目目錄與 docker-compose.yml,內容使用上方的 services 定義。
  2. 建立 .env 檔案,填入 OLW_API_KEYSYNTO_API_KEYOLW_PROVIDER_URLOLW_FAST_MODELOLW_HEAVY_MODELFNS_URLFNS_TOKENFNS_VAULTFNS_CLIENTOLW_MCP_KEY 等變數。
  3. 確保 cf_network 已存在:docker network create cf_network
  4. 啟動服務:docker compose up -d
  5. 檢查容器狀態:docker compose ps

由於服務使用 restart: unless-stopped,容器在系統重啟或崩潰後會自動恢復。靜態 IP 172.21.0.56 確保其他依賴 olw 的容器(例如 FastMCP tools 或 QwenPaw)不會因為 IP 浮動而失去連接。

Configuration

olw 的行為主要由環境變數控制。下表列出 docker-compose.yml 中的關鍵設定:

  • TZ=Asia/Hong_Kong:時區設為香港時間。每日 06:30 的 cron 觸發以此時區為準。
  • OLW_VAULT=/data/vault:容器內 wiki 資料目錄,對應 volume olw_data
  • OLW_API_KEYSYNTO_API_KEY:兩者共用同一金鑰,用於 API 認證。實際值應從 .env 讀取,不應硬編碼。
  • OLW_PROVIDER_URL:LiteLLM 的 API 端點,所有 LLM 請求均經由此處。
  • OLW_FAST_MODEL:快速模型名稱,用於低延遲、低成本任務。
  • OLW_HEAVY_MODEL:重型模型名稱,用於需要深度推理的任務。
  • FNS_URLFNS_TOKENFNS_VAULTFNS_CLIENT:FNS 連線資訊。這些變數決定 olw 如何與 fast-note-sync 同步。
  • OLW_MCP_KEY:存取 MCP server 或相關工具的金鑰。
  • SYNTO_MCP_PORT:可選。若不設定,唯讀 MCP server 不會啟動;若設定為如 8181,則對應端口會開啟。

所有機密資料都應儲存在 .env 檔案中,並確保該檔案不會被提交到版本控制系統。

Operations

olw 的日常運作高度自動化。每日 06:30,QwenPaw cron 會啟動新的處理週期:

  1. 從 FNS 抓取尚未整理的筆記或最近修改的條目。
  2. 交由 LLM 根據提示詞生成草稿。
  3. QwenPaw 審核草稿。若內容符合質量標準,標記為 approve;否則 reject。
  4. 獲核准的草稿由 sync.py 推送回 FNS,更新 wiki。
  5. 整個過程可透過容器日誌監察:docker logs olw

管理員可以手動進入容器執行診斷:docker exec -it olw sh。因為容器預設執行 sleep infinity,進入後並不會影響原有排程。若要檢查內部 HTTP API 是否正常,可以從 cf_network 內的其他容器存取 http://olw:8180http://172.21.0.56:8180

備份方面,只需要備份 olw_data volume。可透過 docker run --rm -v olw_data:/data -v $(pwd):/backup alpine tar czf /backup/olw_data.tar.gz -C /data vault 產生壓縮備份。FNS 本身已是內容源,因此恢復時只要重新連接 FNS,再恢復 volume 即可。

FAQ

olw 與 Obsidian LLM Wiki 有何分別?

olw 是 Obsidian LLM Wiki 的後繼者,代號為 Synto。最大分別在於 olw 不再依賴 Obsidian 應用程式本體,而是以 FNS 為檔案同步與版本控制核心,並使用 LiteLLM 作為模型提供者。這樣可以完全脫離圖形介面,適合部署在 Oracle Cloud 等伺服器環境。

olw 是公開服務嗎?

不是。olw 的 API 只存在於 cf_network Docker 網絡內,沒有對外發布 port。若要讓外部工具存取,需要透過 Cloudflare Tunnel、反向代理或其他與 cf_network 相連的服務進行。

每日 06:30 的 cron 由誰執行?

由 QwenPaw cron 執行。QwenPaw 是排程與審核層,在 olw 容器之外獨立運行。它負責呼叫 olw 的內部 API 或直接觸發管線,然後審核 LLM 產生的草稿。

如何手動觸發一次同步?

理論上可以向 olw 的 :8180 API 發送觸發請求,或在容器內手動執行 sync.py。實際指令視乎映像檔版本,建議查閱 olw 對應版本的 README。

是否可以用其他 LLM 平台?

可以。olw 依賴 LiteLLM 的 OLW_PROVIDER_URL,只要 LiteLLM 支援的模型都可透過環境變數切換。OLW_FAST_MODELOLW_HEAVY_MODEL 可獨立設置。

如果 QwenPaw 拒絕草稿,內容會遺失嗎?

不會。被 reject 的草稿通常留在暫存區或 logs,管理員可以檢查後決定是否手動修改、重新提交或直接刪除。已核准的內容才會寫回 FNS。

Source

Coverage auto (container scan)