MCP-DB RAG堆栈
LangChain代理与FastMCP服务器通信,暴露PostgreSQL+pgvector 知识库。FastMCP侧处理摄入、嵌入(Gemini)和 矢量搜索工具;LangChain一方通过 langchain-mcp-adapters 客户与RAG一起回答问题。
仓库布局
server/–封装PostgreSQL、pgvector和Gemini的FastMCP服务器
嵌入。管理方式 uv.
client/–调用MCP工具的LangChain代理。使用标准Python
虚拟环境。
先决条件
- Python 3.11+(该项目针对即将发布的3.14版本;任何最新版本
支持pgvector+psycopg2的CPython工作)
uv用于同步FastMCP环境- PostgreSQL与
pgvector扩展已安装且可访问 - Google Gemini API密钥(
GOOGLE_API_KEY) - (Windows)PowerShell或(macOS/Linux)任何POSIX shell
环境变量
创建一个 .env 文件在两个 server/ 和 client/ (或将它们导出到您的 外壳)至少具有:
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=rag_db
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
GOOGLE_API_KEY=your_gemini_key您可以添加摄取所需的任何额外元数据字段;两个应用程序都加载 这些值通过 python-dotenv.
FastMCP服务器设置(uv)
cd server
uv sync # install deps from pyproject.toml / uv.lock
uv run python main.py --init # optional: create tables + sample docs
uv run python main.py # starts the HTTP MCP server on :8000使用uv run python main.py --ingest docs.txt加载您自己的文本文件或uv run python main.py --stats检查数据库。服务器暴露 三种工具:vector_search,rag_query,以及get_document_count.
保持服务器进程运行;LangChain代理通过以下方式连接到它 http://127.0.0.1:8000/mcp.
LangChain代理设置(venv+pip)
cd client
python -m venv .venv
.venv\Scripts\activate # or source .venv/bin/activate on macOS/Linux
pip install -r requirements.txt
python main.py -i # interactive mode其他入口点:
python main.py -d–运行内置演示问题python main.py -q "Your question"–单次查询
代理人将致电 vector_search/rag_query 首先是工具,然后是工艺 回答: gemini-2.5-flash。确保FastMCP服务器已在运行 否则代理将退出并出现连接错误。
数据流
server/main.py --init初始化PostgreSQL(启用vector,创建
这 documents 表格和种子样本文档)。自定义摄取使用相同的 嵌入管道 google-generativeai.
- MCP服务器通过FastMCP公开HTTP端点(
streamable-http
运输)。工具响应包括检索到的文档、相似性 例如文本、分数和格式化的上下文。
client/main.py加载所有工具MultiServerMCPClient,把它们包起来
进入LangChain代理,并强制执行每个问题都必须处理的工作流程 在回答之前通过语义搜索。
故障排除
- 验证PostgreSQL是否接受来自服务器进程的连接,以及
vector 已安装扩展(CREATE EXTENSION vector;).
- 确保
GOOGLE_API_KEY可以访问这两个text-embedding-004和
gemini-2.5-flash.
- 如果
pgvector索引失败--init,确认您正在使用PostgreSQL
版本≥14,已安装扩展程序。
- 在Windows上,首次安装时以管理员身份运行PowerShell
uv
因此,它可以将垫片放置在您的路径上。
一旦这两个过程都运行,将您的问题指向LangChain代理并观看 它从MCP支持的知识库中提取上下文。
