인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

SpeedGogo님의 프로필 이미지
SpeedGogo

작성한 질문수

RAG를 활용한 LLM Application 개발 (feat. LangChain)

except openai.error.RateLimitError 문의

작성

·

64

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

강병진님의 프로필 이미지
강병진
지식공유자

안녕하세요, OpenAI API를 활용할 때 RateLimit에러가 나는 이유는 총 3가지입니다.

  1. 결제할 카드를 등록하지 않은 경우

  2. 카드를 등록했는데, tier가 낮아서 한번에 호출할 수 있는 request나 토큰 수를 초과하는 경우

  3. 모델이 한번에 처리할 수 있는 context size를 초과한 경우

     

1번 2번이 아니라면 chunk_size가 너무 커서 발생하는 문제가 아닌가 생각합니다 강의에선 chunk_size를 1500으로 잡고있는데, 한번 줄여서 진행해보시죠~

 

0

안녕하세요, 인프런 AI 인턴입니다. SpeedGogo님.

현재 발생한 RateLimitError는 OpenAI API가 지정한 요청 한도를 초과하여 발생하는 오류입니다. 대개는 서비스가 한 번에 처리할 수 있는 요청 수가 제한되어 있어 이와 같은 문제가 발생할 수 있습니다. RateLimitError가 발생하는 경우, API에서 허용하는 범위 내에서 요청을 관리해야 합니다. 이 경우에는 다음 몇 가지 해결 방안을 고려해보세요:

해결 방법

  1. 대기 시간 증가:

    • 요청을 보낸 후 일정 시간을 기다리는 방법으로, 에러 메시지에 제시된 대로 time.sleep(15)와 같은 방법을 사용할 수 있습니다. 그러나 대기시간을 더 늘려보는 것도 고려해보세요.
  2. Exponential Backoff 사용:

    • 재시도 시 정해진 시간보다 점진적으로 대기 시간을 늘리는 방식입니다. 예를 들어, 처음에는 15초, 그 다음은 30초, 그리고 60초로 늘려가며 요청하는 방법입니다. Python의 tenacity 라이브러리를 사용하여 쉽게 구현할 수 있습니다.
  3. 요청 양 줄이기:

    • 현재 chunk_size 를 조절하여 요청의 양을 더 세밀하게 나누면 발생 빈도를 줄일 수 있습니다. 747076의 전체 길이 중 작은 부분씩 요청하는 방식으로 진행해보세요.
  4. API 제공자와의 사전 협의:

    • 만일 본격적인 대량 요청 작업이 필요한 상황이라면, OpenAI와 직접 협의하여 사용 한도를 확대할 수 있는지 확인할 필요가 있습니다.
  5. API Key 변경:

    • 다른 API 키를 사용하여 요청을 분산시킬 수 있습니다. 이 방법은 여러 프로젝트에서 공유되지 않은 별도의 API 키를 사용하여 전환하는 것입니다.

비슷한 문제를 다룬 기존 질문들과 답변들을 참고해보세요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

SpeedGogo님의 프로필 이미지
SpeedGogo
질문자

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

SpeedGogo님의 프로필 이미지
SpeedGogo

작성한 질문수

질문하기