Qdrant用法;Qdrant在langchain里的用法

基础用法这里不再赘述了。直接参照官网。
想看看一些概率可以参考下面两个网站:
1. https://m.elecfans.com/article/2078558.html
2. https://blog.csdn.net/cxs812760493/article/details/135346390

下面说一些在 langchain 可能遇到的问题:

1. 先确定自己 Collections 中向量 的长度不然会提示:

  b'{"status":{"error":"Wrong input: Vector inserting error: expected dim: 100, got 1536"},"time":0.00411009}'

from qdrant_client.models import PointStruct
from qdrant_client import QdrantClient
import uuid
import numpy as np

client = QdrantClient(host="localhost", port=6333)

collection_name = 'my_collection' 

operation_info = client.upsert(
    collection_name=collection_name,
    wait=True,
    points=[ 
        PointStruct(id=str(uuid.uuid4()), vector=np.random.rand(1536), payload={"city": "Berlin"}), 
        PointStruct(id=str(uuid.uuid4()), vector=np.random.rand(1536), payload={"city": "Berlin2"}), 
    ],
)

print(operation_info)

 

2. 向量数据库中数据已经成功插入,用户内容匹配的方法

# 计算嵌入向量
    def generate_embedding(self,query_text):
        openai_client = openai.Client(
            api_key=Keys.MONSTER_API_KEY, base_url=Keys.MONSTER_API_BASE
        )
        embedding_result = openai_client.embeddings.create(
            input=query_text, model="text-embedding-ada-002"
        )
        
        return embedding_result.data[0].embedding
    
    # 从 qdrant 中查询数据
    def qdrant_query(self, query_text):
        try:
            query_vector = self.generate_embedding(query_text)

            result = self.qdrant_client.search(
                collection_name=self.collection_name,
                query_vector=query_vector,
                limit=10,
            )

            # 此处可以做一个简单的计算, 将低于 0.7 的去掉
            # for res in result:
            #     print(res)
            
            return result

        except Exception as e:
            print(f"请稍后重试,异常原因: {e}") 

            # 创建仓库
            self.qdrant_client.recreate_collection(
                collection_name=self.collection_name,
                vectors_config=models.VectorParams(size=1536, distance=models.Distance.COSINE),
            )

            return []

 

3. langchain 文档中都是先处理文件(txt,pdf等)然后再检索的

retriever = qdrant.as_retriever()

 有没有可能是,文件已经插入 Collections 后再检索的办法。我一直没有找到。还是思路不对。



posted @ 2024-04-19 22:39  一杯热水  阅读(191)  评论(0编辑  收藏  举报