인프런 커뮤니티 질문&답변
except openai.error.RateLimitError 문의
작성
·
140
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 사용:
- 재시도 시 정해진 시간보다 점진적으로 대기 시간을 늘리는 방식입니다. 예를 들어, 처음에는 15초, 그 다음은 30초, 그리고 60초로 늘려가며 요청하는 방법입니다. Python의
tenacity라이브러리를 사용하여 쉽게 구현할 수 있습니다.
- 재시도 시 정해진 시간보다 점진적으로 대기 시간을 늘리는 방식입니다. 예를 들어, 처음에는 15초, 그 다음은 30초, 그리고 60초로 늘려가며 요청하는 방법입니다. Python의
요청 양 줄이기:
- 현재
chunk_size를 조절하여 요청의 양을 더 세밀하게 나누면 발생 빈도를 줄일 수 있습니다. 747076의 전체 길이 중 작은 부분씩 요청하는 방식으로 진행해보세요.
- 현재
API 제공자와의 사전 협의:
- 만일 본격적인 대량 요청 작업이 필요한 상황이라면, OpenAI와 직접 협의하여 사용 한도를 확대할 수 있는지 확인할 필요가 있습니다.
- 만일 본격적인 대량 요청 작업이 필요한 상황이라면, OpenAI와 직접 협의하여 사용 한도를 확대할 수 있는지 확인할 필요가 있습니다.
API Key 변경:
- 다른 API 키를 사용하여 요청을 분산시킬 수 있습니다. 이 방법은 여러 프로젝트에서 공유되지 않은 별도의 API 키를 사용하여 전환하는 것입니다.
- 다른 API 키를 사용하여 요청을 분산시킬 수 있습니다. 이 방법은 여러 프로젝트에서 공유되지 않은 별도의 API 키를 사용하여 전환하는 것입니다.
비슷한 문제를 다룬 기존 질문들과 답변들을 참고해보세요:
- OpenAI API Rate Limit 해결 방법 - Rate LimitError 처리 관련: Rate Limit에 대한 문제를 해결할 수 있는 몇 가지 방법과 관련하여 논의된 게시물을 참조할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






훌륭한 답변입니다. ㅎㅎ 들어가서 보니 limit 넘어가서 사용이 안되는것 같습니다.