
工程團隊有個很常見的痛點:文件寫了,但沒人找得到。README、架構說明、API 文件散落在十幾個 Repo,新人 onboarding 要翻半天,老人也不見得記得當初寫在哪裡。搜尋?只要關鍵字不精準,結果就是一片空白。
這個問題困擾了我一段時間。週末用 Claude Code 做了一個 side project 嘗試解決它 — MarkdownKB,把 GitHub 上的 Markdown 文件整合成一套可以直接「問問題」的知識庫平台。
一句話描述:輸入一個 GitHub Repo,系統自動把裡面的 Markdown 文件建成向量索引,之後就可以用自然語言提問,像問 ChatGPT 一樣問你自己的文件。
回答會附上引用來源(是哪一篇文件、哪一段),不是憑空捏造,也支援多輪對話,可以追問、澄清。
| 技術 | 用途 |
|---|---|
| ASP.NET Core | 後端 API |
| PostgreSQL + pgvector | 文件儲存 + 向量索引 |
| OpenAI | Embedding 生成、GPT 問答 |
| LINE Messaging API | LINE Bot 整合 |
| Docker | 容器化部署 |
選 pgvector 而不是獨立的向量資料庫(Pinecone、Qdrant 等),主要是想讓架構簡單一點。既然已經用 PostgreSQL 存資料,能在同一個資料庫做向量搜尋就不想多一個服務。對這個規模的專案來說,pgvector 的效能完全夠用。
整個問答流程大致如下:
純向量搜尋的問題是對精確名詞不敏感。例如搜尋某個 API 的參數名稱,向量搜尋可能找到語意相近但不包含那個參數名的文件。加入關鍵字搜尋後,這種情況明顯改善。
兩者的權重可以調整,目前設定是向量搜尋佔比稍高,但對於技術文件這類包含大量專有名詞的內容,關鍵字搜尋的權重值得再拉高一點。
LINE Bot 的整合相對簡單,主要是 Webhook 接收訊息、呼叫知識庫 API、把回答送回 LINE。
比較有趣的部分是多輪對話的狀態管理。LINE 的每一則訊息都是獨立事件,需要自己維護對話歷史。目前用 PostgreSQL 存對話 session,每個 LINE 使用者有自己的對話脈絡,閒置一段時間後自動清除。
這個功能讓 ChatGPT 可以直接呼叫 MarkdownKB 的 API。設定方式是在 ChatGPT 的 GPT 設定裡新增 Action,把 API schema 貼上去,之後這個 GPT 就能在回答問題時主動查詢你的知識庫。
對於想在 ChatGPT 介面使用但又想要回答基於自己文件的情境,這個整合蠻實用的。
開源在 GitHub,歡迎參考或貢獻:
👉 https://github.com/jeff377/markdown-kb
如果你們團隊也有類似的文件管理問題,或者對 RAG 應用有任何想法,歡迎留言交流。
📘 HackMD 原文筆記:
👉 https://hackmd.io/@jeff377/markdown-kb
📢 歡迎轉載,請註明出處
📬 歡迎追蹤我的技術筆記與實戰經驗分享
Facebook | HackMD | GitHub | NuGet