带Bun的矢量MCP服务器
使用Bun构建的类型安全向量数据库,使用SQLite进行存储,使用基于混合问题的嵌入进行高级语义搜索。
特性
- 🚀 采用丁腈橡胶制造,实现最佳性能
- 📊 基于SQLite的存储使用
bun:sqlite - 🤖 AI SDK集成,支持多个提供商
- 🧠 基于混合问题的RAG,使用假设问题嵌入(HQE)
- 📄 支持PDF、文本、CSV和代码文件
- 🌐 基于网站地图的网络内容摄取
- 🔍 基于加权混合相似度的高级语义搜索
- 🛡️ 使用TypeScript实现完全类型安全
- 🌐 用于搜索和提问的REST API
安装
bun installSQLite设置(苹果硅)
如果你在苹果Silicon Mac上遇到SQLite错误,你需要ARM64 Homebrew:
# 1. Install ARM64 Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 2. Add to PATH
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrc
source ~/.zshrc
# 3. Install ARM64 SQLite
/opt/homebrew/bin/brew install sqlite
# 4. Verify it's ARM64
file /opt/homebrew/opt/sqlite/lib/libsqlite3.dylib用于网站地图摄取(可选)
如果您计划使用站点地图摄取功能,请安装Playwright浏览器:
bunx playwright install chromium这会下载一个真正的Chromium浏览器,在抓取网站时绕过机器人检测。
配置
此项目使用 AI SDK 用于嵌入和LLM功能。您可以使用LMStudio、OpenAI或任何与OpenAI兼容的API。
LMStudio设置(建议用于本地)
- 下载并安装 LMStudio
- 在LMStudio中加载您喜欢的嵌入模型和LLM
- 启动LMStudio服务器(默认:
http://localhost:1234) - 创建一个
.env文件(可选,默认值适用于LMStudio):
AI_PROVIDER=openai
AI_BASE_URL=http://localhost:1234/v1
AI_API_KEY=lm-studio
# Model names (must match models loaded in LMStudio)
LLM_MODEL=llama-3.2-3b-instruct
EMBEDDING_MODEL=text-embedding-nomic-embed-text-v1.5OpenAI或其他云提供商
AI_PROVIDER=openai
AI_BASE_URL=https://api.openai.com/v1
AI_API_KEY=your-openai-api-key
LLM_MODEL=gpt-4.1-mini
EMBEDDING_MODEL=text-embedding-3-smallMCP集成
该矢量数据库可以用作具有Claude Desktop或其他MCP客户端的MCP(模型上下文协议)服务器。
使用Claude Desktop进行设置
- 添加到您的Claude桌面配置(
~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"mw-vector": {
"command": "bun",
"args": ["mcp.ts"],
"cwd": "PUBLIC_ENDPOINT"
}
}
}- 重新启动克劳德桌面
- 在Claude中使用以下工具:
- vector_search -搜索类似内容 - vector_ask -提问并获得人工智能生成的答案(RAG) - vector_status -检查数据库状态
用法
1.馈送文档
选项A:本地文件
将您的PDF、文本、CSV或代码文件放入 ./source 目录,然后运行:
bun run feed或者指定一个自定义目录:
bun scripts/feed-files.ts /path/to/your/documents选项B:网站网站地图
使用网站地图从网站获取内容:
bun run feed-sitemap https://docs.example.com/sitemap.xml这将:
- 解析站点地图(处理嵌套的站点地图索引)
- 启动真正的Chrome浏览器(通过Playwright)
- 访问每个URL并提取呈现的内容
- 通过同一RAG管道处理内容
注: 这使用Playwright浏览器自动化来绕过机器人检测(Cloudflare等)。首次运行时,请确保已安装浏览器: bunx playwright install chromium
摄入过程中会发生什么
摄入过程将:
- 从所有支持的文件(PDF、TXT、CSV、代码文件或网页)中提取文本
- 将内容分割成块(有重叠)
- 使用LLM为每个块生成假设问题
- 使用配置的嵌入模型为内容和问题生成嵌入
- 将所有内容存储在SQLite数据库中
2.启动API服务器
bun start或者在开发过程中进行热重新加载:
bun run dev服务器将于启动 http://localhost:1738
3.搜索或提问
搜索类似文档
curl -X POST http://localhost:1738/search \
-H "Content-Type: application/json" \
-d '{"query": "your search query", "topK": 5}'提问(RAG与LLM)
curl -X POST http://localhost:1738/ask \
-H "Content-Type: application/json" \
-d '{"question": "What is the conjugate method?"}'API终点
GET /
健康检查和API信息
GET /health
服务器运行状况和文档计数
POST /search
搜索类似文档
运作原理
基于混合问题的向量搜索
该系统使用先进的 假设问题嵌入(HQE) 方法:
- 摄入:
- 文档被解析并拆分为重叠的块 - 对于每个块,LLM生成5个假设问题,该块将回答这些问题 - 内容和问题都嵌入其中 - 所有包含元数据的嵌入都存储在SQLite中
- 搜索:
- 使用相同的模型嵌入查询文本 - 混合评分:针对问题嵌入(60%权重)和内容嵌入(40%权重)计算相似性 - 这更准确地匹配了用户查询,因为查询自然是类似问题的
- 结果:根据加权混合分数返回Top-K最相似的块
为什么这效果更好: 像“我应该如何训练?”这样的用户查询与“什么是有效的训练方法?”等嵌入式问题比与关于训练方法的原始内容块更接近。
RAG(检索增强生成)
- 检索:该问题首先用于搜索最相关的文档块(混合向量搜索)
- 上下文:将相关块组合在一起,形成LLM的上下文
- 生成:本地LLM根据问题和检索到的上下文生成答案
- 响应:答案与源引用一起返回
技术细节
配置
- 提供者:AI SDK(LMStudio/OpenAI等)
- 嵌入模型:可通过环境变量配置(默认:nomic嵌入文本)
- 嵌入尺寸:768(nomic嵌入文本的默认值)
- 组块大小:1200个字符,400个字符重叠
- 每块问题:5(可在中配置
src/constants/rag.ts) - 混合搜索权重:60%的问题相似性,40%的内容相似性
- 相似性度量:余弦相似性
- 数据库:SQLite通过
bun:sqlite
演出
- LMStudio:确保模型在运行前已加载
- 云提供商:API费率限制和费用可能适用
- 可以使用更强大的模型来获得更好的结果
许可证
麻省理工学院
