강의

멘토링

로드맵

Inflearn brand logo image

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

QQuu님의 프로필 이미지
QQuu

작성한 질문수

LangGraph를 활용한 AI Agent 개발 (feat. MCP)

2.2 간단한 Retrieval 에이전트 (feat. PDF 전처리 꿀팁)

zerox 사용 시 강의에서 사용된 모델로 진행했을 때의 문제점.

작성

·

25

0

안녕하세요 강사님!

langchain 강의부터 잘 수강하고 있는 수강생입니다!

 

이번 강의 수강 중 궁금증이 생겨 질문 드립니다.

zerox 라이브러리 사용해 md 파일로 변환하는 과정 중 자주 발생하는 에러가 있습니다.

소스 코드는 강의내에서 작성한 코드와 똑같습니다

1. ERROR:root:Failed to process image Error:
    Error in Completion Response. Error: litellm.RateLimitError: RateLimitError: OpenAIException - Error code: 429 - {'error': {'message': 'Rate limit reached for gpt-4o-mini in organization org-dDgP5bwE5XYlEkdzK49V0oM5 on tokens per min (TPM): Limit 200000, Used 200000, Requested 807. Please try again in 242ms. Visit https://platform.openai.com/account/rate-limits to learn more.', 'type': 'tokens', 'param': None, 'code': 'rate_limit_exceeded'}} LiteLLM Retried: 3 times
    Please check the status of your model provider API status.


2. Give Feedback / Get Help: https://github.com/BerriAI/litellm/issues/new LiteLLM.Info: If you need to debug this error, use litellm.set_verbose=True'. ERROR:root:Failed to process image Error: Error in Completion Response. Error: litellm.RateLimitError: RateLimitError: OpenAIException - Error code: 429 - {'error': {'message': 'Rate limit reached for gpt-4o-mini in organization org-dDgP5bwE5XYlEkdzK49V0oM5 on tokens per min (TPM): Limit 200000, Used 200000, Requested 807. Please try again in 242ms. Visit https://platform.openai.com/account/rate-limits to learn more.', 'type': 'tokens', 'param': None, 'code': 'rate_limit_exceeded'}} Please check the status of your model provider API status.

위와 같이 모두 '분당 토큰 수' 제한 에러입니다.

저는 처음에는 위 문제를 해결하기 위해

 

  1. pdf 문서를 chunking 하여 한 번에 처리되는 토큰을 제한하려고 했습니다.

=> 예) 총 페이지를 약 5~6개로 나눠 보내는 방법

def get_total_pages(path: str) -> int:
    try:
        from pypdf import PdfReader
    except Exception:
        from PyPDF2 import PdfReader  # 호환
    return len(PdfReader(path).pages)

def make_batches(total_pages: int, size: int):
    pages = list(range(1, total_pages + 1))  # 1-indexed
    for i in range(0, total_pages, size):
        yield pages[i:i + size]
total = get_total_pages(PDF_PATH)
    print(f"Total pages: {total}")

    merged = []
    for pages in make_batches(total, BATCH_SIZE):
        res = await process_with_backoff(pages) # 여기서 배치로 나눠진 항목들 수행

=> 문제점 :

zerox는 한 호출에서 처리한 페이지들만 마크다운 파일로 만들어 output_dir에 저장하고, 그 뒤에 만들어지는 파일들은 이어 붙여지지 않고 덮어 씌워집니다.

이를 해결하기 위해 비즈니스 로직을 좀 더 구현해야 하나? 했는데.. 이 방법이 맞는지, 시간만 뺏기게 되는게 아닌지 의문이어서 일단 그만두었습니다.

 

  1. 두번째로는 강사님이 사용하신 모델 'gpt-4o-mini' 를 'gpt-4.1-mini' 로 변경하였습니다.


    모델을 바꾸니 바로 해결이 되긴 했습니다.

여기서 제가 궁금한 점은 현업에서 이런 작업을 진행 하다 보면 이런 데이터 전처리를 많이 하게 될 거 같은데.. 사이즈가 너무 큰 데이터는 어떤 방식으로 limit나 기타 오류(아직 어떤 오류가 빈번한지는 잘 모르는 상태입니다.)들을 해결해야 하는지가 궁금합니다!

