- 대용량 텍스트 번역: 텍스트를 관리 가능한 청크(chunk)로 분할하여 이론상 무제한 길이의 텍스트를 번역할 수 있습니다.
- 스마트 청크 분할: 임의의 길이가 아닌 자연스러운 경계(문장, 절)를 기준으로 텍스트를 청크로 나누어 번역 컨텍스트를 보존하고 번역 품질을 향상시킵니다.
- LLM 출력 토큰 제한 처리: 텍스트를 적절한 크기의 세그먼트로 처리하여 LLM의 출력 토큰 제한 내에서 작동하도록 설계되었습니다.
- RPM (Rate Limit) 관리:
asyncio큐(queue)와 락(lock) 메커니즘을 사용하여 LLM API 속도 제한(분당 요청 수)을 효과적으로 관리합니다. 제한을 초과하는 요청은 큐에 대기시킨 후 순차적으로 처리하여 API 오류를 방지합니다. - 강력한 오류 처리 및 재시도: 일반적인 일시적 LLM API 오류(예: 속도 제한, 서버 오류)에 대해 **지수 백오프(exponential backoff)**를 사용한 자동 재시도를 구현하여 안정성을 높입니다.
- 테스트 주도 개발 (TDD): 코드 품질과 유지보수성을 보장하기 위해 TDD에 중점을 두고 개발되었습니다.
- 명확한 테스트 분리: 포괄적인 검증을 위해 단위 테스트(모의 객체(mock) 사용, 실제 API 호출 없음)와 통합 테스트(API 호출 필요)를 명확하게 분리하여 포함합니다.
- 모의 객체(Mock)를 이용한 단위 테스트: 단위 테스트는 모의 객체를 활용하여 컴포넌트를 격리하고 외부 API 호출 없이 로직을 테스트하여 속도와 독립성을 보장합니다.
- 비동기 처리:
asyncio를 활용하여 텍스트 청크를 동시에 처리함으로써 대용량 문서 번역 속도를 잠재적으로 향상시킵니다.
LLM API와의 표준적인 상호작용은 종종 다음과 같은 문제에 직면합니다:
- 토큰 제한: 대부분의 LLM에는 입력 및 출력 토큰 제한이 있어 긴 문서를 직접 번역하는 것이 불가능합니다.
- 속도 제한: API는 분당 요청 수(RPM) 또는 유사한 할당량을 강제하며, 이는 대용량 텍스트를 여러 청크로 나누어 처리할 때 쉽게 초과될 수 있습니다.
- API 오류: 네트워크 문제나 일시적인 서비스 중단으로 인해 번역 프로세스가 중단될 수 있습니다.
이 프로젝트는 다음을 통해 이러한 문제를 해결합니다:
- 자연어 구조를 존중하는 지능적인 텍스트 분할 메커니즘 구현.
- 지정된 RPM 제한 내에서 API 호출을 관리하기 위해 비동기 프로그래밍 및 큐 시스템 사용.
- 일시적인 API 오류에 대한 강력한 재시도 로직 통합.
- 포괄적인 테스트를 통한 TDD 원칙 준수로 안정성 보장.
이 프로젝트는 최신 LLM의 강력한 기능을 사용하여 상당한 양의 텍스트를 번역하기 위한 개발자 친화적이고 복원력 있는 솔루션을 제공하는 것을 목표로 합니다.