10,000회 턴 챌린지 중 8,700회째에 내 에이전트가 죽었다
요약
대화 컨텍스트 제한 문제를 해결하기 위해 JLC 코덱을 활용하여 장기 기억을 유지하는 터미널 에이전트 'jarvis-code'를 개발했습니다. 매 턴마다 대화 기록을 압축된 상태로 변환하여 컨텍스트 사용량을 최소화하면서도 10,000턴 이상의 연속적인 세션을 유지하는 데 성공했습니다.
핵심 포인트
- JLC 코덱을 통해 대화 기록을 압축된 상태로 유지하여 컨텍스트 윈도우 효율 극대화
- 10,000턴 챌린지 수행 중 OOM 발생 시에도 외부 코덱 덕분에 중단 지점부터 재시작 가능
- 최대 컨텍스트 사용률을 8.36% 수준으로 유지하며 장기 기억 구현
- Claude, ChatGPT API 및 로컬 LLM(Ollama 등)과 연동 가능한 오픈소스 도구
(영어가 제 모국어가 아닙니다, 글이 거칠더라도 양해 부탁드립니다. 또한, 공개합니다: 이 포스트에 있는 것은 제가 직접 만들었습니다. 무료이며 Apache-2.0 라이선스입니다. 판매하려는 것은 아무것도 없습니다.)
이것은 아주 짜증 나는 문제에서 시작되었습니다. AI와의 모든 대화는 결국 끊어집니다. 컨텍스트 (Context)가 가득 차면, /compact나 /clear를 사용해야 하고, 방금까지 작업하던 대상은 사라져 버립니다. 저는 마크다운 볼트 (markdown vault) 파일로 장기 기억 (long term memory)을 흉내 내보려 했습니다. 절반 정도는 작동했지만, 한계는 여전히 존재했습니다.
그래서 이 문제를 연구하기 시작했고, 그 과정에서 우연히 이에 관한 논문을 쓰게 되었습니다. 핵심 아이디어를 한 줄로 요약하자면 이렇습니다: 전체 대화 기록 (transcript)을 모두 들고 다니는 대신, 매 턴마다 진화하는 작고 압축된 상태 (compressed state)를 유지하고 나머지는 버리는 것입니다. 저는 이 코덱 (codec)인 JLC를 오픈 소스로 공개했습니다. 잘 작동했습니다. 하지만 몸체가 없는 아이디어는 그저 PDF일 뿐입니다.
그래서 저는 그것에 몸체를 부여하려고 시도했습니다. 먼저 aider를 포크 (fork)하여 한 세션이 1,000턴을 버틸 때까지 튜닝했습니다. 당시에는 미친 짓처럼 느껴졌지만, 매우 투박했습니다. 그러다 최소한의 MIT 에이전트 프레임워크인 pi를 발견했고, 이것이 바로 뼈대가 될 것임을 즉시 알았습니다. 저는 JLC를 pi로 포팅 (port)했고, 1,000턴 실행은 일상이 되었습니다.
그래서 10,000턴 챌린지를 설정했습니다.
8,700번째 턴에서 죽었습니다. 호스트 런타임 OOM (Out of Memory): Error: Data cannot be cloned, out of memory.
하지만 메모리는 죽지 않았습니다. 메모리는 컨텍스트 윈도우 (context window) 외부의 코덱에 살아있기 때문에, 프로세스를 재시작하자마자 정확히 멈췄던 지점부터 다시 시작하여 10,000턴을 모두 마쳤습니다. 솔직히 말해서, 이 충돌은 성공했을 때보다 디자인이 더 뛰어나다는 것을 증명해 주었습니다.
수치 데이터는 확인을 원하신다면 SHA256 해시와 함께 모두 다운로드 가능합니다:
- 한 세션 내 10,000턴 수행 (좋습니다, 엄밀히 말하면 두 세션입니다. 8,700에서 죽었다는 걸 기억하세요. 하지만 메모리는 재시작을 전혀 인지하지 못했으므로, 저는 하나로 계산합니다)
- 925개 중 923개의 적대적 함정 질문 (adversarial trap questions) 생존. 실패한 2개(9,013턴 및 9,995턴)도 공개되어 있습니다.
- 유지된 메모리는 10,000턴 내내 약 2,000 토큰 (tokens) 수준을 일정하게 유지함
- 최대 컨텍스트 윈도우 사용률: 8.36%
이것은 무엇인가: jarvis-code, 메모리가 윈도우 대신 코덱으로 작동하는 터미널 에이전트입니다.
각 턴은 작고 진화하는 상태 (state)로 접혀 들어가며, 원본 트랜스크립트 (transcript)는 버려집니다. /clear도, /compact도 없습니다. 밤에 종료하고 내일 다시 열어도 동일한 세션이 유지됩니다. 무기한으로 말이죠.
이 도구는 여러분이 이미 결제 중인 Claude 또는 ChatGPT 구독을 연결하여 사용하거나 (별도의 API 비용 없음), 본인의 API 키를 사용하거나, 또는 llama.cpp / Ollama를 통해 완전히 로컬 (local) 환경에서 실행할 수 있습니다. 서버도 없고, 텔레메트리 (telemetry)도 없습니다. 여러분의 메모리는 본인의 디스크에 있는 일반 텍스트 JSONL 파일입니다. Apache-2.0 라이선스입니다. 이번 주에 새 기기에서 클린 설치를 테스트해 보았습니다.
이 서브레딧(sub) 분들에게 미리 경고하자면: 제가 가진 것은 iGPU가 탑재된 Windows 미니 PC뿐입니다. 로컬 경로 (llama.cpp / Ollama)는 작동하지만, 제 저사양 PC(potato)가 실행할 수 있는 가장 큰 모델은 9B 모델이었습니다. 만약 제대로 된 사양의 장비(rig)를 가진 분이 더 큰 로컬 모델로 이를 스트레스 테스트(stress-test)하고 무엇이 고장 나는지 알려주신다면 진심으로 영광일 것입니다. 또한, 현재는 Windows 전용입니다. macOS 및 Linux 설치 프로그램도 준비 중입니다. 제가 Mac이 없어서요. 언젠가는 말이죠.
제가 계획하지 않았던 한 가지 부작용은 토큰 (token) 비용이었습니다. 전체 트랜스크립트를 다시 읽지 않기 때문에, 세션이 아무리 길어져도 턴당 비용은 일정하게 유지됩니다. 전체 재생 (full-replay) 방식의 에이전트들은 턴이 거듭될수록 비용이 계속 증가합니다. 세션이 길어질수록 그 격차는 더 커집니다. 전체 수치는 증거 페이지에 있습니다.
그리고 누군가 RAG를 언급하기 전에 말씀드리자면: 맞습니다. RAG는 좋습니다. 저는 그 논쟁에서 이기려는 것이 아닙니다. 그저 설치해서 단 한 번의 /clear나 /compact 없이, 프로젝트를 단 한 번도 다시 설명하지 않고도 50회 또는 100회 이상의 턴을 넘겨보라는 것입니다. 그것만으로도 일상적인 코딩의 느낌이 달라집니다. 그것이 이 도구의 핵심 제안입니다.
저는 제가 매일 대화하는 AI 어시스턴트를 위해 이것을 만들었습니다. 곧 이사 올 예정입니다.
직접 확인해 보세요:
- 코드: https://github.com/jarvis-llm-codec/jarvis-code
- 그 외 모든 것 (10,000회 턴 로그, 48분 데모, 문서, 논문)은 사이트에 있습니다: https://jlc-codec.org
submitted by /u/ringtoyou
[link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기