前情提要
最近完成了 TiddlyRAG 的 POC,
https://github.com/FlySkyPie/tiddlyrag-poc/tree/poc/type-a
簡單來講這是一個伺服器,能把 TiddlyWiki 轉換成可以被 MCP 檢索的資料,專案的目的不僅指於此,不過 POC 的目的僅限驗證「TiddlyWiki→MCP 檢索」這件事。

TiddlyRAG 是我面對 LLM 浪潮的回答,它建立在有點複雜的哲學觀之上,一言難盡,有興趣的人可以瀏覽我之前發過得一些廢文:
- 2025-09-09 LLM 與機械手臂的類比
- 2025-10-06 一種人類友善 llms.txt 構想
- 最早我公開提這個概念最早可以追朔到去年十月。
- 2025-10-06 回到一切的原點、LLM 系統的基石 - LLMs.txt、向量資料庫與 RAG
- 2026-03-17 軟體成長陷阱
- 2026-04-20 自由不是免費的,談開源與當今 LLM 的發展
- 2026-04-29 TiddlyWiki is better llm.txt
- 本體領域驅動開發 (ODDD, ontology-domain driven design)
- 試著把我對於軟體開發的哲學觀抽出來寫成一個 TiddlyWiki。
POC 完成之後我有幾個繼續前進的方向:
- 非同步資料處理
- LLM 摘要與嵌入運算是相對花時間的吃重運算,目前實作僅用於 POC 目的,因此是把一次 HTTP request 掛著直到所有任務完成,生產環境並不適用這種作法。
- Graph 演算法
- 目前僅只用最基本的嵌入向量搜尋,尚未對資料建立圖譜 (Graph)。
- 卡片化 (Zettelize)
- 研究並建立將其他類型資料轉換成 TiddyWiki 的資料流水線,例如:Git 庫或 PDF。
我決定先研究 Zettelize,列了幾個可以研究的方向:
- https://github.com/AsyncFuncAI/deepwiki-open
- 16k ⭐
- https://github.com/AIDotNet/OpenDeepWiki
- 3.1k ⭐
- https://github.com/CodeGraphContext/CodeGraphContext
- 3.1k ⭐
- https://github.com/microsoft/markitdown
- 110k ⭐
- https://github.com/yamadashy/repomix
- 23.6k ⭐
- https://github.com/jimmc414/onefilellm
- 1.9k ⭐
- https://github.com/coderamp-labs/gitingest
- 14.3k ⭐
最後我選擇先看看 AsyncFuncAI/deepwiki-open,沒想到卻陷入糞(Code)坑之中,雖然現在已經有下一步的計畫了,但是不寫一篇噴它一下難消我心頭氣,於是就決定寫一篇紀錄一下,畢竟負面教材也是教材。
info
【聲明】 以下內容可能用字比較強烈,但是這是對事不對人,純屬閱讀品質低下程式碼造成後的情緒釋放,對原作者絕對沒有惡意。
差勁的 Dockerfile
文件上寫的安裝步驟是從 Git repo 用 Docker Compose 運行:

但是從 YAML 中並沒有看到 image,需要自己本地建置:
services:
deepwiki:
build:
context: .
dockerfile: Dockerfile
ports:
- "${PORT:-8001}:${PORT:-8001}" # API port
- "3000:3000" # Next.js port
env_file:
- .env
environment:
- PORT=${PORT:-8001}
- NODE_ENV=production
- SERVER_BASE_URL=http://localhost:${PORT:-8001}
- LOG_LEVEL=${LOG_LEVEL:-INFO}
- LOG_FILE_PATH=${LOG_FILE_PATH:-api/logs/application.log}
volumes:
- ~/.adalflow:/root/.adalflow # Persist repository and embedding data
- ./api/logs:/app/api/logs # Persist log files across container restarts
# Resource limits for docker-compose up (not Swarm mode)
mem_limit: 6g
mem_reservation: 2g
# Health check configuration
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:${PORT:-8001}/health"]
interval: 60s
timeout: 10s
retries: 3
start_period: 30s
info
後來才看到 GitHub 上其實有預建置的 Image。
所以就檢查一下它的 Dockerfile,然而映入眼簾的是這的東西:

被噴的一臉屎猝不及防。
它試圖在同一個容器同時運行 Node.js 和 Python,然後用一段嵌入在 Dockerfile 的 Shell Script 直接運行兩個 process,撇開混合 Node.js 和 Python 兩種環境不談,這裡直接犯了兩個錯誤:
- 義大利麵程式碼:容器的 entrypoint 應該放在獨立的檔案而不是嵌在 Dockerfile 內。
- 行程管理:這種作法的 process 管理十分糟糕,經典的作法有 supervisord 或是比較潮的 s6 overlay 都可以有效的解決這個問題,而不是直接用 Shell Script 的背景執行硬幹。
差勁的嵌入模型抽象
