检索增强生成系统

MeshMind是一个企业级检索增强生成(RAG)系统,集成了知识图谱和多阶段架构,适用于文档分析、知识管理和企业集成场景。

  • by maybeprascoder
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 maybeprascoder/meshmind

使用说明

MeshMind RAG系统

具有知识图和多阶段架构的企业级检索增强生成(RAG)系统

🎯 概述

MeshMind是一个全面的RAG系统,展示了具有先进人工智能集成、知识图构建和现代软件工程实践的企业级架构。该系统展示了从简化原型到生产就绪微服务的演变。

🏗️ 架构阶段

第一阶段:核心系统

  • 整体的:具有全面功能的单一FastAPI应用程序
  • 处理:同步文档处理并立即响应
  • 知识图谱:实体提取和混合检索
  • 依赖项:优化了最小依赖关系
  • 用例:快速部署和示范

第二阶段:企业架构

  • 微服务:与后台工作程序分离的摄取/查询API
  • 数据库:MongoDB(块)、Neo4j(知识图)、Redis(缓存)
  • 处理:使用BullMQ/Celery的异步作业队列
  • 可扩展性:生产就绪,具有全面的错误处理功能
  • 用例:大规模生产部署

第三阶段:高级集成

  • MCP协议:模型上下文协议实现
  • 外部API:Notion和Jira集成
  • 内容处理:通过统一管道传输外部内容
  • 用例:企业集成和外部数据源

🚀 快速开始

第一阶段(核心系统)

  1. 克隆存储库

    git clone https://github.com/maybeprascoder/meshmind.git
    cd MeshMind-RAG-System
    
  2. 安装依赖项

    pip install -r simple_requirements.txt
    
  3. 启动API服务器

    python simple_app.py
    
  4. 访问API文档

    • API文件:http://localhost:8000/docs
    • 健康检查:http://localhost:8000/health

第2阶段(企业架构)

  1. 设置数据库

    # MongoDB, Neo4j, Redis required
    pip install -r requirements.txt
    
  2. 配置环境

    cp env.example .env
    # Edit .env with your database credentials
    
  3. 启动微服务

    python main.py ingest    # Port 8081
    python main.py query      # Port 8082
    python main.py worker     # Background processing
    

🎨 特性

核心RAG能力

  • ✅ PDF处理:用于文档提取的PyPDF2集成
  • ✅ 文本组块:智能文档分割
  • ✅ 矢量嵌入:OpenAI文本嵌入3-small
  • ✅ 混合搜索:矢量相似度+关键字匹配
  • ✅ 知识图谱:实体提取和关系映射
  • ✅ 来源引用:透明的答案归因

第一阶段特征

  • ✅ 统一API:所有操作的单一端点
  • ✅ 立即处理:同步文档处理
  • ✅ 模拟集成:独立系统
  • ✅ 轻松部署:所需配置最少

第二阶段特征

  • ✅ 微服务:分离的摄取/查询API
  • ✅ 后台作业:异步处理管道
  • ✅ 数据库集成:MongoDB、Neo4j、Redis
  • ✅ 作业跟踪:详细的进度监控
  • ✅ 错误处理:全面的错误管理
  • ✅ 可扩展性:生产就绪架构

📊 系统比较

功能 第一阶段(核心) 第二阶段(企业) 第三阶段(高级)
建筑 单片 微服务 MCP集成
处理 同步 异步(作业) 异步(外部)
存储 集成 分布式 外部API
设置时间 2分钟 30+分钟 1+小时
依赖项 最小 全面 MCP协议
可扩展性 中等 高 高

🛠️ 技术栈

后端

  • 快速API:现代Python web框架
  • 派丹蒂克:数据验证和序列化
  • PyPDF2:PDF文本提取
  • 开放人工智能:GPT-4和嵌入件
  • Neo4j:知识图谱数据库

数据库 (第二阶段)

  • MongoDB:文档存储和分块
  • Neo4j:知识图关系
  • 瑞迪斯:缓存和作业排队

AI/ML

  • OpenAI GPT-4:语言模型集成
  • 文本嵌入:矢量相似性搜索
  • 知识图谱:实体提取和关系
  • 混合检索:结合多种搜索策略

🔧 API终点

核心终点

  • POST /upload -上传文件
  • GET /file/{file_id}/status -检查处理状态
  • POST /query -使用混合检索查询文档
  • GET /graph/{file_id} -查看知识图
  • GET /files -列出用户文件
  • GET /health -健康检查

企业端点 (第二阶段)

  • POST /api/ingest/register -用于处理的注册文件
  • GET /api/ingest/status -作业状态跟踪
  • POST /api/search -矢量和关键字搜索
  • POST /api/chat -对话界面

📈 演出

  • 处理速度:每份文件2-5秒(第一阶段),10-30秒(第二阶段)
  • 组块大小:1000个字符(可配置)
  • 嵌入模型:text-embedding-3-small(1536尺寸)
  • 知识图谱:每份文件20-50个实体
  • 并发用户:支持多个同时上传

🎯 用例

文件分析

  • 研究论文综述
  • 法律文件审查
  • 技术文档问答
  • 简历分析和见解

知识管理

  • 企业知识库
  • 教育内容处理
  • 客户支持自动化
  • 内容发现和搜索

集成场景

  • 概念工作空间集成
  • Jira问题分析
  • 汇流页处理
  • GitHub文档

🚀 部署

第一阶段(核心系统)

python simple_app.py

第二阶段(企业)

python main.py ingest
python main.py query
python main.py worker

🎨 前端集成指南

面向UI开发人员

