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_URL、FNS_TOKEN、FNS_VAULT及FNS_CLIENT連接 fast-note-sync。FNS 是所有 wiki 內容的權威來源;olw 不會直接管理本地檔案,而是透過 FNS 進行同步。 - LiteLLM 模型層:
OLW_PROVIDER_URL指向 LiteLLM 提供的 API 端點。olw 分別使用OLW_FAST_MODEL與OLW_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,部署步驟大致如下:
- 準備項目目錄與
docker-compose.yml,內容使用上方的 services 定義。 - 建立
.env檔案,填入OLW_API_KEY、SYNTO_API_KEY、OLW_PROVIDER_URL、OLW_FAST_MODEL、OLW_HEAVY_MODEL、FNS_URL、FNS_TOKEN、FNS_VAULT、FNS_CLIENT及OLW_MCP_KEY等變數。 - 確保
cf_network已存在:docker network create cf_network。 - 啟動服務:
docker compose up -d。 - 檢查容器狀態:
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 資料目錄,對應 volumeolw_data。OLW_API_KEY與SYNTO_API_KEY:兩者共用同一金鑰,用於 API 認證。實際值應從.env讀取,不應硬編碼。OLW_PROVIDER_URL:LiteLLM 的 API 端點,所有 LLM 請求均經由此處。OLW_FAST_MODEL:快速模型名稱,用於低延遲、低成本任務。OLW_HEAVY_MODEL:重型模型名稱,用於需要深度推理的任務。FNS_URL、FNS_TOKEN、FNS_VAULT、FNS_CLIENT:FNS 連線資訊。這些變數決定 olw 如何與 fast-note-sync 同步。OLW_MCP_KEY:存取 MCP server 或相關工具的金鑰。SYNTO_MCP_PORT:可選。若不設定,唯讀 MCP server 不會啟動;若設定為如8181,則對應端口會開啟。
所有機密資料都應儲存在 .env 檔案中,並確保該檔案不會被提交到版本控制系統。
Operations¶
olw 的日常運作高度自動化。每日 06:30,QwenPaw cron 會啟動新的處理週期:
- 從 FNS 抓取尚未整理的筆記或最近修改的條目。
- 交由 LLM 根據提示詞生成草稿。
- QwenPaw 審核草稿。若內容符合質量標準,標記為 approve;否則 reject。
- 獲核准的草稿由
sync.py推送回 FNS,更新 wiki。 - 整個過程可透過容器日誌監察:
docker logs olw。
管理員可以手動進入容器執行診斷:docker exec -it olw sh。因為容器預設執行 sleep infinity,進入後並不會影響原有排程。若要檢查內部 HTTP API 是否正常,可以從 cf_network 內的其他容器存取 http://olw:8180 或 http://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_MODEL 與 OLW_HEAVY_MODEL 可獨立設置。
如果 QwenPaw 拒絕草稿,內容會遺失嗎?
不會。被 reject 的草稿通常留在暫存區或 logs,管理員可以檢查後決定是否手動修改、重新提交或直接刪除。已核准的內容才會寫回 FNS。
Related Links¶
Source¶
Coverage auto (container scan)