当前位置:   article > 正文

构建搜索 API服务_asyncqdrantclient

asyncqdrantclient

前面我们已完成在Qdrant创建了startups集合,导入了startups_demo.json数据,让我们开始构建神经搜索类。

为了处理传入请求,神经搜索需要两件事:1)将查询转换为向量的模型,2)Qdrant 客户端来执行搜索查询。

创建搜索类

1. 创建一个名为的文件neural_searcher.py并指定以下内容。
  1. from qdrant_client import QdrantClient
  2. from sentence_transformers import SentenceTransformer
  3. class NeuralSearcher:
  4. def __init__(self, collection_name):
  5. self.collection_name = collection_name
  6. # Initialize encoder model
  7. self.model = SentenceTransformer("all-MiniLM-L6-v2", device="cpu")
  8. # initialize Qdrant client
  9. self.qdrant_client = QdrantClient("http://localhost:6333")
2. 编写搜索功能
  1. def search(self, text: str):
  2. vector = self.model.encode(text).tolist()
  3. search_result = self.qdrant_client.search(
  4. collection_name=self.collection_name,
  5. query_vector=vector,
  6. query_filter=None,
  7. limit=5
  8. )
  9. payloads = [hit.payload for hit in search_result]
  10. return payloads

现在已经创建了一个用于神经搜索查询的类。现在将其包装到服务中

使用 FastAPI 部署搜索

要构建该服务,您将使用 FastAPI 框架。

1. 安装 FastAPI

要安装它,请使用命令

pip install fastapi uvicorn
2. 实现服务

创建一个名为的文件service.py并指定以下内容。

该服务只有一个 API 端点,如下所示:

  1. from fastapi import FastAPI
  2. # The file where NeuralSearcher is stored
  3. from neural_searcher import NeuralSearcher
  4. app = FastAPI()
  5. # Create a neural searcher instance
  6. neural_searcher = NeuralSearcher(collection_name='startups')
  7. @app.get("/api/search")
  8. def search_startup(q: str):
  9. return {
  10. "result": neural_searcher.search(text=q)
  11. # "result": neural_searcher.async_search(text=q) # 异步非阻塞
  12. }
  13. if __name__ == "__main__":
  14. import uvicorn
  15. uvicorn.run(app, host="0.0.0.0", port=8000)
3. 运行服务
python service.py

打开浏览器http://localhost:8000/docs

就可以看到服务的调试界面

请随意使用它,查询语料库中的公司,并查看结果

http://127.0.0.1:8000/api/search?q=Artificial%20intelligence%20machine%20learning

4. 异步非阻塞

调用QdrantClient替换为AsyncQdrantClient,AsyncQdrantClient提供与同步对应项相同的方法QdrantClient

注:AsyncQdrantClient提供与同步对应项相同的方法QdrantClient,异步是在qdrant-client1.6.1版本中引入

  1. from qdrant_client import QdrantClient, AsyncQdrantClient
  2. class NeuralSearcher:
  3. # .../ init()
  4. # 异步查询
  5. async def async_search(self, text: str):
  6. # AsyncQdrantClient提供与同步对应项相同的方法QdrantClient,异步客户端是在qdrant-client1.6.1版本中引入
  7. client = AsyncQdrantClient("http://localhost:6333")
  8. vector = self.model.encode(text).tolist()
  9. search_result = await client.search(
  10. collection_name=self.collection_name,
  11. query_vector=vector,
  12. query_filter=None,
  13. limit=5
  14. )
  15. payloads = [hit.payload for hit in search_result]
  16. return payloads

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/961060
推荐阅读
相关标签
  

闽ICP备14008679号