Skip to content
게으른 엔지니어의 기술 블로그
Go back

AI 에이전트가 블로그 초안을 메모리 요약만 보고 고쳤다가, 일화를 바꿔 쓸 뻔했다

Read in English →

이 블로그의 글은 대부분 코딩 에이전트(Claude Code)와 같이 쓴다. 작업하면서 남긴 기록을 바탕으로 에이전트가 초안을 쓰고, 발행 직전에는 에이전트가 초안의 사실관계를 다시 확인한다. 확인할 근거로 쓰는 건 세 가지다. 작업하면서 그때그때 정리해 둔 메모(에이전트의 장기 메모리 파일), 저장소의 커밋 기록, 그리고 Honcho에 남은 대화 원본이다. Honcho는 에이전트와 나눈 대화를 통째로 저장해 두는 메모리 서버다.

이번 글은 한 달 전에 써 둔 초안 하나를 발행하면서 생긴 일이다. 에이전트가 정리 메모만 보고 초안을 고쳤는데, 그중 하나는 원래 맞던 일화를 틀린 쪽으로 바꾼 것이었다.

한 달 묵은 초안과 정리 메모가 달랐다 (AI 에이전트 장기 메모리)

초안은 다른 PC의 Obsidian을 원격으로 조작해서 플러그인을 테스트한 이야기였다. 9월 중순에 쓴 것이라 에이전트에게 발행 전에 당시 기록과 대조하게 했다. 에이전트는 그 작업을 정리해 둔 메모를 열었고, 초안과 다른 곳을 여럿 찾았다. 테스트용 PC를 다른 방에 있는 여분의 PC라고 썼는데 메모에는 집에 있는 오래된 리눅스 PC로 되어 있었다. 전송 프로그램의 버그도 초안과 메모가 다르게 설명했다.

버튼 일화도 달랐다. 초안에는 “같은 모양의 버튼 중 마지막 것을 눌렀더니 일괄 실행이 아니라 카드 하나의 개별 실행 버튼이었다”는 이야기가 있었다. 메모에는 그 이야기가 없고, 대신 “카드 아래의 일괄 실행 버튼은 아무것도 체크하지 않으면 조용히 아무것도 안 한다”는 다른 일화가 적혀 있었다. 에이전트는 메모를 근거로 초안의 버튼 일화를 메모의 일화로 바꿔 썼다.

원본 대화에는 둘 다 있었다 (Honcho 대화 기록)

에이전트가 그렇게 고치고 있을 때 “Honcho 메모리도 같이 체크해봐”라고 했다. 에이전트가 Honcho에서 그 무렵 대화 원본을 날짜로 찾아 읽어 보니, 버튼 일화는 둘 다 실제로 있었다. 같은 날 아침에 개별 실행 버튼을 잘못 누른 일이 있었고, 그날 밤에 일괄 실행 버튼이 아무것도 안 한 일이 있었다. 메모에는 둘째 일화와 거기서 얻은 요령만 남아 있었고, 첫째 일화는 정리하면서 빠진 것이다. 초안이 맞았고, 메모를 믿고 고친 쪽이 틀렸다.

원본 대화는 다른 것도 바로잡았다. 이 작업을 시작한 계기는 초안에 적힌 대로 매번 화면 앞에서 손으로 테스트하기 번거로워서가 아니었다. 그때까지는 플러그인을 테스트할 때마다 먼저 릴리스를 해야 했고, 그 순서를 바꾸고 싶었던 것이다. 파일 전송 방식을 바꾼 이유도 원본에 그대로 있었다. 작업하던 서버에서 집 PC로 접속할 키가 없어서 기존 방식이 막혀 있었고, 내가 “scp를 안 써도 할 수는 있는 건가?”라고 물은 게 출발점이었다. 파일 크기도 초안의 수치와 달랐다. 초안과 메모와 원본 대화가 세 군데에서 서로 어긋나 있었는데, 그중 원본 대화만이 그때 실제로 오간 말이었다.

요약은 일화를 합치고 빠뜨린다 (LLM 메모리 요약의 한계)

정리 메모는 쓸모가 많다. 다음 작업에서 같은 실수를 안 하게 해 주는 요령, 결정의 이유, 피해야 할 함정을 짧게 담는다. 문제는 그 짧음이다. 메모는 “다음에 어떻게 하라”에 맞춰 줄인 글이라, 비슷한 일이 두 번 있으면 하나로 합치고, 교훈이 겹치는 일화는 빼 버린다. 이번에도 메모는 “버튼은 글자로 찾고, 전체 선택을 먼저 누를 것”이라는 요령으로서는 정확했다. 다만 “그때 무슨 일이 있었나”를 묻는 데 쓰기에는 빠진 게 있었다.

블로그 글은 바로 그 “그때 무슨 일이 있었나”를 적는 글이다. 요령이 아니라 일화의 순서와 수치, 계기가 중요하다. 그런 걸 확인할 때 요약을 근거로 쓰면, 요약이 빠뜨린 것은 “없었던 일”이 되고 만다.

발행 절차에 원본 대화 대조를 넣었다 (AI 글 팩트체크)

그 뒤로 발행 절차에 단계를 하나 더했다. 글이 지난 작업을 서술하면, 메모와 커밋 기록뿐 아니라 그 시점의 원본 대화와도 대조한다. Honcho에는 대화를 요약해 답해 주는 기능도 있지만, 사실 확인에는 쓰지 않는다. 요약을 확인하려고 또 다른 요약을 쓰는 셈이기 때문이다. 원본 메시지를 날짜로 찾아서 그 앞뒤를 직접 읽는다. 그리고 초안이나 메모와 어긋나면 원본 대화를 따른다.

남는 생각

사실 확인을 맡긴 에이전트가 틀린 건 게을러서가 아니었다. 오히려 근거를 찾아서 고쳤다. 다만 그 근거가 요약이었고, 요약은 무엇이 빠졌는지 말해 주지 않는다. 메모에 없는 일화를 “없었던 일”로 읽은 것이다.

확인하는 쪽이 확인할 근거를 고를 때도 같은 질문이 필요했다. 이 근거는 그때의 기록인가, 아니면 그 기록을 나중에 줄여 쓴 것인가. 이번엔 “Honcho 메모리도 같이 체크해봐”라는 한마디가 그 차이를 메웠고, 이제는 그 한마디가 절차 안에 들어가 있다.


Share this post:

Previous Post
사내 Git 서버와 CI/CD를 고르다가 GitLab·Gitea·OneDev·GitHub를 비교했다