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)
, сделал трюк.