本节为使用MeshMind RAG系统的前端开发人员提供了全面的集成细节。

身份验证和会话管理

  • 文员整合:所有用户会话均由职员管理
  • 用户ID格式: user_34ahV0zive4ngGq60o7NeSQw2eu (职员用户ID)
  • 会话处理:办事员处理身份验证、授权和用户管理
  • API标题:包括 user-id 所有API请求中具有Clerk用户ID的标头

文件上传流程

  1. 用户上传文件 通过UI
  2. 文件已上传 到Amazon S3存储桶(minidriveai-bucket.s3.us-east-2.amazonaws.com)
  3. S3 URL已生成 并存储在MongoDB元数据中
  4. 文件处理 自动开始
  5. 状态更新 通过API端点提供

MongoDB文件元数据架构

{
  "_id": {"$oid": "68fe2196cabd021f0e7cbe0c"},
  "owner": "user_34ahV0zive4ngGq60o7NeSQw2eu",
  "filename": "Vivek_Resume.pdf",
  "mimetype": "application/pdf",
  "s3Url": "https://minidriveai-bucket.s3.us-east-2.amazonaws.com/3f36750c-8a7f-4998-98d9-30e424d14524-Vivek_Resume.pdf",
  "s3Key": "3f36750c-8a7f-4998-98d9-30e424d14524-Vivek_Resume.pdf",
  "uploadedAt": {"$date": {"$numberLong": "1761485206180"}},
  "geminiFileName": "files/zy4suxgct2h6",
  "geminiFileUri": "https://generativelanguage.googleapis.com/v1beta/files/zy4suxgct2h6"
}

所需的API集成

1.文件上传端点

// POST /upload
const uploadFile = async (file, userId) => {
  const formData = new FormData();
  formData.append('file', file);
  
  const response = await fetch('/upload', {
    method: 'POST',
    headers: {
      'user-id': userId  // Clerk user ID
    },
    body: formData
  });
  
  return response.json();
};

2.文件状态检查

// GET /file/{file_id}/status
const checkFileStatus = async (fileId, userId) => {
  const response = await fetch(`/file/${fileId}/status`, {
    headers: {
      'user-id': userId
    }
  });
  
  return response.json();
};

3.单据查询

// POST /query
const queryDocument = async (query, fileId, userId) => {
  const response = await fetch('/query', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'user-id': userId
    },
    body: JSON.stringify({
      query: query,
      file_id: fileId,
      use_kg: true
    })
  });
  
  return response.json();
};

4.用户文件列表

// GET /files
const getUserFiles = async (userId) => {
  const response = await fetch('/files', {
    headers: {
      'user-id': userId
    }
  });
  
  return response.json();
};

所需UI组件

1.文件上传组件

  • 文件上传
  • 上传过程中的进度指示器
  • 上传失败的错误处理

2.文件管理仪表板

  • 用户上传文件列表
  • 文件状态指示器(正在处理、就绪、错误)
  • 删除/移除文件功能

3.聊天界面

  • 聊天输入字段
  • 消息历史记录显示

集成检查表

  • [ ] 职员身份验证:实施Clerk SDK进行用户管理
  • [ ] S3上传:配置AWS S3进行文件存储
  • [ ] API标题:包括 user-id 所有请求中的标头
  • [ ] 文件验证:验证文件类型和大小
  • [ ] 错误处理:实施全面的错误处理
  • [ ] 加载状态:为所有异步操作添加加载指示器
  • [ ] 实时更新:实施状态更新轮询
  • [ ] 响应式设计:确保移动兼容性
  • [ ] 无障碍:遵循WCAG指南
  • [ ] 测试:实施单元和集成测试

前端环境变量

# Clerk Configuration
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_...
CLERK_SECRET_KEY=sk_test_...

# API Configuration
NEXT_PUBLIC_API_BASE_URL=http://localhost:8000
NEXT_PUBLIC_S3_BUCKET=minidriveai-bucket
NEXT_PUBLIC_AWS_REGION=us-east-2

# For direct S3 uploads
NEXT_PUBLIC_AWS_ACCESS_KEY_ID=...
NEXT_PUBLIC_AWS_SECRET_ACCESS_KEY=...

React组件示例

import { useUser } from '@clerk/nextjs';
import { useState } from 'react';

const DocumentUpload = () => {
  const { user } = useUser();
  const [uploading, setUploading] = useState(false);
  const [files, setFiles] = useState([]);

  const handleFileUpload = async (file) => {
    setUploading(true);
    try {
      const result = await uploadFile(file, user.id);
      setFiles(prev => [...prev, result]);
    } catch (error) {
      console.error('Upload failed:', error);
    } finally {
      setUploading(false);
    }
  };

  return (
    <div>
      <input 
        type="file" 
        onChange={(e) => handleFileUpload(e.target.files[0])}
        disabled={uploading}
      />
      {uploading && <div>Uploading...</div>}
      {/* File list and chat interface */}
    </div>
  );
};

🤝 贡献

  1. 分叉存储库
  2. 创建要素分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

👨‍💻 作者

Prasoon Kumar和Vivek Hegde

  • GitHub:[@maybeprasgoder][@HEGDEVIVEK]
  • 领英:(https://www.linkedin.com/in/prasoon-singh-ty/) (https://www.linkedin.com/in/vivek-s-hegde-2001)

🙏 致谢

  • 用于嵌入模型的OpenAI
  • GeminiAI for Gemini 2.5 Flash版本
  • FastAPI团队打造卓越的web框架
  • Neo4j用于图形数据库功能

⭐ 如果您觉得此存储库有用,请将其标记为星号!