Инициализировать qdrant для langchain

Я хочу поэкспериментировать с добавлением существующей базы данных векторов qdrant в langchain для проекта ChatGPT. Однако я не могу найти способ инициализировать объект Qdrant без предоставления документов и внедрений, что кажется мне странным, поскольку я должен иметь возможность просто предоставить URL-адрес своей базы данных, поскольку документы и внедрения уже существуют в базе данных, например, когда Я взаимодействую через клиент Python qdrant:

      QdrantClient(host=host, port=port)

В официальной документации langchain я могу найти только примеры, в которых мне нужно предоставить данные при загрузке объекта, например:

      url = "<---qdrant url here --->"
qdrant = Qdrant.from_documents(
     docs,
     embeddings,
     url,
     collection_name="my_documents",
)

В их документации также указано, что:

Оба метода Qdrant.from_texts и Qdrant.from_documents отлично подходят для начала использования Qdrant с Langchain. В предыдущих версиях коллекция воссоздавалась каждый раз, когда вы вызывали любую из них. Это поведение изменилось. В настоящее время коллекция будет повторно использоваться, если она уже существует. Установка для Force_recreate значения True позволяет удалить старую коллекцию и начать с нуля.

Что мне кажется странным, поскольку коллекция используется повторно (как я хочу), но мне все равно приходится предоставлять документы и вложения.

Я также проверил официальную документацию qdrants по этому вопросу, и они предоставляют половинное решение, в котором мне «только» нужно предоставить вложения:

      import qdrant_client

embeddings = HuggingFaceEmbeddings(
    model_name="sentence-transformers/all-mpnet-base-v2"
)

client = qdrant_client.QdrantClient(
    "<qdrant-url>",
    api_key="<qdrant-api-key>", # For Qdrant Cloud, None for local instance
)

doc_store = Qdrant(
    client=client, collection_name="texts", 
    embeddings=embeddings,
)

Если у кого-то есть решение этой проблемы, я был бы рад получить некоторую помощь.

3 ответа

Оказывается, я неправильно понял документацию.

тотembeddingsОбъект должен быть не списком вложений, а скорее моделью, такой как s-BERT или модель встраивания openAI.

Вbase.pyиз исходного кода,from_documentsметод требуетdocumentsиembeddingпараметры

          @classmethod
    def from_documents(
        cls: Type[VST],
        documents: List[Document],
        embedding: Embeddings,
        **kwargs: Any,

Я надеюсь это тебе поможет

      def _qdrant_connection(self, collection_name=None):
        if collection_name is None:
            collection_name = self.collection_name
        try:
            qdrant_clients = qdrant_client.QdrantClient(
                url=qdrant_end_point, 
                api_key=qdrant_api_key
            )
            self.vectordb = Qdrant(
                client=qdrant_clients,
                collection_name=collection_name,
                embeddings=self.embeddings
            )

        except Exception as e:
            logging.error(f"Cannot connect to Qdrant: {e}")
Другие вопросы по тегам