9월 한달간의 잡설
Codex Pro 200, then Claude Max 100
한달 내내, 코덱스 $200 구독과 씨름하면서 보냈다.
리셋권의 가치
토큰을 남김없이 사용하려고 노력했고, 9월 한달동안 리셋권 들어온 것들도 알뜰하게 쓰려고 노력했다. 7일 쿼터가 리셋 시점을 기준으로 리셋되기 때문에, 리셋권의 가치는 쿼터를 최대한 빨리 소진하고 사용할 수록 더 효용가치가 높아지게 설계되어 있다.
열심히 노력한 경우 1.5일만에 1주일 토큰을 불태울 수 있었다.
C에서 Rust로 코드 변환하기
C2Rust로 초벌번역한 unsafe 코드에서
- memory ownership 추론하기: heap alloc 코드들의 lifecycle을 잘 판단해서, 이게 Box/Vec/CString이 맞을지 판단한다.
- refbox: 어떤 포인터는 그냥 무적권
살아있다…를 손으로 대충 증명해서 막 가져다 쓰는 경우가 있다. 이건 Rust에선
&Box여야 하는데 borrow로 설명하기엔 너무 어려운 경우, 그냥 포기하고 runtime
check를 하겠습니다! 도망치는 방법이 바로 refbox::Weak 되시겠다.
- Rc와 비슷하지만 single ownership, 단 Weak는 여럿 만들 수 있다.
- 참조가 필요한 시점에 원본이 살아있을 테니 무조건 borrow 가능하겠지? 안되면 뭐 panic하지.
- 모든 메모리 alloc/dealloc을 적절한 Rust owned type으로 이동시키는 게 목표
싱글 에이전트로 토큰 태우는 건 한계가 있다
100달러 이상 구독의 Frontier 모델들 돌아가는건 대충 비슷하다… 적당히 궁금한 것들을 물어보면, 3-4분 정도 코드를 들쑤시고 예전 코드 찾고 뭔가 열심히 하다가 띡 결과물을 뱉는다. 즉 3-4분마다 한번씩 창을 보고 다음 질문을 넣어야 효과적으로 토큰을 쓴다는 건데 3-4분이라는 시간이 딱 애매한 느낌이 있다.
멀티 에이전트 잘 돌리기는 힘들다
여러 에이전트를 밤새도록 돌리려면 뭔가 할일 목록을 잔뜩 백로그로 만들어둬야 할텐데, 작업내역 queue를 만드는 것도 별일이다. 다음과 같은 툴들이 있다.
- gadak: JIRA 모델을 그대로 쓰는듯
- raft.build: 뭔가 Slack과 lightweight task를 짬뽕해놓고 거기에 에이전트를 끼워넣은 듯한 느낌
그냥 쌩 텍스트 파일이 최고다…
공개용 git repo 바깥에 작업용 git repo를 하나 더 만들어서 텍스트 파일로 프로젝트 진행상황을 관리하는 방법도 있다. 어차피 에이전트들은 텍스트 파일로 작업하는 걸 더 좋아한다.
쌩 텍스트 파일로 프로젝트 관리하기
- task-blahblah.md: 사람이 에이전트 읽으라고 시키는 작업물
- report-blahblah.md: 에이전트가 사람 읽으라고 작성한 보고서
- plan-blahblah.md: 에이전트가 에이전트 일하려고 작성한 작업 내역
참을 수 없는 허접한 코드 디자인
온갖 최신 모델을 다 써봤지만 딱히 코드 디자인이 마음에 들진 않는다. 아니, 진짜 시간 많이 잡아먹는 작업이 된다.
에이전트의 똥
에이전트가 5분에 100개씩 똥을 쌀 수 있는데 그걸 하나씩 고친다는건 먼저 무의미하고, 또 도움이 안되는 일이다. 당신이 LLM 개발회사 직원이 아닌 한…
혹자는 AGENTS.md에 여러 software design principles를 적어서 지키라고 시킨다는데 LLM이라고 그런 principles이 있다는 걸 모를까? 그걸로 문제가 해결되리라 보지 않는다.
똥을 못싸게 화장실을 치워버려
그럴듯하게 표현하자면 오버-엔지니어링인데, 똥을 못싸도록 환경을 만들어보자는 것이다.
- 가능한 모든 유저 scenario를 커버할 수 있는 e2e 테스트를 잔뜩 만들어서 테스트를 통과하려면 자연스럽게 똥을 끊도록 만들기 <- 이건 뭐 요새 다들 하는거고
- 플러그인 architecture: LLM이 코드에 똥을 못싸게 플러그인 내에서 먼저 똥을 싸게 해보자는 고약한 심보. 다만 플러그인을 지원할 인터페이스를 만들어야 하는게 골치아픈 점
- 기왕 플러그인을 만든다면 마구 만들어라 - 그래야 LLM이 적절한 인터페이스란 무엇인가 고민을 시작하더라는 것이다. 그게 아니면 딱 하나의 플러그인에만 맞는 허접한 인터페이스를 볼 수 있다.