上一篇我們加入了 Agent Memory,讓 Agent 可以記住同一次對話中前面發生的內容,不過 Memory 記住的是「我們聊過什麼」,如果希望 Agent 可以查詢我們自己準備的文件就需要另一種方式。
所以今天就來加入 RAG(Retrieval-Augmented Generation),讓 Agent 可以從自己的知識庫中找資料,再根據找到的內容回答問題。
今天的架構可以簡單想成:
使用者
↓
Gemini Agent
↓
MCP Client
↓
RAG MCP Server
↓
ChromaDB
↓
知識庫
我們會先準備一些文件,將它們加入知識庫,之後 Agent 就可以透過 MCP Tool 查詢這些資料。
首先建立 rag_server.py。
這次使用 ChromaDB 儲存向量資料,並使用 Sentence Transformers 將文字轉換成 Embedding。
from mcp.server.mcpserver import MCPServer
mcp = MCPServer("Personal-RAG-Knowledge-Base")
接著初始化 ChromaDB 和 Embedding,建立我們的知識庫。
文件加入之前,也會先切成比較小的 Chunk,再交給 ChromaDB 儲存。
這次主要建立三個 Tool:
add_document:將文件加入知識庫search_knowledge_base:搜尋知識庫get_knowledge_base_status:查看知識庫狀態其中最重要的是 search_knowledge_base:
@mcp.tool()
def search_knowledge_base(query: str, top_k: int = 3) -> str:
"""查詢個人知識庫內容。"""
results = collection.query(
query_texts=[query],
n_results=min(top_k, collection.count())
)
當 Agent 傳入問題後,ChromaDB 就會找出最相關的文字片段,再將結果回傳給 Agent。
而 add_document 則負責讀取 .txt、.md、.pdf,切成 Chunk 後存進知識庫。
接著建立 rag_client.py,這部分其實和前幾天的 agent.py 很像,因為它一樣是負責連接 MCP Server 和 Gemini。
只需要指定這次的 RAG Server:
server_params = StdioServerParameters(
command="python",
args=["rag_server.py"],
)
連線之後,再透過:
result = await session.list_tools()
取得 RAG Server 提供的 Tools。
這時 Gemini 就會知道目前可以使用:
add_document
search_knowledge_base
get_knowledge_base_status
這三個 Tool 都是在 rag_server.py 裡定義的,rag_client.py 不需要重新寫一次。
首先先安裝套件 pip install google-genai "mcp[cli]" chromadb sentence-transformers pypdf 並創建 rag_client.py 和 rag_server.py 並放入相應的程式碼,隨後啟動python rag_client.py,成功應該會有以下畫面

我在這裡詢問了它目前有的工具
然後增加一個測試文件

接著告訴AI把測試文件加入知識庫,Gemini 會判斷需要使用 add_document

MCP Server 執行後,就會將文件切分並建立向量,最後加入 ChromaDB。
最後我們就可以直接詢問知識庫的內容

這次 Gemini 會呼叫 ChromaDB 找出相關內容後,再把結果傳回 Gemini,最後 Gemini 就可以根據這些資料整理出回答,並且這次記憶的文件內容不會因為重開對話而消失。
做到這裡,可以看到前一天的 Agent Memory 和今天的 RAG 解決的是不同問題。
| 功能 | 用途 |
|---|---|
| Agent Memory | 記住前面的對話 |
| RAG | 查詢外部知識 |
| MCP Tool | 讓 Agent 使用這些能力 |
今天我們將 RAG 加入 MCP Agent,透過 Embedding 和 ChromaDB,可以將文件建立成向量資料,之後根據問題找出相關內容,再透過 MCP Tool 把搜尋功能交給 Agent,讓 Gemini 可以自己判斷什麼時候需要查詢知識庫,這樣就完成了一個基本的 MCP + RAG Agent。