HuggingFace Space с Langchain и Gradio SDK: почему я получаю ошибку, связанную с FAISS, когда использую Chroma, а не FAISS?
Я создаю HuggingFace Space с Langchain (Gradio SDK) для обмена своими данными, клонирую из пространства Chat Your Data Харрисона Чейза и продолжаю оттуда. Исправлена проблема с устареванием (см. Обсуждение ), переключился на DirectoryLoader, чтобы можно было импортировать несколько файлов, и хочу использовать Chroma вместо FAISS.
Я новичок в этом, поэтому стараюсь вносить как можно меньше изменений и хочу продолжать использовать Pickle, как в оригинале, но для встраивания использую Chroma, а не FAISS, как это происходит при приеме данных:
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import DirectoryLoader
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
import pickle
# Load Data
loader = DirectoryLoader('./data/')
raw_documents = loader.load()
# Split text
text_splitter = RecursiveCharacterTextSplitter()
documents = text_splitter.split_documents(raw_documents)
# Load Data to vectorstore
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(documents=documents, embedding=embeddings)
# Save vectorstore
with open("vectorstore.pkl", "wb") as f:
pickle.dump(vectorstore, f)
Это не должно быть проблемой, верно? Или мариновать совсем ненужно? В любом случае, мой главный вопрос ниже.
Мое пространство работает, но я получаю сообщение об ошибкеAttributeError: 'OpenAIEmbeddings' object has no attribute 'deployment'
когда я наконец пойду общаться со своими данными. Вот журнал:
...
File "/home/user/.local/lib/python3.11/site-packages/langchain/vectorstores/faiss.py", line 334, in similarity_search
docs_and_scores = self.similarity_search_with_score(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.local/lib/python3.11/site-packages/langchain/vectorstores/faiss.py", line 275, in similarity_search_with_score
embedding = self.embedding_function(query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.local/lib/python3.11/site-packages/langchain/embeddings/openai.py", line 506, in embed_query
return self.embed_documents([text])[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/.local/lib/python3.11/site-packages/langchain/embeddings/openai.py", line 478, in embed_documents
return self._get_len_safe_embeddings(texts, engine=self.deployment)
^^^^^^^^^^^^^^^
AttributeError: 'OpenAIEmbeddings' object has no attribute 'deployment'
Я вижу, что журнал показывает, что он использует FAISS (.../langchain/vectorstores/faiss.py
), но я даже не использую FAISS, я использую Chroma. Эта же ошибка выдается, даже когда я использую FAISS, поэтому я подумал, что переход на Chroma может решить проблему.
Потом, когда я удалюfaiss-cpu
от моегоrequirements.txt
файл, пространство больше не запускается, и я получаю сообщение об ошибке
Traceback (most recent call last):
File "/home/user/app/app.py", line 17, in <module>
vectorstore = pickle.load(f)
^^^^^^^^^^^^^^
ModuleNotFoundError: No module named 'faiss'
Кто-нибудь знает, почему это происходит? Опять же, я очень новичок, поэтому могу упустить что-то элементарное. Должен ли я избавиться от рассола и использовать Chroma с постоянным каталогом?
Заранее спасибо.