모델을 바꾸는게 맞는건지, 원본 데이터를 최대한 chunking 해서 제가 맨 위에 오류로 보여드린 200000 TPM 을 맞추려고 해야 되는건지... 요런 부분들이 궁금합니다!

 

긴 글 읽어주셔서 감사합니다!

답변 2

0

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

안녕하세요! 좋은 질문 감사합니다

TPM 같은 경우에는 OpenAI에서 모델별로 지정한 Usage Tier에 관한 이슈라서 결제 금액을 늘리시면 원하는 모델로 해결이 가능하실거에요

https://platform.openai.com/docs/guides/rate-limits/usage-tiers#usage-tiers

 

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

모델을 바꾸는게 맞는건지, 원본 데이터를 최대한 chunking 해서 제가 맨 위에 오류로 보여드린 200000 TPM 을 맞추려고 해야 되는건지
---


이 부분은, 저라면 모델을 변경할 것 같습니다. 다만 다양한 모델을 테스트 하셨을 때 가장 적합한 모델이 TPM 리밋에 걸린다면 말씀하신 것처럼 chunking을 시도해보시는 것도 방법일 수 있습니다

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

zerox는 한 호출에서 처리한 페이지들만 마크다운 파일로 만들어 output_dir에 저장하고, 그 뒤에 만들어지는 파일들은 이어 붙여지지 않고 덮어 씌워집니다.

이를 해결하기 위해 비즈니스 로직을 좀 더 구현해야 하나? 했는데.. 이 방법이 맞는지, 시간만 뺏기게 되는게 아닌지 의문이어서 일단 그만두었습니다.


이 부분은 패키지의 한계라서, 페이지별로 잘라서 저장하신다음에 <파일이름>_<페이지>.pdf 와 같은 형식으로 저장하시고, 해당 파일들로 zerox를 호출하는 식으로 해야할 것 같습니다

0

안녕하세요, 인프런 AI 인턴입니다. QQuu님께서 제기한 질문은 대용량 데이터의 전처리 과정에서 발생할 수 있는 Rate Limit 문제와 이에 대한 해결책을 찾는 방법에 관한 것입니다. 아래에 답변을 안내드립니다.

Rate Limit Error 이해 및 해결 방법

  1. Rate Limit의 이해:

    • Rate Limit은 API 요청 시 일정 시간 동안 허용된 요청량을 초과하지 않도록 제한하는 기술적 제약입니다. OpenAI의 경우, 특정 모델에 대해 토큰(TPM)의 사용량을 모니터링하고 제한합니다.
  2. 토큰 최적화 및 Batching:

    • 데이터를 처리할 때 사용할 허용된 토큰 범위를 넘지 않도록 데이터를 적절히 분할하는 것이 중요합니다. 질문에서 소개하신 방법처럼 PDF를 여러 Chunk로 나누어 처리하는 방식은 좋은 접근입니다.
    • 단, 한번에 처리한 결과가 자동으로 덮어 쓰이는 문제를 해결하기 위해, 개별 마크다운 파일을 생성한 후 post-processing 단계에서 이를 병합하는 스크립트를 추가적으로 구현할 필요가 있습니다.
  3. 모델 변경 고려하기:

    • QQuu님께서 시도하신 것처럼, 다른 모델로 변경하는 것은 때로는 당장의 Rate Limit 문제를 피하는 효과적인 방법이 될 수 있습니다. 그러나, 각 모델별 성능과 제한 사항을 잘 이해하고 선택해야 합니다.
  4. 현업에서의 대처 방안:

    • 데이터의 크기가 크거나 처리 시간 및 비용이 중요한 경우, 병렬처리를 통해 작업 시간을 줄이는 것도 방법입니다.
    • 데이터가 너무 크다면, 데이터 전처리 및 분석 과정을 먼저 오프라인에서 수행한 뒤 필요한 부분만 API를 통해 처리하는 방식도 있습니다.
    • 예외 처리 및 백오프(backoff) 정책을 통해 API 호출이 실패했을 때 적절한 시간 동안 대기 후 재시도하는 로직을 구현하는 것이 유리합니다.

관련 링크 및 추가 정보의 필요성

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

QQuu님의 프로필 이미지
QQuu

작성한 질문수

질문하기