feat: initialize MCP RAG Prompts server with embedding management

- Add package.json for project configuration and dependencies.
- Create src/index.ts as the entry point for the MCP server.
- Implement vectorStore for managing embeddings with local and cloud providers.
- Add embeddingProviders for local and cloud-based embedding services (OpenAI, Aliyun, SiliconFlow).
- Define types for prompts and embeddings in types.ts.
- Implement searchPersona tool for semantic search of expert personas.
- Create test.ts for validating vector storage and search functionality.
- Configure TypeScript with tsconfig.json for strict type checking and module resolution.
This commit is contained in:
lirui
2026-02-04 01:14:58 +08:00
commit 4693ebcf83
14 changed files with 4088 additions and 0 deletions

187
README.md Normal file
View File

@@ -0,0 +1,187 @@
# MCP RAG Prompts Server
基于 MCP 协议的 RAG 提示词管理服务器,支持本地模型和云服务 API 进行语义搜索。
## 功能特性
- 🔍 **语义搜索**Hybrid Search向量语义 + 关键词加权)
- 🔄 **多提供者支持**:本地模型 / OpenAI / 阿里云百炼 / SiliconFlow
- 🚀 **MCP 协议**:标准 MCP Server 实现,可与任何 MCP 客户端集成
- 💾 **内存缓存**:启动时一次性向量化,搜索速度快
## 项目结构
```
mcp-rag-prompts/
├── package.json
├── tsconfig.json
├── .env.example # 环境变量配置模板
├── data/
│ └── prompts.json # Prompt 数据文件
└── src/
├── index.ts # MCP Server 入口
├── test.ts # 测试脚本
└── lib/
├── types.ts # 类型定义
├── embeddingProviders.ts # Embedding 提供者实现
└── vectorStore.ts # 向量存储和搜索
```
## 安装
```bash
npm install
```
## Embedding 提供者配置
通过环境变量选择 Embedding 提供者:
### 方式 1本地模型默认
无需配置,开箱即用。首次运行会自动下载模型(约 90MB
```bash
# 默认配置,无需设置
npm start
# 或显式指定
EMBEDDING_PROVIDER=local npm start
```
### 方式 2OpenAI API
```bash
# Windows PowerShell
$env:EMBEDDING_PROVIDER="openai"
$env:OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxx"
npm start
# Linux/macOS
EMBEDDING_PROVIDER=openai \
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx \
npm start
```
可选配置:
- `OPENAI_BASE_URL` - 自定义 API 地址(支持代理)
- `OPENAI_EMBEDDING_MODEL` - 模型名称(默认 `text-embedding-3-small`
### 方式 3阿里云百炼 DashScope
```bash
$env:EMBEDDING_PROVIDER="aliyun"
$env:DASHSCOPE_API_KEY="sk-xxxxxxxxxxxxxxxx"
npm start
```
可选配置:
- `ALIYUN_EMBEDDING_MODEL` - 模型名称(默认 `text-embedding-v3`
### 方式 4SiliconFlow 硅基流动
```bash
$env:EMBEDDING_PROVIDER="siliconflow"
$env:SILICONFLOW_API_KEY="sk-xxxxxxxxxxxxxxxx"
npm start
```
可选配置:
- `SILICONFLOW_EMBEDDING_MODEL` - 模型名称(默认 `BAAI/bge-m3`
## 运行
```bash
# 启动 MCP Server
npm start
# 开发模式(热重载)
npm run dev
# 运行测试
npx tsx src/test.ts
```
## 本地模型网络问题
首次运行本地模型时需要从 HuggingFace 下载。如果遇到网络问题:
```bash
# 设置代理
$env:HTTPS_PROXY="http://127.0.0.1:7890"
# 或使用 HuggingFace 镜像(中国大陆)
$env:HF_ENDPOINT="https://hf-mirror.com"
```
## MCP Tool
### `search_expert_persona`
根据用户问题语义搜索最匹配的专家角色设定。
**参数**
- `query` (string): 用户的原始问题或需求描述
**返回示例**
```json
{
"success": true,
"matchedExpert": {
"id": "python-expert",
"tags": ["python", "programming"],
"description": "Python 编程专家...",
"similarity": 0.75
},
"systemPrompt": "你是一位资深的 Python 编程专家..."
}
```
## 配置 MCP 客户端
### Claude Desktop
`claude_desktop_config.json` 中添加:
```json
{
"mcpServers": {
"rag-prompts": {
"command": "npx",
"args": ["tsx", "C:/path/to/mcp-rag-prompts/src/index.ts"],
"env": {
"EMBEDDING_PROVIDER": "siliconflow",
"SILICONFLOW_API_KEY": "sk-xxxxxxxx"
}
}
}
}
```
### 自定义 Prompt 数据
编辑 `data/prompts.json` 添加你自己的专家角色:
```json
[
{
"id": "unique-id",
"tags": ["tag1", "tag2"],
"description": "用于语义搜索的描述文本(会被向量化)",
"content": "实际的 System Prompt 内容"
}
]
```
## 提供者对比
| 提供者 | 优点 | 缺点 |
|--------|------|------|
| **local** | 免费、离线可用、隐私安全 | 首次加载慢、需下载模型 |
| **openai** | 效果好、稳定 | 需要付费、需要网络 |
| **aliyun** | 中文效果好、国内访问快 | 需要付费 |
| **siliconflow** | 性价比高、支持多种开源模型 | 需要付费 |
## License
MIT