(基于https://github.com/LynncX/hybrid-rag-mcp.git,由克劳德代码辅助)
MCP混合RAG
一种具有混合嵌入和重新排序支持的隐私优先文档搜索服务器, 针对嵌入式开发进行了优化。完全在本地运行或与云API结合使用以提高性能。
为模型上下文协议(MCP)构建,这允许您使用Cursor、Codex、Claude Code或任何MCP客户端使用语义搜索来搜索文档。选择本地处理以获得最大隐私,或选择混合模式以获得API服务的更好准确性。
🚀 v0.3.0中的新功能:T5L/C51嵌入式开发优化
✨ 主要功能
- 🔧 代码感知分块:保留SFR寄存器、结构定义和宏声明的智能拆分
- 📚 嵌入式上下文增强:自动文件源注入和岩心类型检测(C51 vs DGUS)
- 🔄 混合嵌入式引擎:从中选择
Transformers.js(当地)和Alibaba Cloud Qwen(API)通过统一接口 - 🎯 两阶段检索:可选择使用T5L特定指令进行重新评级,以提高准确性
- 🪟 跨平台核心:与Windows文件系统完全兼容,具有规范化的路径处理
- ⚡ 增强型搜索:扩展了候选人检索和符号感知排名
🎯 非常适合嵌入式开发
解决T5L/C51开发人员的关键问题:
- ✅ 保留注册表定义:
sfr P0 = 0x80;在单个块中保持完整 - ✅ 保持结构完整性:完成
struct Touch_Command_0x05_KeyReturn定义 - ✅ 上下文丰富的结果:搜索结果包括文件源、节和依赖关系提示
- ✅ 符号感知搜索:增强了对十六进制值的理解,如
0x5A,0xA5,注册地址 - ✅ 岩芯类型检测:自动区分C51(操作系统)和DGUS(图形用户界面)内容
🏗️ 架构概述
┌─────────────────────────────────────────────────────────────┐
│ MCP Hybrid RAG Server (v0.3.0) │
├─────────────────────────────────────────────────────────────┤
│ 📚 Enhanced Document Ingestion │
│ ├─ 📄 PDF, DOCX, TXT, MD parsing │
│ ├─ 🔧 Code-aware chunking (T5L/C51 optimized) │
│ ├─ 📊 Context injection (file source, core type) │
│ ├─ 🔄 Hybrid embedding (Local + Qwen API) │
│ └─ 💾 LanceDB with enhanced metadata │
├─────────────────────────────────────────────────────────────┤
│ 🔍 Advanced Search & Retrieval │
│ ├─ 🎯 Expanded candidate retrieval (60-120 results) │
│ ├─ ⚡ T5L-specific reranking instructions │
│ ├─ 🔍 Symbol-aware search (hex values, registers) │
│ └─ 📊 Context-enhanced results │
├─────────────────────────────────────────────────────────────┤
│ 🛠️ MCP Tools (5 total) │
│ ├─ ingest_file │ query_documents │ list_files │
│ ├─ delete_file │ status │ │
└─────────────────────────────────────────────────────────────┘
🔧 Code-Aware Features:
• Preserves SFR register definitions: sfr P0 = 0x80;
• Maintains struct integrity: Complete definitions in single chunks
• File type detection: .h/.c/.md specific processing
• Core type classification: C51 (OS) vs DGUS (GUI)
• Dependency hints: Header file inclusion reminders🎯 主要特点
- 🔒 隐私第一:本地处理将您的数据保存在您的计算机上
- 🌐 混合模式:根据需要混合本地和云服务
- 🪟 Windows支持:与Windows路径和文件系统完全兼容
- ⚡ 重排序:可选的第二阶段检索,以提高相关性
- 🔢 尺寸安全:自动验证以防止向量维度不匹配
- 📈 演出:即使有数千份文档,也能进行3秒以下的查询
🚀 快速开始
选择最适合您的设置方法:
方法1:本地构建(建议用于控制)
步骤1:克隆并构建项目
# Clone the repository
git clone https://github.com/shinpr/mcp-local-rag.git
cd mcp-local-rag
# Install dependencies and build
npm install
npm run build第二步:配置你的AI工具
对于光标 -添加到 ~/.cursor/mcp.json:
{
"mcpServers": {
"embedded-rag": {
"command": "node",
"args": ["C:/Users/YourName/Projects/mcp-local-rag/dist/index.js"],
"env": {
"BASE_DIR": "C:/Users/YourName/T5L-Project",
"EMBEDDING_PROVIDER": "qwen",
"DASHSCOPE_API_KEY": "your-qwen-api-key",
"RERANKING_ENABLED": "true",
"RERANKING_PROVIDER": "qwen"
}
}
}
}克劳德代码:
claude mcp add embedded-rag --scope user \
--env BASE_DIR=/Users/yourname/T5L-Project \
--env EMBEDDING_PROVIDER=qwen \
--env DASHSCOPE_API_KEY=your-qwen-api-key \
--env RERANKING_ENABLED=true \
--env RERANKING_PROVIDER=qwen \
-- node /Users/yourname/Projects/mcp-local-rag/dist/index.js一般文件(仅限本地):
{
"mcpServers": {
"doc-rag": {
"command": "node",
"args": ["C:/Users/YourName/Projects/mcp-local-rag/dist/index.js"],
"env": {
"BASE_DIR": "C:/Users/YourName/Documents"
}
}
}
}🔍 路径示例:
窗户:
"args": ["C:/Users/JohnDoe/Projects/mcp-local-rag/dist/index.js"],
"env": {
"BASE_DIR": "C:/Users/JohnDoe/T5L-Embedded-Project"
}macOS/Linux:
"args": ["/home/alice/projects/mcp-local-rag/dist/index.js"],
"env": {
"BASE_DIR": "/home/alice/t5l-embedded-project"
}方法2:直接NPM安装(快速简单)
🤔 NPM安装的工作原理(不需要Git克隆!)
NPM注册表查找:
npx -y mcp-local-rag
↓
1. NPM queries registry.npmjs.org for "mcp-local-rag"
2. Downloads the package (if not cached locally)
3. Executes it directly without permanent installation实际发生的事情:
- ✅ 无需Git:从NPM注册表而不是GitHub下载NPM
- ✅ 无完整路径:NPM会自动处理确切的文件位置
- ✅ 自动下载:下载包(如果不在本地缓存中)
- ✅ 版本控制:使用npm注册表中发布的版本
缓存位置:
- 窗户:
C:\Users\YourName\AppData\Local\npm-cache\_npx - macOS/Linux:
~/.npm/_npx/
对于光标 -添加到 ~/.cursor/mcp.json:
{
"mcpServers": {
"embedded-rag": {
"command": "npx",
"args": ["-y", "mcp-local-rag"],
"env": {
"BASE_DIR": "/path/to/your/embedded-project",
"EMBEDDING_PROVIDER": "qwen",
"DASHSCOPE_API_KEY": "your-qwen-api-key",
"RERANKING_ENABLED": "true",
"RERANKING_PROVIDER": "qwen"
}
}
}
}克劳德代码:
claude mcp add embedded-rag --scope user \
--env BASE_DIR=/path/to/your/embedded-project \
--env EMBEDDING_PROVIDER=qwen \
--env DASHSCOPE_API_KEY=your-qwen-api-key \
--env RERANKING_ENABLED=true \
--env RERANKING_PROVIDER=qwen \
-- npx -y mcp-local-rag📋 你应该选择哪种方法?
| 功能 | 本地构建 | NPM安装 |
|---|---|---|
| 设置速度 | 较慢(需要构建) | ⚡ 即时 |
| 控制 | 🔧 完全控制代码 | 仅限于已发布版本 |
| 定制 | ✅ 可以修改源代码 | ❌ 无修改 |
| 离线使用 | ✅ 完全离线工作 | ⚠️ 需要初始下载 |
| 版本固定 | ✅ 可以使用特定的提交 | 📦 仅限于已发布的版本 |
| 推荐 | 开发人员,生产使用 | 快速测试,初学者 |
🎯 首先使用
重新启动AI工具(Cursor/Claude Code),然后开始使用:
对于T5L/C51嵌入式开发:
"Ingest all .h and .c files in the T5L project"
"Find UART register definitions"
"Show me Touch Command structure definitions"一般文件:
"Ingest api-spec.pdf"
"What does this document say about authentication?"🔧 配置提示
您应该使用的具体路径示例:
Windows示例:
"args": ["C:/Users/JohnDoe/Projects/mcp-local-rag/dist/index.js"],
"env": {
"BASE_DIR": "C:/Users/JohnDoe/Desktop/T5L-C51-Project"
}macOS示例:
"args": ["/Users/sarah/dev/mcp-local-rag/dist/index.js"],
"env": {
"BASE_DIR": "/Users/sarah/embedded-projects/t5l-development"
}Linux示例:
"args": ["/home/alex/projects/mcp-local-rag/dist/index.js"],
"env": {
"BASE_DIR": "/home/alex/t5l-workspace"
}如何找到自己的路:
# Find where you cloned the repo (run from the project folder)
pwd
# Output: /Users/yourname/Projects/mcp-local-rag
# Find your project folder
ls ~/Desktop/ # Look for your T5L project
# Or
ls ~/Documents/ # Check Documents folder获取Qwen API密钥:
- 访问 阿里云控制台
- 注册并获取您的API密钥(可用的免费层)
- 替换
your-qwen-api-key在配置中 - 钥匙看起来像:
sk-xxxxxxxxxxxxxxxxxxxxxxxxxx
要避免的常见路径错误:
- ❌
"args": ["./dist/index.js"]→ 使用绝对路径 - ❌
"BASE_DIR": "./t5l"→ 使用绝对路径 - ✅
"args": ["C:/Users/John/Projects/mcp-local-rag/dist/index.js"] - ✅
"BASE_DIR": "C:/Users/John/T5L-Project"
⚙️ 高级配置指南
🎯 性能调整参数
为了获得最佳的T5L/C51性能:
{
"mcpServers": {
"embedded-rag": {
"command": "node",
"args": ["C:/Users/YourName/Projects/mcp-local-rag/dist/index.js"],
"env": {
"BASE_DIR": "C:/Users/YourName/T5L-Project",
// 🔥 Recommended for T5L/C51
"EMBEDDING_PROVIDER": "qwen",
"DASHSCOPE_API_KEY": "your-api-key",
"EMBEDDING_MODEL_NAME": "text-embedding-v4",
"EMBEDDING_DIMENSION": "1024",
"EMBEDDING_BATCH_SIZE": "10",
// 🎯 Critical for Symbol Recognition
"RERANKING_ENABLED": "true",
"RERANKING_PROVIDER": "qwen",
"RERANKING_MODEL_NAME": "qwen3-rerank",
"RERANKING_MAX_DOCUMENTS": "500",
// ⚡ Optimized Chunk Settings
"CHUNK_SIZE": "512",
"CHUNK_OVERLAP": "100",
// 💾 Database Storage
"DB_PATH": "./lancedb"
}
}
}
}🔧 参数优化指南
嵌入配置
| 参数 | 推荐值 | 影响 | 何时调整 |
|---|---|---|---|
EMBEDDING_PROVIDER | "qwen" | 🔥 更好地理解符号 | 使用 local 如果隐私至关重要 |
EMBEDDING_BATCH_SIZE | 10 | 处理速度更快 | 增加到 16 对于大型项目 |
EMBEDDING_DIMENSION | 1024 | 更高的精度 | 必须与模型功能相匹配 |
CHUNK_SIZE | 512 | 平衡上下文 | 增加到 1024 对于长文件 |
CHUNK_OVERLAP | 100 | 上下文连续性 | 增加到 200 对于复杂的主题 |
重新排列配置 (对T5L/C51至关重要)
| 参数 | 推荐值 | 为什么重要 |
|---|---|---|
RERANKING_ENABLED | "true" | ✅ 嵌入式开发必备 |
RERANKING_PROVIDER | "qwen" | 🎯 符号感知重新评级 |
RERANKING_MAX_DOCUMENTS | 500 | 扩大候选人库 |
RERANKING_INSTRUCT | 自定义(见下文) | T5L特定优化 |
自定义重新排序说明:
"RERANKING_INSTRUCT": "You are T5L/C51 embedded development expert. Prioritize:\n1. Complete SFR register definitions (sfr P0 = 0x80)\n2. Full struct definitions (Touch_Command_0x05_KeyReturn)\n3. Macro definitions with hex values\n4. UART/GPIO/Timer related code blocks\n5. Distinguish C51 OS core vs DGUS GUI core content"🎯 用例特定配置
高精度T5L开发
{
"EMBEDDING_PROVIDER": "qwen",
"RERANKING_ENABLED": "true",
"CHUNK_SIZE": "512",
"EMBEDDING_BATCH_SIZE": "10",
"RERANKING_MAX_DOCUMENTS": "500"
}隐私关键开发
{
"EMBEDDING_PROVIDER": "local",
"RERANKING_ENABLED": "false",
"CHUNK_SIZE": "1024",
"CHUNK_OVERLAP": "200"
}大型文档项目
{
"EMBEDDING_PROVIDER": "qwen",
"RERANKING_ENABLED": "true",
"CHUNK_SIZE": "1024",
"CHUNK_OVERLAP": "300",
"EMBEDDING_BATCH_SIZE": "16"
}🔍 搜索性能优化
候选检索设置
系统会根据您的设置自动扩展搜索:
- 无需重新排名:检索
limit × 3候选人 - 重新排名:检索
limit × 6候选人(最多120人)
为什么这对T5L很重要:
- 更广泛的搜索 捕获最初可能得分较低的注册名称
- 符号识别 通过扩大候选人才库得到改善
- 上下文保存 确保完整的定义
搜索结果改进示例:
# Query: "UART baud rate configuration"
# Before (5 candidates):
# Might miss specific register definitions
# After (30 candidates with reranking):
# ✓ Finds SFR registers, struct definitions, configuration examples
# ✓ Preserves complete UART initialization code
# ✓ Includes dependency hints for header files🚨 常见配置陷阱
❌ 不要这样做:
{
"EMBEDDING_PROVIDER": "qwen",
"EMBEDDING_MODEL_NAME": "Xenova/all-MiniLM-L6-v2", // Wrong model for Qwen
"RERANKING_ENABLED": "true",
"DASHSCOPE_API_KEY": "" // Empty API key
}✅ 请执行以下操作:
{
"EMBEDDING_PROVIDER": "qwen",
"EMBEDDING_MODEL_NAME": "text-embedding-v4", // Correct Qwen model
"RERANKING_ENABLED": "true",
"DASHSCOPE_API_KEY": "sk-your-actual-api-key" // Valid API key
}🔧 环境变量参考
基本变量:
BASE_DIR: 必需 -您的项目根DASHSCOPE_API_KEY: Qwen需要 -从 阿里云控制台
性能变量:
CHUNK_SIZE:文本块大小(默认值:512)CHUNK_OVERLAP:上下文重叠(默认值:100)EMBEDDING_BATCH_SIZE:API批量大小(默认值:10)
高级变量:
DB_PATH:自定义数据库位置MAX_FILE_SIZE:最大文件大小限制(默认值:100MB)RERANKING_MAX_DOCUMENTS:重新登录的最大文档数(默认值:500)
🧪 测试您的配置
验证设置:
# Test with sample T5L code
"Ingest T5LOS8051.h"
"Find UART register definitions"
"Show Touch Command structure definitions"预期结果:
✅ 注册定义保持不变: sfr SCON = 0x98; 在单个块中 ✅ 完整的结构:已满 struct Touch_Command_0x05_KeyReturn ✅ 丰富的上下文: [Source: T5LOS8051.h] [Type: .h] [Core: C51] ✅ 依赖性提示:“\[注意:包括此头文件\]”
⚙️ 配置
环境变量
核心设置
| 变量 | 默认值 | 描述 | 有效范围 |
|---|---|---|---|
BASE_DIR | 当前目录 | 文档根目录。服务器仅访问此路径中的文件 | 任何有效路径 |
DB_PATH | ./lancedb/ | 矢量数据库存储位置 | 任何有效路径 |
MAX_FILE_SIZE | 104857600 (100MB) | 最大文件大小 | 1MB-500MB |
CHUNK_SIZE | 512 | 每块字符数 | 128-2048 |
CHUNK_OVERLAP | 100 | 块之间的重叠 | 0-(CHUNG_SIZE/2) |
🔄 混合嵌入设置
| 变量 | 默认值 | 描述 | 选项 |
|---|---|---|---|
EMBEDDING_PROVIDER | local | 嵌入提供者 | local, qwen |
EMBEDDING_MODEL_NAME | Xenova/all-MiniLM-L6-v2 | 本地型号名称 | HF型号ID |
DASHSCOPE_API_KEY | - | Qwen API密钥 | Qwen必需 |
EMBEDDING_DIMENSION | - | API模型的向量维度 | 自动检测 |
EMBEDDING_BATCH_SIZE | 8 | 处理批量 | 1-32 |
⚡ 重新排列设置
| 变量 | 默认值 | 描述 | 选项 |
|---|---|---|---|
RERANKING_ENABLED | false | 启用重新银行 | true, false |
RERANKING_PROVIDER | none | 重新排名提供商 | local, qwen, none |
RERANKING_MODEL_NAME | Xenova/bge-reranker-base | 本地重新登录模型 | HF模型ID |
RERANKING_MAX_DOCUMENTS | 500 | 每次重新存储请求的最大文档数 | 1-1000 |
传统兼容性
| 变量 | 描述 | 迁移 |
|---|---|---|
MODEL_NAME | 传统本地模型名称 | 自动迁移到 EMBEDDING_PROVIDER=local |
CACHE_DIR | 模型缓存目录 | 用于本地模型 |
配置示例
🔧 T5L/C51嵌入式开发(推荐)
BASE_DIR="/path/to/embedded/project"
EMBEDDING_PROVIDER="qwen"
DASHSCOPE_API_KEY="your-api-key"
EMBEDDING_MODEL_NAME="text-embedding-v4"
RERANKING_ENABLED="true"
RERANKING_PROVIDER="qwen"
CHUNK_SIZE="512"
CHUNK_OVERLAP="100"🏠 一般文件(仅限本地,隐私优先)
BASE_DIR="/home/user/documents"
EMBEDDING_PROVIDER="local"
EMBEDDING_MODEL_NAME="Xenova/all-MiniLM-L6-v2"
RERANKING_ENABLED="false"🌐 与Qwen API混合使用(通用)
BASE_DIR="/home/user/documents"
EMBEDDING_PROVIDER="qwen"
DASHSCOPE_API_KEY="your-api-key"
EMBEDDING_MODEL_NAME="text-embedding-v4"
RERANKING_ENABLED="true"
RERANKING_PROVIDER="qwen"⚡ 高性能本地(无API成本)
BASE_DIR="/home/user/documents"
EMBEDDING_PROVIDER="local"
EMBEDDING_MODEL_NAME="Xenova/all-MiniLM-L6-v2"
RERANKING_ENABLED="true"
RERANKING_PROVIDER="local"
CHUNK_SIZE="1024"💻 用法
🎯 嵌入式开发使用
对于T5L/C51项目:
"Ingest T5LOS8051.h header file"
"Ingest all .h and .c files in the embedded project"
"Ingest DGUS configuration documentation"搜索注册表定义:
"Find UART SFR register definitions"
"Search for timer register addresses"
"What are the GPIO port addresses in T5L?"搜索数据结构:
"Find Touch Command structure definitions"
"Show me all struct definitions related to UART"
"Get display command structures"搜索配置示例:
"Find UART baud rate configuration examples"
"How to initialize Timer1 for 9600 baud"
"GPIO setup for input/output mode"📄 一般文档使用
摄取单个文档:
"Ingest the document at /Users/me/docs/api-spec.pdf"批量摄取多个文档:
"Ingest all PDF files in the /projects/docs directory"服务器:
- 验证文件是否存在并且在大小限制范围内
- 提取文本(PDF/DOCX/TXT/MD格式)
- 应用代码感知分块 用于嵌入式文件
- 使用配置的提供程序生成嵌入
- 具有增强元数据(文件类型、核心检测)的存储
💾 数据库存储:数据的去向
当您摄取文件时,RAG服务器会创建一个 本地矢量数据库 使用LanceDB。事情是这样的:
默认存储位置:
./lancedb/
├── chunks.lance # Main database file (contains vectors + metadata)
└── _versions/ # Database version history
├── 0/
├── 1/
└── ...存储的内容:
- 文档块:具有增强元数据的文本片段
- 矢量嵌入:语义搜索的数值表示
- 文件元数据:来源、类型、核心分类(C51/DGUS)
- 搜索索引:针对快速相似性搜索进行了优化
摄入T5L文件后的示例结构:
./lancedb/
├── chunks.lance # ~50MB for typical embedded project
│ ├── Document chunks from T5LOS8051.h
│ ├── Register definitions (sfr P0 = 0x80;)
│ ├── Struct definitions (Touch_Command_0x05_KeyReturn)
│ └── Metadata: [Source: T5LOS8051.h] [Type: .h] [Core: C51]
└── _versions/
└── 0/ # Initial database state自定义数据库位置:
# Set custom database path
DB_PATH="/path/to/my/vector/db"
# In your MCP configuration:
"env": {
"BASE_DIR": "/path/to/documents",
"DB_PATH": "/path/to/my/vector/db"
}数据库属性:
- 文件格式:基于Apache Arrow的Lance格式(列式存储)
- 尺寸:嵌入式项目通常为10-100MB
- 演出:即使有数千个块,也能进行亚秒级搜索
- 可移植性:可以在计算机之间复制数据库文件
- 隐私:所有内容都存储在本地(没有云存储)
🔍 增强的搜索功能
基本语义搜索:
"What does the API documentation say about authentication?"
"Find information about rate limiting"
"Search for error handling best practices"符号感知搜索(针对嵌入式增强):
"Find all uses of 0x5A in the codebase"
"Search for register 0x98 definitions"
"Get all macro definitions with hex values"使用上下文结果搜索:
"Find UART initialization code"结果格式(针对嵌入式增强):
[Source: T5LOS8051.h]
[Type: .h]
[Core: C51]
sfr SCON = 0x98;
sfr SBUF = 0x99;
[Note: Include this header file when using these definitions]文件管理
列出所有摄入的文件:
"List all ingested files"从数据库中删除文件:
"Delete /Users/me/docs/old-spec.pdf from the RAG system"检查系统状态:
"Show the RAG server status"🗃️ 数据库管理
查看数据库内容:
# Check what's in your vector database
ls -la ./lancedb/
# Database size information
du -sh ./lancedb/重置数据库(重新开始):
# Option 1: Delete database directory (complete reset)
rm -rf ./lancedb/
# Option 2: Use MCP tool to remove specific files
"Delete /path/to/file.h from the RAG system"备份和还原:
# Backup your database
cp -r ./lancedb/ ./lancedb-backup-$(date +%Y%m%d)/
# Restore from backup
rm -rf ./lancedb/
cp -r ./lancedb-backup-20240101/ ./lancedb/数据库迁移(可移植安装程序):
# Move database to shared location
mv ./lancedb/ /shared/embedded-rag-db/
# Update your MCP configuration to point to new location
"env": {
"BASE_DIR": "/path/to/documents",
"DB_PATH": "/shared/embedded-rag-db"
}🏗️ 项目结构
src/
├── index.ts # Entry point, MCP server initialization
├── server/ # MCP server and tool handlers
│ └── index.ts # RAGServer class with 5 MCP tools
├── interfaces/ # Type definitions for modularity
│ ├── IEmbedder.ts # Embedding interface
│ ├── IReranker.ts # Reranker interface
│ └── IVectorStore.ts # Vector store interface
├── services/ # Concrete implementations
│ ├── embedder/ # Embedding providers
│ │ ├── LocalEmbedder.ts # Transformers.js local embedding
│ │ ├── QwenEmbedder.ts # Alibaba Cloud Qwen API
│ │ └── EmbedderFactory.ts # Factory pattern
│ ├── reranker/ # Reranking providers
│ │ ├── LocalReranker.ts # Local cross-encoder reranking
│ │ ├── QwenReranker.ts # Qwen API reranking
│ │ └── RerankerFactory.ts # Factory pattern
│ └── path/ # Cross-platform utilities
│ └── PathUtils.ts # Windows compatibility
├── parser/ # Document parsing
│ └── index.ts # PDF/DOCX/TXT/MD support
├── chunker/ # Text splitting
│ └── index.ts # Intelligent chunking
├── vectordb/ # Vector database operations
│ └── index.ts # LanceDB integration
├── types/ # Configuration types
│ └── config.ts # Config types and migration
├── errors/ # Unified error hierarchy
│ └── index.ts # RAGError, ValidationError, etc.
└── __tests__/ # Test suites🔧 发展
从源头构建
git clone https://github.com/shinpr/mcp-local-rag.git
cd mcp-local-rag
npm install代码质量
# Type check
npm run type-check
# Lint and format
npm run check:fix
# Full quality check
npm run check:all测试
# Run all tests
npm test
# Run with coverage
npm run test:coverage
# Watch mode for development
npm run test:watch📊 演出
测试环境:MacBook Pro M1(16GB RAM),Node.js 22(2025年1月)
本地嵌入(全MiniLM-L6-v2)
- 查询性能:10000个块需要1.2秒
- 摄入速度:10MB PDF约45秒
- 内存使用:200MB基线,800MB峰值
- 维度:384维向量
Qwen API嵌入(text-Embedding-v4)
- 查询性能:0.8秒+API延迟
- 摄入速度:10MB PDF约25秒(处理速度更快)
- 内存使用:150MB基线(仅限本地处理)
- 维度:1024维矢量(更高精度)
混合动力与重新排名
- 查询性能:总共1.5-2.0秒(搜索+重新排序)
- 精度提高:相关性得分提高15-25%
- API成本:对于典型的使用模式来说,这是最低限度的
🛡️ 安全
路径限制:仅访问内的文件 BASE_DIR。使用以下命令阻止路径遍历尝试 PathUtils.isSafePath().
本地处理:所有本地嵌入处理都在您的计算机上进行。初始模型下载后没有网络请求。
API安全:Qwen API键仅通过环境变量传递。API连接使用具有超时保护的HTTPS。
尺寸验证:自动验证可防止不同嵌入模型之间的向量维度不匹配。
🔍 故障排除
常见问题
搜索时“未找到结果”
- 必须先摄入文件:
"Ingest /path/to/document.pdf" - 验证摄入:
"List all ingested files"
“尺寸不匹配”错误
- 在具有不同向量维度的嵌入提供程序之间切换时发生
- 解决方案:删除现有数据库并重新摄取文档
- 位置:删除您的
DB_PATH目录(默认:./lancedb)
“Qwen需要API密钥”错误
- 集
DASHSCOPE_API_KEY环境变量 - 从获取密钥 阿里云控制台
“模型下载失败”
- 首次使用时检查互联网连接
- 确保有足够的磁盘空间(需要约120MB)
- 验证HuggingFace模型URL是否可访问
MCP客户端问题
对于光标:
- 设置→ 特性→ 模型上下文协议
- 验证服务器配置是否已保存
- 完全重新启动游标(Cmd+Q)
- 检查MCP连接状态
克劳德代码:
claude mcp list # Verify server appears
claude mcp remove local-rag # Remove if needed
claude mcp add local-rag --scope user --env BASE_DIR=/path/to/docs -- npx -y mcp-local-rag🤝 贡献
欢迎投稿!在提交PR之前:
- 运行测试:
npm test - 代码质量:
npm run check:all - 添加测试 对于新功能
- 更新文档 如果改变行为
📄 许可证
MIT许可证-有关详细信息,请参阅许可证文件。
个人和商业用途免费。无需归因,但感谢。
🙏 致谢
内置:
- 模型上下文协议 通过Anthropic
- LanceDB 用于矢量存储
- Transformers.js 通过拥抱脸
- LangChain.js 用于文本分割
- 阿里云Qwen API服务
为希望在不损害隐私的情况下进行人工智能文档搜索的开发人员创建的实用工具。
🔬 嵌入式开发:有什么不同?
v0.3.0之前(通用RAG)
❌ Register definition split across chunks:
"sfr P0 =" in one chunk, "0x80;" in another
❌ Structure definitions broken:
struct definitions cut in middle, losing complete context
❌ No file context:
Results don't show which file the code came from
❌ Generic search:
"0x5A" treated as regular text, not as instruction codev0.3.0之后(嵌入式感知RAG)
✅ Atomic register preservation:
"sfr P0 = 0x80;" kept in single chunk
✅ Complete struct definitions:
Full Touch_Command_0x05_KeyReturn structure preserved
✅ Rich context injection:
[Source: T5LOS8051.h] [Type: .h] [Core: C51]
✅ Symbol-aware search:
Special handling for hex values, register addresses现实世界影响
对于T5L/C51开发人员:
- 更快的发展:快速找到精确的寄存器定义,无需猜测
- 减少错误:完整的结构定义防止丢失字段
- 更好的上下文:知道每个结果来自哪个文件和核心类型
- 符号智能:搜索
0x98查找UART SCON寄存器定义 - 依赖意识:自动提醒以包含必要的头文件
