Инициализировать 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}")