MeshMind RAG系统
具有知识图和多阶段架构的企业级检索增强生成(RAG)系统
  
🎯 概述
MeshMind是一个全面的RAG系统,展示了具有先进人工智能集成、知识图构建和现代软件工程实践的企业级架构。该系统展示了从简化原型到生产就绪微服务的演变。
🏗️ 架构阶段
第一阶段:核心系统
- 整体的:具有全面功能的单一FastAPI应用程序
- 处理:同步文档处理并立即响应
- 知识图谱:实体提取和混合检索
- 依赖项:优化了最小依赖关系
- 用例:快速部署和示范
第二阶段:企业架构
- 微服务:与后台工作程序分离的摄取/查询API
- 数据库:MongoDB(块)、Neo4j(知识图)、Redis(缓存)
- 处理:使用BullMQ/Celery的异步作业队列
- 可扩展性:生产就绪,具有全面的错误处理功能
- 用例:大规模生产部署
第三阶段:高级集成
- MCP协议:模型上下文协议实现
- 外部API:Notion和Jira集成
- 内容处理:通过统一管道传输外部内容
- 用例:企业集成和外部数据源
🚀 快速开始
第一阶段(核心系统)
- 克隆存储库
git clone https://github.com/maybeprascoder/meshmind.git
cd MeshMind-RAG-System- 安装依赖项
pip install -r simple_requirements.txt- 启动API服务器
python simple_app.py- 访问API文档
- API文件:http://localhost:8000/docs - 健康检查:http://localhost:8000/health
第2阶段(企业架构)
- 设置数据库
# MongoDB, Neo4j, Redis required
pip install -r requirements.txt- 配置环境
cp env.example .env
# Edit .env with your database credentials- 启动微服务
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的标头
文件上传流程
- 用户上传文件 通过UI
- 文件已上传 到Amazon S3存储桶(
minidriveai-bucket.s3.us-east-2.amazonaws.com) - S3 URL已生成 并存储在MongoDB元数据中
- 文件处理 自动开始
- 状态更新 通过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 (
handleFileUpload(e.target.files[0])}
disabled={uploading}
/>
{uploading &&
Uploading...
}
{/* File list and chat interface */}
);
};🤝 贡献
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
👨💻 作者
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用于图形数据库功能
______________________________________________________________________
⭐ 如果您觉得此存储库有用,请将其标记为星号!
