Chalee MCP RAG

Um servidor de Geração Aumentada por Recuperação (RAG) para processamento de documentos, armazenamento vetorial e perguntas e respostas inteligentes, alimentado pelo Model Context Protocol.

Documentação

Chalee MCP RAG 🤖

Um servidor de RAG (Geração Aumentada por Recuperação) baseado no Model Context Protocol (MCP), oferecendo processamento de documentos, armazenamento vetorial e respostas inteligentes a perguntas.

✨ Recursos

  • 🔧 Protocolo MCP padronizado: Segue o padrão MCP da Anthropic, integrável com clientes como Claude Desktop
  • 📚 Processamento inteligente de documentos: Divisão automática em blocos e armazenamento vetorial
  • 🔍 Busca semântica: Recuperação de documentos relevantes com base em similaridade de cosseno
  • 💬 Respostas inteligentes: Geração de respostas precisas combinando o contexto recuperado
  • 🛡️ Seguro e confiável: Tratamento de erros e validação de parâmetros integrados
  • 🚀 Pronto para produção: Suporte completo de configuração e implantação

🚀 Início rápido

1. Clonar o repositório

git clone https://github.com/PrettyKing/chalee-mcp-rag.git
cd chalee-mcp-rag

2. Instalar dependências

npm install

3. Configurar variáveis de ambiente

cp .env.example .env
# 编辑 .env 文件,设置你的 OpenAI API 密钥

4. Iniciar o servidor MCP

npm run mcp-server

5. Executar a demonstração do cliente

# 在另一个终端
npm run mcp-client

🛠️ Ferramentas disponíveis

O servidor MCP RAG oferece as seguintes 6 ferramentas principais:

Nome da ferramentaDescriçãoParâmetros
initialize_ragInicializar o agente RAGapiKey, config
add_documentAdicionar documento à base de conhecimentocontent, metadata
ask_questionRespostas inteligentes a perguntasquestion
search_documentsBusca de similaridade de documentosquery, maxResults
get_knowledge_base_statsObter estatísticas da base de conhecimento-
clear_knowledge_baseLimpar a base de conhecimento-

📁 Estrutura do projeto

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              # 说明文档

🌐 Integração com Claude Desktop

Para usar este servidor MCP no Claude Desktop, adicione ao arquivo de configuração do 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"
      }
    }
  }
}

📖 Exemplos 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();
}

Configuração avançada

// 自定义 RAG 配置
await client.initializeRAG('your-api-key', {
  chunkSize: 800,        // 文档分块大小
  chunkOverlap: 100,     // 分块重叠大小
  maxRetrievedDocs: 5    // 最大检索文档数
});

🔧 Opções de configuração

Variáveis de ambiente

Nome da variávelDescriçãoValor padrão
OPENAI_API_KEYChave da API OpenAIObrigatório
CHUNK_SIZETamanho do bloco de documentos1000
CHUNK_OVERLAPSobreposição de blocos200
MAX_RETRIEVED_DOCSNúmero máximo de documentos recuperados3
MODEL_NAMENome do modelo GPTgpt-3.5-turbo
EMBEDDING_MODELNome do modelo de embeddingstext-embedding-ada-002

🧪 Testes

# 运行 RAG Agent 测试
npm test

# 运行 MCP 客户端演示
npm run mcp-client

🚀 Implantação

Implantação com Docker

FROM node:16-alpine

WORKDIR /app
COPY package*.json ./
RUN npm install

COPY . .

EXPOSE 3000
CMD ["npm", "run", "mcp-server"]

Gerenciamento de processos

# 使用 PM2 管理进程
npm install -g pm2
pm2 start mcp-rag-server.js --name "mcp-rag-server"
pm2 monitor

🔍 Solução de problemas

Problemas comuns

  1. Falha de conexão

    • Certifique-se de que a versão do Node.js seja >= 16
    • Verifique se as dependências foram instaladas corretamente
    • Valide se a chave da API é válida
  2. Falha na chamada de ferramentas

    • Certifique-se de chamar initialize_rag primeiro
    • Verifique se o formato dos parâmetros está correto
    • Consulte os logs do servidor para obter informações detalhadas de erro
  3. Problemas de desempenho

    • Reduza chunkSize ou maxRetrievedDocs
    • Otimize o tamanho e a quantidade de documentos
    • Considere usar um banco de dados vetorial externo

Modo de depuração

# 启用详细日志
DEBUG=mcp:* npm run mcp-server

🌟 Recursos estendidos

Suporte a mais 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 });
}

Armazenamento persistente

// 使用 Pinecone 向量数据库
const { PineconeStore } = require('langchain/vectorstores/pinecone');

class PersistentRAGAgent extends RAGAgent {
  async initializePinecone() {
    this.vectorStore = await PineconeStore.fromExistingIndex(
      new OpenAIEmbeddings(),
      { pineconeIndex: this.index }
    );
  }
}

📚 Documentação da API

initialize_rag

Inicializa uma instância do agente RAG.

interface InitializeRAGParams {
  apiKey: string;
  config?: {
    chunkSize?: number;
    chunkOverlap?: number;
    maxRetrievedDocs?: number;
  };
}

add_document

Adiciona um documento à base de conhecimento.

interface AddDocumentParams {
  content: string;
  metadata?: Record<string, any>;
}

ask_question

Responde perguntas usando tecnologia RAG.

interface AskQuestionParams {
  question: string;
}

interface AskQuestionResponse {
  question: string;
  answer: string;
  sources?: Array<{
    content: string;
    similarity: number;
    metadata: Record<string, any>;
  }>;
  timestamp: string;
}

🤝 Contribuição

Contribuições são bem-vindas! Envie Issues e Pull Requests!

  1. Faça um fork do projeto
  2. Crie um branch de funcionalidade (git checkout -b feature/AmazingFeature)
  3. Faça commit das alterações (git commit -m 'Add some AmazingFeature')
  4. Envie para o branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

📄 Licença

Licença MIT - Consulte o arquivo LICENSE para mais detalhes

🙏 Agradecimentos

  • Anthropic - Desenvolvedores do protocolo MCP
  • OpenAI - APIs GPT e Embedding
  • LangChain - Ferramentas de processamento de texto

📞 Suporte


⭐ Se este projeto foi útil para você, dê uma estrela!