최근에 Hermes 를 업데이트 하지 않으셨다면 반드시 업데이트 하셔야 해요.
그래서 최근 작업으로 대화를 압축하는쪽 개선이 꽤 좋아졌거든요.
이전에 헤르메스 에이전트를 오래 쓰다 보면 대화가 길어지고 조금 멍청해진다는 느낌을 많이 받으셨을겁니다.
이때 Hermes는 예전 대화의 중간 부분을 요약해서 압축하고, 최근 대화는 그대로 남겨두는 방식으로 세션을 이어가요.
문제는 이 압축 과정이 실패했을 때였어요.
예전에는 대화를 압축하는 모델 호출이 실패하면, 중간 대화 일부가 조용히 placeholder로 대체되는 경우가 있었어요.
로그에는 남지만, Slack이나 Telegram 같은곳에서 hermes 를 쓰는 사람 입장에서는 이걸 알기 어려웠죠.
그러면 사용자는 그냥 “왜 갑자기 얘가 맥락을 잃었지?” 라고 느끼게 됩니다.
실제로는 에이전트가 기억을 못 한 게 아니라, context compression 과정에서 예전 맥락이 조용히 손실된 거였어요.
이번 개선은 이 부분을 꽤 잘 고쳤습니다.
첫 번째로, 요약 생성에 실패해서 실제 context 손실이 생기면 사용자에게 명확하게 알려줘요.
몇 개의 이전 대화가 placeholder로 대체됐는지,
이전 context는 복구할 수 없다는 점,
auxiliary.compression.model 설정을 확인하라는 안내까지 전달됩니다.
슬랙 스레드나 텔레그렘 토픽 같은 메타데이터도 유지해서 원래 대화가 있던 위치로 경고가 가도록 처리됐고요.
두 번째로, 실패 전에 한 번 더 살려보는 fallback이 들어갔어요.
Hermes는 대화 압축 요약을 만들 때 별도의 다른 모델을 쓸 수 있는데요.
예전에는 이 모델이 404, 503, model_not_found 같은 명확한 오류를 낼 때만 사용하고 있는 모델로 실패 처리 대비해서 사용하도록 했습니다.
그런데 실제 provider 환경에서는 400 error, no route, opaque rejection 같은 애매한 오류도 자주 나오거든요.
이번에는 별도의 다른 모델이 실패하면 주 사용모델로로 한 번 더 요약 생성을 시도합니다.
중간 context를 잃는 것보다 메인 모델 호출 한 번 더 쓰는 게 훨씬 낫다는 판단이에요.
세 번째로, fallback이 성공해도 사용자에게 알려줘요.
이게 은근 중요한데요.
main model fallback으로 context가 보존되면 겉으로는 아무 문제 없어 보일 수 있어요.
하지만 사실은 auxiliary.compression.model 설정이 깨져 있는 상태일 수 있죠.
그래서 이번에는
“설정된 압축용 모델은 실패했지만 main model로 복구했다”
“다만 config.yaml의 auxiliary.compression.model을 확인해봐라”
이런 식으로 안내해줍니다.
정리하면 이전 흐름은 이랬습니다.
- context compression 실행
- summary model 실패
- 중간 대화 일부 제거
- placeholder 삽입
- 사용자는 모름
개선 후에는 이렇게 바뀌었어요.
- context compression 실행
- auxiliary compression model 실패
- main model로 fallback 재시도
- 성공하면 context 보존 + 설정 문제 안내
- 실패하면 context 손실 경고를 사용자에게 명확히 전달
장기 세션을 많이 쓰거나,
Slack/Telegram에서 Hermes를 계속 켜두고 쓰는 분들한테는 꽤 중요한 개선입니다.