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 herramientaDescripciónParámetros
initialize_ragInicializar el agente RAGapiKey, config
add_documentAgregar documento a la base de conocimientocontent, metadata
ask_questionPreguntas y respuestas inteligentesquestion
search_documentsBúsqueda de similitud de documentosquery, maxResults
get_knowledge_base_statsObtener estadísticas de la base de conocimiento-
clear_knowledge_baseVaciar 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 variableDescripciónValor predeterminado
OPENAI_API_KEYClave API de OpenAIRequerido
CHUNK_SIZETamaño de fragmentación de documentos1000
CHUNK_OVERLAPTamaño de superposición de fragmentos200
MAX_RETRIEVED_DOCSNúmero máximo de documentos recuperados3
MODEL_NAMENombre del modelo GPTgpt-3.5-turbo
EMBEDDING_MODELNombre del modelo de incrustacióntext-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

  1. 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
  2. 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
  3. Problemas de rendimiento

    • Reduzca chunkSize o maxRetrievedDocs
    • Optimice el tamaño y la cantidad de documentos
    • Considere usar una base de datos vectorial externa

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!

  1. Haga un fork del proyecto
  2. Cree una rama de funcionalidad (git checkout -b feature/AmazingFeature)
  3. Confirme los cambios (git commit -m 'Add some AmazingFeature')
  4. Envíe a la rama (git push origin feature/AmazingFeature)
  5. 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


⭐ ¡Si este proyecto te resulta útil, dale una estrella!