llm-min.txt 삽질기
예전에 쓰레드에서 llm-min.txt라는 재밌는 기술을 봤습니다.

라이브러리의 문서를 LLM 친화적으로 압축해서 사용하자는 아이디어인데요. 로컬에 저장해둔 파일을 쓰기 때문에, (일단 파일만 만들면) 비슷한 문제의식을 가진 Context7이나 llms.txt 대비 훨씬 빠르다는 장점이 있습니다. 게다가 토큰 수도 확 줄어들고요.

상당히 좋아보여서 강의자료에도 넣고 주변에도 소개했었는데, 마침 오픈소스 게임 엔진으로 게임 개발을 할 일이 있어서 직접 한번 써봤습니다. 사실 Context7에도 존재하는 라이브러리긴 했지만요.
결론부터 말하면, 10시간동안 고생했는데 아직도 llm-min.txt
를 만들지 못했어요. 생성에 어마어마하게 오래 걸립니다. 실행도 어렵고, 큰 문서를 잘 다루지 못했습니다.
장대한 (그러나 거의 아무도 관심 없을 것 같은...) 삽질 기록을 공유합니다. 삽질한 거 아까워서 PR도 날렸습니다.
1차 시도
문서 URL로 했는데 생성된 txt가 너무 빈약합니다.
2차 시도
문서 깃헙 링크를 발견해서 줘봤지만 여전히 못합니다.
좀 이상해서 자세히 살펴보니 링크 타고 들어가는 로직이 꽤 엉성하더군요. 대강 설명하면 현재 위치가 /aa/index.html
인데, 이 문서에 /bb
링크가 있으면 /aa/bb
로 가는 게 아니라 /aa/index.html/bb
로 가서 404 Not Found가 나오는 식. 아마 index.html
이 URL에 있는 걸 감안하지 않은 것 같습니다.
게다가 모든 페이지에 존재하는 메뉴 사이드바를 전부 읽으려고 해서 무한 404가 생겼고요. 덤으로 가이드라인 문서 복사 안되는 버그도 있었습니다. (이 문제는 이슈로 제보했더니 고쳐준 것 같군요)
슬슬 오기가 생겨서...
- 게임엔진 문서를 깃헙에서 로컬로 다운받고
- llm-min.txt도 로컬에 다운받아서 필요한 문서 정제 후
- Cursor에게 로컬 폴더를 압축하는 옵션을 추가해달라고 했더니
웃긴게 README에 옵션이 제대로 안나와있었을 뿐 로컬 폴더로 이미 실행이 가능하더군요.
그래서 로컬로 3차 시도
Failed to generate documentation from input folder /Users/ted/codes/renpy/sphinx/source2: Compaction failed for source 'llm_min_docs': 'NoneType' object has no attribute 'strip'
요런 strip
에러가 실행 불가. 뭔가 구현이 덜 된 느낌이었습니다.
에러 수정 후 커서 안에서 4차 시도
커서 bash 내에 Gemini API Key가 등록 안돼서 실패. llm-full.txt
는 생겼는데 llm-min.txt
는 거의 비어있었습니다. 소스 문서는 다 모았지만 Compact하게 못 만든 거죠.
API Key 다시 넣고 5차 시도
청크 크기가 너무 컸는지 또 중간에 실패.
슬슬 매번 처음부터 하는게 아까워서, 3가지 기능을 추가해달라고 했습니다.
- 중간 결과도 저장해라
llm-full.txt
이미 있으면 그거 써라- 청크 크기는 알아서 조절해라
기능 추가 후 6차 시도
갑자기 호출 자체가 안 됐습니다. 새로 만든 기능의 function signature 관련 오류가 지속되더군요. 커서가 계속 문제를 해결하지 못하길래 Claude Code에게 시켜봤더니, pip로 설치했던 기존 버전이 섞여서 import되고 있었다는 걸 찾아냈습니다.
코드 수정 후 7차 시도
잘 되나 싶더니 아까 났던 strip
에러가 다시 나타났습니다. 내가 만든 코드 아니라고 귀찮아서 커서 룰 설정을 제대로 안했더니 역시 당했네요. API 호출 없이 strip 에러 안 나는지 확인하는 테스트를 만들어달라고 했습니다.
테스트 통과 후 8차 시도
글자수가 150만자가 넘는 걸 28개 청크로 자동으로 쪼갰고, 드디어 성공하나 싶더니.. 최종 단계에서 또다시 strip
에러.
압축의 여러 단계 중 글로서리 생성 후 후처리하는 부분에서 파일이 너무 커서 실패했는데 이 때 동작이 수정되지 않았더군요. 테스트도 여길 커버하지 않았고요. 몇십분 걸려서 실패했는데 중간 결과도 저장되지 않아 상당히 빡쳤습니다.
머리 식히며 화장실을 다녀오니, 왜 멍청하게 실제 호출 테스트를 거대한 파일로 계속 하고 있었나 싶었어요.
다시 상황 설명해서 중간 결과 제대로 저장하게 하고, 글로서리 후처리에서도 파일이 크면 쪼개서 동작하게 했습니다. 그리고 만들어져있던 llm-full.txt
를 아주 작게 만들어서 테스트해보니, 이제야 정상 작동하며 중간 결과가 저장되더군요.
그래서 9차 시도
글로서리 후처리 여전히 실패. 하지만 이제 중간 파일이 많아서 (실행에 몇십분 걸리긴 했지만) 큰 손해는 없었습니다. 에러 로그 분석해보니 배치 사이즈가 너무 큰 것 같다고 하네요.
수정 후 10차 시도
또 실패. 배치 사이즈를 줄였더니 이번에는 아웃풋 토큰 길이 제한에 걸리는 걸 확인했습니다. 너무 오래 걸려서 살펴보니 glossary.txt
에 실제 글로서리 내용이 아닌 파이썬 코드가 들어있더군요.
또 수정 후, 아웃풋 토큰 사이즈가 더 큰 2.5 Pro로 변경해서 11차 시도
를 지금 4시간 넘게 하고 있네요. ㅠㅠ
결론
이렇게 오래 걸릴 줄 모르고 가볍게 시작했건만 아직도 성공을 못했습니다. 11차 시도 도중에 Gemini에서 502 에러도 떠서 식겁했는데 다행히 알아서 재시도하더군요.
근데 너무 오래 걸려 반쯤 까먹을 뻔 했지만, 이걸로 제가 하고 싶었던 건 결국 게임 개발 잘 하는 거였거든요?
이번에는 확실히 진도가 나가고 있어서 될 것 같긴 한데... 완성되면 실제로 코딩을 잘 하는지 친구들과 함께 테스트 좀 해보고, 돌아와서 후기 남겨보겠습니다.
오픈소스니까 잘 되면 PR 올리려고 했는데 진이 다 빠지네요. ㅎㅎ
노파심에서 말씀드리는데 알려주신 혼코딩님에 대한 원망은 전혀 없습니다. 속도와 비용을 다 잡은 기술이라고 해서 신났었는데 역시 날로 먹을 순 없다는 현실을 또 깨달아서 아쉬웠을 뿐입니다.
아, 덕분에 Claude Code랑은 많이 친해졌군요. 이건 이득.
Member discussion