두 시스템이 같은 위키에 쓴다
이날은 위키 수집 파이프라인을 재설계한 날이다.
두 시스템이 같은 위키에 직접 쓰고 있었다.
중복이 생기고 품질이 들쭉날쭉했다.
양쪽을 하나의 임시 디렉토리로 모으고 단일 크론이 정제하는 구조로 바꿨다.
내가 쓰는 코딩 에이전트 Pi랑, 야간 배치 에이전트 Hermes가 있다.
둘 다
옵시디언 위키에 직접 쓴다.
같은 주제를 다루면 중복 페이지가 생긴다.
품질도 다르다.
Pi가 쓴 거랑 Hermes가 쓴 거랑 스타일이 다르다.
더 심각한 건 임시 디렉토리에 임시 파일이 쌓이고 있었다.
누구도 처리 안 하는 임시 파일이 있었다.
Hermes의 16개 크론잡을 전부 확인했다.
임시 디렉토리를 참조하는 크론이 하나도 없었다.
임시 파일이 그냥 쌓이고 있었던 거다.
3단계 파이프라인으로 바꾸다
해결은 양쪽을 하나의 임시 디렉토리로 모으는 거였다.
첫 번째 단계는 수집이다.
Pi도 임시 디렉토리에 쓴다.
Hermes도 임시 디렉토리에 쓴다.
빠른 채팅 캡처도 임시 디렉토리에 쓴다.
전부 임시 디렉토리에 모인다.
두 번째 단계는 승격이다.
새 크론이 임시 디렉토리를 스캔한다.
임시 파일을 정제해서 위키 페이지로 만든다.
원본은 보관 디렉토리로 옮긴다.
이 크론은 소스를 구분하지 않는다.
Pi에서 왔든 Hermes에서 왔든 상관없다.
전부 같은 방식으로 정제한다.
세 번째 단계는 유지보수다.
기존 크론이 포맷이랑 인덱스를 정리한다.
링크를 보강한다.
이건 그대로 둔다.
왜 양쪽을 임시 디렉토리로 모아야 하는가
처음에는 Pi만 임시 디렉토리로 바꾸려 했다.
Hermes는 그대로 직접 쓰게 두려 했다.
근데 사용자가 정정했다.
Hermes도 임시 디렉토리를 거쳐야 한다.
그래야 정제 크론이 “소스 블라인드”가 된다.
Pi인지 Hermes인지 구분할 필요가 없어진다.
하나의 정제 경로만 있으면 된다.
양쪽을 분리하고 나중에 크로스링커로 연결하려는 방안도 검토했다.
근데 크로스링커는 링크만 추가하지 페이지를 합치지 않는다.
중복이 그대로 남는다.
그래서 기각했다.
필터링과 제로 토큰은 양립할 수 없다
Pi 확장을 어떻게 수정할지 결정할 때 핵심 딜레마가 있었다.
임시 파일에 쓸 때 의미 있는 내용만 걸러야 한다.
인사, 단순 질문, 실패한 시도 같은 건 빼야 한다.
근데 이 필터링을 하려면 LLM이 필요하다.
토큰이 든다.
“필터링된 임시 파일”과 “제로 토큰”은 양립할 수 없다.
필터링하려면 LLM이 읽고 판단해야 한다.
LLM 없이 그냥 전사를 쏟아붓으면 토큰은 0이지만 노이즈가 폭발한다.
그래서 필터링하는 쪽을 택했다.
LLM이 임시 파일 초안을 쓴다.
토큰은 줄었지만 0은 아니다.
노이즈는 낮아진다.
“전부 쏟아붓기”와 “필터링하기” 중에서 필터링이 맞았다.
조용히 실패하는 fire-and-forget
틈틈이 위키 로거의 과거 버그도 확인했다.
위키 로거는 세션이 끝나면 사서 에이전트를 띄운다.
fire-and-forget이다.
결과를 안 기다린다.
근데 사서 에이전트가 실패해도 아무도 모른다.
실제로 사서 에이전트의 프롬프트가 249.6K 토큰이었다.
근데 쓰던 모델이 200K 컨텍스트였다.
컨텍스트 초과로 실패한 거다.
근데 fire-and-forget이라 실패가 안 보였다.
임시 파일이 안 쌓이는 원인을 찾다가 발견했다.
모델을 1M 컨텍스트 모델로 바꿔서 해결했다.
근데 핵심은 “fire-and-forget은 실패를 숨긴다”는 거다.
결과를 안 기다리니까, 실패해도 조용하다.
이런 시스템에서는 별도의 확인 메커니즘이 필요하다.
마무리
이날의 핵심은 “소스 블라인드한 단일 경로”를 만드는 거였다.
양쪽이 임시 디렉토리에 모이면, 정제 크론은 소스를 구분할 필요가 없다.
Pi에서 왔든 Hermes에서 왔든, 같은 방식으로 처리한다.
이게 “소스 블라인드” 설계다.
그리고 “필터링과 제로 토큰은 양립할 수 없다”는 딜레마를 명확히 했다.
품질을 원하면 토큰이 든다.
토큰을 안 쓰면 노이즈가 폭발한다.
이 딜레마를 인정하고 필터링 쪽을 택하는 게 맞았다.
마지막으로 “fire-and-forget은 실패를 숨긴다”는 교훈. 결과를 안 기다리면, 실패해도 조용하다.
조용한 실패는 발견이 늦어진다.
발견이 늦으면 영향이 커진다.