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 ferramenta | Descrição | Parâmetros |
|---|---|---|
initialize_rag | Inicializar o agente RAG | apiKey, config |
add_document | Adicionar documento à base de conhecimento | content, metadata |
ask_question | Respostas inteligentes a perguntas | question |
search_documents | Busca de similaridade de documentos | query, maxResults |
get_knowledge_base_stats | Obter estatísticas da base de conhecimento | - |
clear_knowledge_base | Limpar 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ável | Descrição | Valor padrão |
|---|---|---|
OPENAI_API_KEY | Chave da API OpenAI | Obrigatório |
CHUNK_SIZE | Tamanho do bloco de documentos | 1000 |
CHUNK_OVERLAP | Sobreposição de blocos | 200 |
MAX_RETRIEVED_DOCS | Número máximo de documentos recuperados | 3 |
MODEL_NAME | Nome do modelo GPT | gpt-3.5-turbo |
EMBEDDING_MODEL | Nome do modelo de embeddings | text-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
-
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
-
Falha na chamada de ferramentas
- Certifique-se de chamar
initialize_ragprimeiro - Verifique se o formato dos parâmetros está correto
- Consulte os logs do servidor para obter informações detalhadas de erro
- Certifique-se de chamar
-
Problemas de desempenho
- Reduza
chunkSizeoumaxRetrievedDocs - Otimize o tamanho e a quantidade de documentos
- Considere usar um banco de dados vetorial externo
- Reduza
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!
- Faça um fork do projeto
- Crie um branch de funcionalidade (
git checkout -b feature/AmazingFeature) - Faça commit das alterações (
git commit -m 'Add some AmazingFeature') - Envie para o branch (
git push origin feature/AmazingFeature) - 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
- 📧 E-mail: your-email@example.com
- 🐛 Issues: GitHub Issues
- 💬 Discussões: GitHub Discussions
⭐ Se este projeto foi útil para você, dê uma estrela!