文档问答系统

一个基于检索增强生成(RAG)技术的全栈应用,支持用户通过聊天界面与PDF文档进行交互,利用OpenAI模型和向量数据库进行上下文检索。

  • by ConferInc
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 ConferInc/MCP-server

使用说明

RAG MCP服务器和Next.js前端

一个全栈检索增强生成(RAG)应用程序,使用 模型上下文协议(MCP) 服务器后端和现代 Next.js 前端。该项目使用户能够使用OpenAI的模型和用于上下文检索的矢量数据库与他们的文档(PDF)聊天。

🚀 特性

  • MCP服务器后端(Node.js/TypeScript)

    • 实施 模型上下文协议(MCP).
    • 文件摄入:使用解析PDF pypdf (Python桥)和分块。
    • 向量搜索:利用 Qdrant 用于高性能相似性搜索。
    • 嵌入:OpenAI text-embedding-3-small.
    • 工具: ingest_document (用于管理/设置)和 query_knowledge_base (适用于RAG)。
  • Next.js前端

    • 聊天界面:使用Tailwind CSS和 shadcn/ui.
    • 流媒体:使用Vercel AI SDK(v6)的实时令牌流。
    • 输入管理:对用户输入和工具调用的稳健处理。

📂 项目结构

├── backend/                  # MCP Server Implementation
│   ├── src/
│   │   ├── lib/              # OpenAI & Qdrant clients
│   │   ├── tools/            # MCP Tools (ingest.ts, query.ts)
│   │   ├── mcp-server.ts     # Main server entry point
│   │   └── index.ts          # Server startup
│   ├── scripts/
│   │   ├── manual_ingest.ts  # Script to manually trigger ingestion
│   │   └── parse_doc.py      # Python script for PDF parsing
│   ├── data/                 # Directory for storing raw documents
│   └── package.json
│
├── frontend/                 # Next.js App Router Application
│   ├── src/
│   │   ├── app/
│   │   │   ├── api/chat/     # Route Handler for AI SDK
│   │   │   └── page.tsx      # Main Chat UI Component
│   │   └── components/       # UI Components (shadcn/ui)
│   └── package.json
└── README.md

🛠️ 先决条件

  • Node.js (v18或更高版本)
  • python (v3.10+) pip
  • 码头工人 (桌面或引擎)用于运行Qdrant
  • OpenAI API密钥

⚡ 安装说明

1.克隆存储库

git clone <your-repo-url>
cd <repo-name>

2.后端设置

  1. 导航到后端:
    cd backend
    npm install
    
  2. 安装Python依赖项(用于PDF解析):
    pip install pypdf
    # If pip fails, try: python -m pip install pypdf
    
  3. 配置环境变量: 复制 .env.example 到 .env 并填写您的密钥。
    OPENAI_API_KEY=sk-...  # Your OpenAI Key
    QDRANT_URL=http://localhost:6333
    PORT=3001
    MODE=sse
    

3.前端设置

  1. 导航到前端:
    cd frontend
    npm install
    
  2. 配置环境变量: 创建 .env.local:
    OPENAI_API_KEY=sk-...  # Required for AI SDK
    MCP_SERVER_URL=http://localhost:3001/sse
    

4.启动矢量数据库(Qdrant)

你必须运行Docker。

docker run -d -p 6333:6333 -v $(pwd)/qdrant_storage:/qdrant/storage:z qdrant/qdrant

注意:如果您在启动Docker时遇到错误,请确保Docker Desktop正在运行。

5.摄入文件

将PDF文件放在 backend/src/tools/PDF/ (或更新路径)。 运行手动摄取脚本:

cd backend
npx tsx scripts/manual_ingest.ts

6.运行应用程序

您需要同时运行两台服务器(使用两个终端)。

终端1(后端):

cd backend
npm run dev

2号航站楼(前端):

cd frontend
npm run dev

访问聊天界面 http://localhost:3000.

当前问题: 1) 聊天机器人前端界面正在工作,但无法检索数据和访问嵌入。目前正在尝试解决此问题。 2)- RAG连接:访问 query_knowledge_base 该工具依赖于本地Qdrant实例。如果Qdrant没有运行(例如Docker问题),聊天将回到常识。