Chalee MCP RAG
Un servidor de Generación Aumentada por Recuperación (RAG) para procesamiento de documentos, almacenamiento vectorial y preguntas y respuestas inteligentes, impulsado por el Protocolo de Contexto del Modelo.
Documentación
Chalee MCP RAG 🤖
Un servidor RAG (Generación Aumentada por Recuperación) basado en el Protocolo de Contexto de Modelo (MCP), que proporciona procesamiento de documentos, almacenamiento vectorial y funcionalidad de preguntas y respuestas inteligentes.
✨ Características
- 🔧 Protocolo MCP estandarizado: Sigue el estándar MCP de Anthropic, integrable con clientes como Claude Desktop
- 📚 Procesamiento inteligente de documentos: Fragmentación automática, almacenamiento vectorial
- 🔍 Búsqueda semántica: Recuperación de documentos relevantes basada en similitud de coseno
- 💬 Preguntas y respuestas inteligentes: Generación de respuestas precisas combinando el contexto recuperado
- 🛡️ Seguro y confiable: Manejo de errores y validación de parámetros integrados
- 🚀 Listo para producción: Soporte completo de configuración e implementación
🚀 Inicio rápido
1. Clonar el repositorio
git clone https://github.com/PrettyKing/chalee-mcp-rag.git
cd chalee-mcp-rag
2. Instalar dependencias
npm install
3. Configurar variables de entorno
cp .env.example .env
# 编辑 .env 文件,设置你的 OpenAI API 密钥
4. Iniciar el servidor MCP
npm run mcp-server
5. Ejecutar la demostración del cliente
# 在另一个终端
npm run mcp-client
🛠️ Herramientas disponibles
El servidor MCP RAG proporciona las siguientes 6 herramientas principales:
| Nombre de la herramienta | Descripción | Parámetros |
|---|---|---|
initialize_rag | Inicializar el agente RAG | apiKey, config |
add_document | Agregar documento a la base de conocimiento | content, metadata |
ask_question | Preguntas y respuestas inteligentes | question |
search_documents | Búsqueda de similitud de documentos | query, maxResults |
get_knowledge_base_stats | Obtener estadísticas de la base de conocimiento | - |
clear_knowledge_base | Vaciar la base de conocimiento | - |
📁 Estructura del proyecto
chalee-mcp-rag/
├── rag-agent.js # RAG Agent 核心实现
├── mcp-rag-server.js # MCP 服务器
├── mcp-client.js # MCP 客户端示例
├── test.js # RAG Agent 测试
├── package.json # 项目配置
├── .env.example # 环境变量示例
└── README.md # 说明文档
🌐 Integración con Claude Desktop
Para usar este servidor MCP en Claude Desktop, agregue lo siguiente al archivo de configuración de Claude:
macOS
Edite ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"chalee-rag-server": {
"command": "node",
"args": ["/path/to/your/chalee-mcp-rag/mcp-rag-server.js"],
"env": {
"OPENAI_API_KEY": "your_openai_api_key_here"
}
}
}
}
Windows
Edite %APPDATA%\\Claude\\claude_desktop_config.json:
{
"mcpServers": {
"chalee-rag-server": {
"command": "node",
"args": ["C:\\path\\to\\your\\chalee-mcp-rag\\mcp-rag-server.js"],
"env": {
"OPENAI_API_KEY": "your_openai_api_key_here"
}
}
}
}
📖 Ejemplos de uso
Uso básico
const MCPRAGClient = require('./mcp-client');
async function example() {
const client = new MCPRAGClient();
// 连接服务器
await client.connect();
// 初始化 RAG
await client.initializeRAG('your-openai-api-key');
// 添加文档
await client.addDocument('这是一个示例文档...', {
category: '示例',
source: 'demo'
});
// 提问
const answer = await client.askQuestion('这个文档讲了什么?');
console.log(answer.answer);
// 断开连接
await client.disconnect();
}
Configuración avanzada
// 自定义 RAG 配置
await client.initializeRAG('your-api-key', {
chunkSize: 800, // 文档分块大小
chunkOverlap: 100, // 分块重叠大小
maxRetrievedDocs: 5 // 最大检索文档数
});
🔧 Opciones de configuración
Variables de entorno
| Nombre de la variable | Descripción | Valor predeterminado |
|---|---|---|
OPENAI_API_KEY | Clave API de OpenAI | Requerido |
CHUNK_SIZE | Tamaño de fragmentación de documentos | 1000 |
CHUNK_OVERLAP | Tamaño de superposición de fragmentos | 200 |
MAX_RETRIEVED_DOCS | Número máximo de documentos recuperados | 3 |
MODEL_NAME | Nombre del modelo GPT | gpt-3.5-turbo |
EMBEDDING_MODEL | Nombre del modelo de incrustación | text-embedding-ada-002 |
🧪 Pruebas
# 运行 RAG Agent 测试
npm test
# 运行 MCP 客户端演示
npm run mcp-client
🚀 Implementación
Implementación con Docker
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "run", "mcp-server"]
Gestión de procesos
# 使用 PM2 管理进程
npm install -g pm2
pm2 start mcp-rag-server.js --name "mcp-rag-server"
pm2 monitor
🔍 Solución de problemas
Problemas comunes
-
Fallo de conexión
- Asegúrese de que la versión de Node.js sea >= 16
- Verifique que las dependencias estén instaladas correctamente
- Valide que la clave API sea válida
-
Fallo en la llamada a herramientas
- Asegúrese de llamar primero a
initialize_rag - Verifique que el formato de los parámetros sea correcto
- Consulte los registros del servidor para obtener información detallada del error
- Asegúrese de llamar primero a
-
Problemas de rendimiento
- Reduzca
chunkSizeomaxRetrievedDocs - Optimice el tamaño y la cantidad de documentos
- Considere usar una base de datos vectorial externa
- Reduzca
Modo de depuración
# 启用详细日志
DEBUG=mcp:* npm run mcp-server
🌟 Funciones extendidas
Soporte para más formatos de documentos
// PDF 支持
const pdfParse = require('pdf-parse');
async function loadPDF(filePath) {
const dataBuffer = fs.readFileSync(filePath);
const data = await pdfParse(dataBuffer);
return await agent.addDocument(data.text, { type: 'pdf', source: filePath });
}
Almacenamiento persistente
// 使用 Pinecone 向量数据库
const { PineconeStore } = require('langchain/vectorstores/pinecone');
class PersistentRAGAgent extends RAGAgent {
async initializePinecone() {
this.vectorStore = await PineconeStore.fromExistingIndex(
new OpenAIEmbeddings(),
{ pineconeIndex: this.index }
);
}
}
📚 Documentación de API
initialize_rag
Inicializa una instancia del agente RAG.
interface InitializeRAGParams {
apiKey: string;
config?: {
chunkSize?: number;
chunkOverlap?: number;
maxRetrievedDocs?: number;
};
}
add_document
Agrega un documento a la base de conocimiento.
interface AddDocumentParams {
content: string;
metadata?: Record<string, any>;
}
ask_question
Responde preguntas utilizando tecnología RAG.
interface AskQuestionParams {
question: string;
}
interface AskQuestionResponse {
question: string;
answer: string;
sources?: Array<{
content: string;
similarity: number;
metadata: Record<string, any>;
}>;
timestamp: string;
}
🤝 Contribuciones
¡Se aceptan Issues y Pull Requests!
- Haga un fork del proyecto
- Cree una rama de funcionalidad (
git checkout -b feature/AmazingFeature) - Confirme los cambios (
git commit -m 'Add some AmazingFeature') - Envíe a la rama (
git push origin feature/AmazingFeature) - Abra un Pull Request
📄 Licencia
Licencia MIT - Consulte el archivo LICENSE para más detalles
🙏 Agradecimientos
- Anthropic - Desarrolladores del protocolo MCP
- OpenAI - API de GPT y Embedding
- LangChain - Herramientas de procesamiento de texto
📞 Soporte
- 📧 Email: your-email@example.com
- 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
⭐ ¡Si este proyecto te resulta útil, dale una estrella!