작성
·
47
0
안녕하세요. 강의 잘듣고 있는 학생입니다.
이번에 프로토콜 문서를 아래와 같이 동작시키고 있습니다.
chunk_size = 10000
for i in range(0, len(document_list), chunk_size):
chunk_documents = document_list[i:i + chunk_size]
print(i)
database = call_with_backoff(
Chroma.from_documents, documents=chunk_documents, collection_name="chroma-5g", persist_directory="./chroma", embedding=embedding
)
그런데 꼭 아래 에러가 발생됩니다.
--------------------------------------------------------------------------- RateLimitError Traceback (most recent call last) Cell In[1], line 13 12 try: ---> 13 return function(*args, **kwargs) 14 except openai.error.RateLimitError as e: File c:\anaconda3\envs\llm\lib\site-packages\langchain_chroma\vectorstores.py:1128, in Chroma.from_documents(cls, documents, embedding, ids, collection_name, persist_directory, client_settings, client, collection_metadata, **kwargs) 1127 metadatas = [doc.metadata for doc in documents] -> 1128 return cls.from_texts( 1129 texts=texts, 1130 embedding=embedding, 1131 metadatas=metadatas, 1132 ids=ids, 1133 collection_name=collection_name, 1134 persist_directory=persist_directory, 1135 client_settings=client_settings, 1136 client=client, 1137 collection_metadata=collection_metadata, 1138 **kwargs, 1139 ) File c:\anaconda3\envs\llm\lib\site-packages\langchain_chroma\vectorstores.py:1089, in Chroma.from_texts(cls, texts, embedding, metadatas, ids, collection_name, persist_directory, client_settings, client, collection_metadata, **kwargs) 1088 else: -> 1089 chroma_collection.add_texts(texts=texts, metadatas=metadatas, ids=ids) ... ---> 14 except openai.error.RateLimitError as e: 15 print(f"Rate limit exceeded: {e}. Retrying in 15 seconds...") 16 time.sleep(15)
chunk_size 로 나누어서 입력하면 될줄알았더니만 계속 에러가 발생해서 진도가 안나가네요. ㅜㅜ
참고로 len(document_list)는 747076이네요.
해결할 방법이 있을까요?
답변 2
0
안녕하세요, 인프런 AI 인턴입니다. SpeedGogo님.
현재 발생한 RateLimitError
는 OpenAI API가 지정한 요청 한도를 초과하여 발생하는 오류입니다. 대개는 서비스가 한 번에 처리할 수 있는 요청 수가 제한되어 있어 이와 같은 문제가 발생할 수 있습니다. RateLimitError
가 발생하는 경우, API에서 허용하는 범위 내에서 요청을 관리해야 합니다. 이 경우에는 다음 몇 가지 해결 방안을 고려해보세요:
대기 시간 증가:
time.sleep(15)
와 같은 방법을 사용할 수 있습니다. 그러나 대기시간을 더 늘려보는 것도 고려해보세요.Exponential Backoff 사용:
tenacity
라이브러리를 사용하여 쉽게 구현할 수 있습니다.요청 양 줄이기:
chunk_size
를 조절하여 요청의 양을 더 세밀하게 나누면 발생 빈도를 줄일 수 있습니다. 747076의 전체 길이 중 작은 부분씩 요청하는 방식으로 진행해보세요.API 제공자와의 사전 협의:
API Key 변경:
비슷한 문제를 다룬 기존 질문들과 답변들을 참고해보세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
훌륭한 답변입니다. ㅎㅎ 들어가서 보니 limit 넘어가서 사용이 안되는것 같습니다.