Ограничьте количество токенов в минуту в LangChain, используя OpenAI-вложения и векторное хранилище Chroma.
Я ищу способ ограничить количество токенов в минуту при сохранении вложений в векторном хранилище Chroma. Вот мой код:
[...]
# split the documents into chunks
text_splitter = CharacterTextSplitter(chunk_size=1500, chunk_overlap=0)
texts = text_splitter.split_documents(documents)
# select which embeddings we want to use
embeddings = OpenAIEmbeddings()
# create the vectorestore to use as the index
db = Chroma.from_documents(texts, embeddings)
[...]
Я получаю следующую ошибку:
Retrying langchain.embeddings.openai.embed_with_retry.<locals>._embed_with_retry in 4.0 seconds as it raised RateLimitError: Rate limit reached for default-text-embedding-ada-002 in organization org-xxx on tokens per min. Limit: 1000000 / min. Current: 1 / min. Contact us through our help center at help.openai.com if you continue to have issues..
Поскольку функция.from_documents
предоставляется библиотекой langchain/chroma, его нельзя редактировать. Мне было интересно, знает ли кто-нибудь из вас способ ограничить количество токов в минуту при хранении большого количества текстовых фрагментов и вложений в векторном хранилище? Я подумал о создании нескольких наборов текстовых фрагментов и сохранении их набора за набором, например, с помощью.persist
функция. Однако это приведет к перезаписиdb
каждый раз, насколько я понял. Я не смог найти решение в документации по langchain или цветности.
Большое спасибо за помощь.
С уважением
1 ответ
Это происходит потому, что вы можете отправить в OpenAI ограниченное количество токенов.
Решение, которое я нашел, — медленно передать его OpenAI. Я ожидал, что в Chroma будет ограничитель скорости, но не нашел такой штуки. Ниже код сделал это для меня
После того, как вы создали свою базу данных
for splitted_document in all_splits:
vectorstore.from_documents(documents=[splitted_document], embedding=OpenAIEmbeddings(), persist_directory=base_path)
time.sleep(60)