Qdrant用法;Qdrant在langchain裡的用法

一杯热水發表於2024-04-19

基礎用法這裡不再贅述了。直接參照官網。
想看看一些機率可以參考下面兩個網站:
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 後再檢索的辦法。我一直沒有找到。還是思路不對。



相關文章