iT邦幫忙

2026 iThome 鐵人賽

DAY 17
0
AI Engineering

30 天探索 MCP:從基礎概念到實作系列 第 17 篇

MCP + RAG:讓 AI 可以查自己的知識庫

  • 分享至 

  • xImage
  •  

上一篇我們加入了 Agent Memory,讓 Agent 可以記住同一次對話中前面發生的內容,不過 Memory 記住的是「我們聊過什麼」,如果希望 Agent 可以查詢我們自己準備的文件就需要另一種方式。

所以今天就來加入 RAG(Retrieval-Augmented Generation),讓 Agent 可以從自己的知識庫中找資料,再根據找到的內容回答問題。


MCP + RAG

今天的架構可以簡單想成:

使用者
  ↓
Gemini Agent
  ↓
MCP Client
  ↓
RAG MCP Server
  ↓
ChromaDB
  ↓
知識庫

我們會先準備一些文件,將它們加入知識庫,之後 Agent 就可以透過 MCP Tool 查詢這些資料。


建立 RAG MCP Server

首先建立 rag_server.py。

這次使用 ChromaDB 儲存向量資料,並使用 Sentence Transformers 將文字轉換成 Embedding。

from mcp.server.mcpserver import MCPServer

mcp = MCPServer("Personal-RAG-Knowledge-Base")

接著初始化 ChromaDB 和 Embedding,建立我們的知識庫。

文件加入之前,也會先切成比較小的 Chunk,再交給 ChromaDB 儲存。


建立知識庫 Tool

這次主要建立三個 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 後存進知識庫。


建立 Agent

接著建立 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,成功應該會有以下畫面

https://ithelp.ithome.com.tw/upload/images/20261001/20178769pe0mo3s9tR.png

我在這裡詢問了它目前有的工具

然後增加一個測試文件

https://ithelp.ithome.com.tw/upload/images/20261001/201787695CGkuCFJnw.png

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

https://ithelp.ithome.com.tw/upload/images/20261001/20178769TlxJJyek22.png

MCP Server 執行後,就會將文件切分並建立向量,最後加入 ChromaDB。

最後我們就可以直接詢問知識庫的內容

https://ithelp.ithome.com.tw/upload/images/20261001/20178769THC6zgupV3.png

這次 Gemini 會呼叫 ChromaDB 找出相關內容後,再把結果傳回 Gemini,最後 Gemini 就可以根據這些資料整理出回答,並且這次記憶的文件內容不會因為重開對話而消失。


Memory 和 RAG 的差別

做到這裡,可以看到前一天的 Agent Memory 和今天的 RAG 解決的是不同問題。

功能 用途
Agent Memory 記住前面的對話
RAG 查詢外部知識
MCP Tool 讓 Agent 使用這些能力

總結

今天我們將 RAG 加入 MCP Agent,透過 Embedding 和 ChromaDB,可以將文件建立成向量資料,之後根據問題找出相關內容,再透過 MCP Tool 把搜尋功能交給 Agent,讓 Gemini 可以自己判斷什麼時候需要查詢知識庫,這樣就完成了一個基本的 MCP + RAG Agent。


上一篇
Agent Memory:讓 AI 記住前面的資訊
系列文
30 天探索 MCP:從基礎概念到實作 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言