在資訊爆炸的時代,IT 人員每天面對大量的技術文件、技術文章、GitHub Repository 與會議紀錄。傳統的關鍵字搜尋(Keyword Search)往往難以精準找到跨文件的解答。透過 RAG(Retrieval-Augmented Generation,檢索增強生成) 技術,我們可以將個人的筆記與知識資產(如 Notion、Obsidian、PDF)與 LLM 結合,打造一個隨時可問答且絕不幻覺的「第二大腦(Second Brain)」。
本篇將探討如何從零建構專屬於個人的 AI 知識庫檢索系統。
[ 個人文件 (PDF/Markdown) ] ──> [ Chunking 切片 ] ──> [ Embedding 向量化 ] ──> [ Vector Database ]
│
[ 使用者提問 ] ─────────────────> [ 語意檢索Top-K文件 ] ──────────────────────────────┘
│
▼
[ LLM + Context 產生精準回答 ]
Document Chunking(文件切片):將長篇技術文件依據段落或 Markdown 標題拆解為適當大小的片段(如 500-1000 tokens)。
Vector Embedding(向量化):利用 Embedding 模型(如 OpenAI text-embedding-3-small 或 HuggingFace 本地模型)將文字轉化為高維度向量。
Vector Store(向量資料庫):儲存向量以利後續進行餘弦相似度(Cosine Similarity)檢索。
Python
from langchain_community.document_loaders import DirectoryLoader, MarkdownLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
loader = DirectoryLoader('./my_notes', glob="**/*.md", loader_cls=MarkdownLoader)
docs = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=600, chunk_overlap=100)
splits = text_splitter.split_documents(docs)
vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
prompt = ChatPromptTemplate.from_template("""
請僅根據以下提供的參考資料來回答問題。若資料中未提及,請直接回答「我的知識庫中沒有相關資訊」,切勿編造。
問題:{input}
""")
document_chain = create_stuff_documents_chain(ChatOpenAI(model="gpt-4o"), prompt)
qa_chain = create_retrieval_chain(retriever, document_chain)
response = qa_chain.invoke({"input": "我上次紀錄的 Docker Compose 部署步驟是什麼?"})
print(response["answer"])
3. 開源與開箱即用的個人 RAG 工具推薦
如果不打算手寫程式碼,目前社群有許多成熟且具備 GUI 介面的開源工具,能直接連結你的知識庫:
工具名稱 核心特色與優勢 適用場景
AnythingLLM / Dify 支援全在地端部署(搭配 Ollama),具備完整的權限管理與多種檔案格式(PDF, DOCX, MD)匯入。 企業內部知識庫或隱私要求極高的個人資料。
Obsidian + Smart Connections 外掛 無縫整合 Obsidian Markdown 筆記,直接在筆記軟體內對所有歷史筆記進行語意搜尋與 AI 對話。 個人筆記狂熱者與卡片盒筆記法(Zettelkasten)實踐者。
NotebookLM (Google) 上傳資料來源後自動生成摘要、時間軸、FAQ 甚至 Podcast 語音討論,檢索準確度極高。 快速閱讀大量研討會論文、書籍 PDF 或專案 Spec 文件。
今日小結
建立個人化 RAG 系統的本質,是在打造一個可持續累積、可檢索且不遺忘的記憶外掛。透過將技術學習歷程與實戰經驗結構化輸入知識庫,未來遇到重複的 Bug 或系統架構問題時,AI 就能在數秒內從你的歷史經驗中提煉出解答。
明天預告:Day 29 - AI 時代的軟體工程職涯發展:如何在生成式 AI 浪潮中建立不可替代的個人護城河