文档向量搜索系统

基于MongoDB Atlas Vector Search和Voyage AI嵌入的文档向量检索系统,支持语义搜索和文本匹配搜索。

  • by patw
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 patw/avs-docs-mcp

使用说明

MCP文档搜索系统

一个使用MongoDB Atlas向量搜索和Voyage AI嵌入的文档检索向量搜索系统。

附带的示例数据是用于Atlas向量搜索的!

特性

  • 处理并分块具有层级标题的Markdown文档
  • 使用Voyage AI的上下文嵌入API生成嵌入表示
  • 在MongoDB中存储具有父子关系的文档和嵌入
  • 提供一个用于语义文档搜索的FastMCP服务器
  • 支持可配置的向量维度和分块策略

可用的MCP工具

文档搜索服务器提供以下工具:

  1. search_documents_vector(query: str, limit: int = 5)

    • 主要使用向量相似度进行搜索的方法
    • 返回带有元数据和相似度分数的文档片段
    • 最适合基于语义/意义的查询
  2. 根据全局信息:翻译的目标语言是中文,对原文内容“search_documents_lexically(query: str, limit: int = 1)”进行翻译,译文内容为:“按词汇搜索文档(query: str, limit: int = 1)”

    • 使用词汇/文本匹配进行回退搜索
    • 返回包含搜索得分的完整父文档
    • 当向量搜索找不到良好匹配时很有用
  3. 获取父文档(parent_id: 字符串)

    • 通过ID检索完整的父文档
    • 返回原始内容和文件路径
    • 搜索后使用以获取块的完整上下文

先决条件

  • Python 3.10+
  • 启用向量搜索的MongoDB Atlas集群
  • 旅行AI API密钥

安装

  1. 克隆仓库:
git clone https://github.com/patw/avs-document-search.git
cd avs-document-search
  1. 安装依赖项:
pip install -r requirements.txt
  1. 创建一个 .env 根据文件内容翻译 sample.env 使用您的凭据

用法

  1. 在 docs/ 目录中导入文档:
python ingest_docs.py
  1. 运行搜索服务器:
python avs-mcp.py

运行搜索服务器除了验证您的MongoDB URI是否正确外,并不会做太多事情,您需要将这个MCP服务器连接到像Claude Desktop这样的MCP客户端。以下是一个示例配置:

{
  "mcpServers": {
    "Atlas Vector Search Docs": {
      "command": "uv",
      "args": [
        "run",
        "--with",
        "fastmcp, pymongo, requests",
        "fastmcp",
        "run",
        "<path to>/avs-docs-mcp/avs-mcp.py"
      ]
    }
  }
}

配置

根据上面的信息,执行如下指令: sample.env 好的,以下是原文内容的翻译: .env 并编辑以进行配置:

  • MongoDB连接字符串
  • 数据库和集合名称
  • 旅行AI API密钥
  • 向量维度(默认256)

未来的改进

  • 实现结合向量和文本搜索的混合搜索 $rankFusion (当MongoDB 8.1在Atlas上正式发布时)
  • 使用Docling支持更多文件格式(PDF、Word等)

贡献

欢迎提交拉取请求!对于重大更改,请先打开一个问题。

作者

帕特·文多夫
pat.wendorf@mongodb.com
GitHub: ---

许可证

麻省理工学院