ValueError: не удалось передать входной массив из формы (1536) в форму (2000)

Пытаюсь создать векторсор Qdrant и добавить свои документы.

  • Мои вложения основаны наOpenAIEmbeddings
  • тотQdrantClientявляется локальным для моего случая
  • коллекция, которую я создаю, имеет VectorParams как таковую:VectorParams(size=2000, distance=Distance.EUCLID)

Я получаю следующую ошибку:ValueError: could not broadcast input array from shape (1536,) into shape (2000,)

Я понимаю, что моя ошибка заключается в том, как я настраиваю векторные параметры, но я не понимаю, как нужно вычислять эти значения.

вот мой полный код:

      import os
from typing import List

from langchain.docstore.document import Document
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Qdrant, VectorStore
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams

def load_documents(documents: List[Document]) -> VectorStore:
    """Create a vectorstore from documents."""
    collection_name = "my_collection"
    vectorstore_path = "data/vectorstore/qdrant"
    embeddings = OpenAIEmbeddings(
        model="text-embedding-ada-002",
        openai_api_key=os.getenv("OPENAI_API_KEY"),
    )
    qdrantClient = QdrantClient(path=vectorstore_path, prefer_grpc=True)
    qdrantClient.create_collection(
        collection_name=collection_name,
        vectors_config=VectorParams(size=2000, distance=Distance.EUCLID),
    )
    vectorstore = Qdrant(
        client=qdrantClient,
        collection_name=collection_name,
        embeddings=embeddings,
    )
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=1000,
        chunk_overlap=200,
    )

    sub_docs = text_splitter.split_documents(documents)
    vectorstore.add_documents(sub_docs)

    return vectorstore

Есть идеи о том, как правильно настроить параметры вектора?

1 ответ

Итак, как я понимаю, значение1536фиксируется размером вектораOpenAIEmbeddings.

Цитата из этой статьи: https://openai.com/blog/new-and-improved-embedding-model .

Новые вложения имеют всего 1536 измерений, что составляет одну восьмую размера вложений davinci-001, что делает новые вложения более экономичными при работе с векторными базами данных.

Таким образом, изменив приведенный выше код наVectorParams(size=1536, distance=Distance.EUCLID), сделал трюк.

Другие вопросы по тегам