Skip to main content
Glama
PrettyKing

Chalee MCP RAG

by PrettyKing
README.md
# Chalee MCP RAG 🤖

一个基于 **Model Context Protocol (MCP)** 的 **RAG(检索增强生成)**服务器,提供文档处理、向量存储和智能问答功能。

## ✨ 特性

- 🔧 **标准化 MCP 协议**:遵循 Anthropic MCP 标准,可与 Claude Desktop 等客户端集成
- 📚 **智能文档处理**:自动分块、向量化存储
- 🔍 **语义检索**:基于余弦相似度的相关文档检索
- 💬 **智能问答**:结合检索上下文的准确回答生成
- 🛡️ **安全可靠**:内置错误处理和参数验证
- 🚀 **生产就绪**:完整的配置和部署支持

## 🚀 快速开始

### 1. 克隆仓库

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

### 2. 安装依赖

```bash
npm install
```

### 3. 配置环境变量

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

### 4. 启动 MCP 服务器

```bash
npm run mcp-server
```

### 5. 运行客户端演示

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

## 🛠️ 可用工具

MCP RAG 服务器提供以下 6 个核心工具:

| 工具名称 | 描述 | 参数 |
|---------|------|------|
| `initialize_rag` | 初始化 RAG Agent | `apiKey`, `config` |
| `add_document` | 添加文档到知识库 | `content`, `metadata` |
| `ask_question` | 智能问答 | `question` |
| `search_documents` | 文档相似性搜索 | `query`, `maxResults` |
| `get_knowledge_base_stats` | 获取知识库统计 | - |
| `clear_knowledge_base` | 清空知识库 | - |

## 📁 项目结构

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

## 🌐 与 Claude Desktop 集成

要在 Claude Desktop 中使用此 MCP 服务器,请在 Claude 配置文件中添加:

### macOS
编辑 `~/Library/Application Support/Claude/claude_desktop_config.json`:

```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
编辑 `%APPDATA%\\Claude\\claude_desktop_config.json`:

```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"
      }
    }
  }
}
```

## 📖 使用示例

### 基本用法

```javascript
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();
}
```

### 高级配置

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

## 🔧 配置选项

### 环境变量

| 变量名 | 描述 | 默认值 |
|--------|------|--------|
| `OPENAI_API_KEY` | OpenAI API 密钥 | 必需 |
| `CHUNK_SIZE` | 文档分块大小 | 1000 |
| `CHUNK_OVERLAP` | 分块重叠大小 | 200 |
| `MAX_RETRIEVED_DOCS` | 最大检索文档数 | 3 |
| `MODEL_NAME` | GPT 模型名称 | gpt-3.5-turbo |
| `EMBEDDING_MODEL` | 嵌入模型名称 | text-embedding-ada-002 |

## 🧪 测试

```bash
# 运行 RAG Agent 测试
npm test

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

## 🚀 部署

### Docker 部署

```dockerfile
FROM node:16-alpine

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

COPY . .

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

### 进程管理

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

## 🔍 故障排除

### 常见问题

1. **连接失败**
   - 确保 Node.js 版本 >= 16
   - 检查依赖是否正确安装
   - 验证 API 密钥是否有效

2. **工具调用失败**
   - 确保先调用 `initialize_rag`
   - 检查参数格式是否正确
   - 查看服务器日志获取详细错误信息

3. **性能问题**
   - 减少 `chunkSize` 或 `maxRetrievedDocs`
   - 优化文档大小和数量
   - 考虑使用外部向量数据库

### 调试模式

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

## 🌟 扩展功能

### 支持更多文档格式

```javascript
// 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 });
}
```

### 持久化存储

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

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

## 📚 API 文档

### initialize_rag

初始化 RAG Agent 实例。

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

### add_document

向知识库添加文档。

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

### ask_question

使用 RAG 技术回答问题。

```typescript
interface AskQuestionParams {
  question: string;
}

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

## 🤝 贡献

欢迎提交 Issue 和 Pull Request!

1. Fork 项目
2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 打开 Pull Request

## 📄 许可证

MIT License - 详见 [LICENSE](LICENSE) 文件

## 🙏 致谢

- [Anthropic](https://www.anthropic.com/) - MCP 协议开发者
- [OpenAI](https://openai.com/) - GPT 和 Embedding API
- [LangChain](https://www.langchain.com/) - 文本处理工具

## 📞 支持

- 📧 Email: [your-email@example.com](mailto:your-email@example.com)
- 🐛 Issues: [GitHub Issues](https://github.com/PrettyKing/chalee-mcp-rag/issues)
- 💬 Discussions: [GitHub Discussions](https://github.com/PrettyKing/chalee-mcp-rag/discussions)

---

⭐ 如果这个项目对你有帮助,请给它一个星标!