babyz79 shared this post · Apr 30
정승현

최근에 Hermes 를 업데이트 하지 않으셨다면 반드시 업데이트 하셔야 해요.

그래서 최근 작업으로 대화를 압축하는쪽 개선이 꽤 좋아졌거든요.
이전에 헤르메스 에이전트를 오래 쓰다 보면 대화가 길어지고 조금 멍청해진다는 느낌을 많이 받으셨을겁니다.

이때 Hermes는 예전 대화의 중간 부분을 요약해서 압축하고, 최근 대화는 그대로 남겨두는 방식으로 세션을 이어가요.

문제는 이 압축 과정이 실패했을 때였어요.

예전에는 대화를 압축하는 모델 호출이 실패하면, 중간 대화 일부가 조용히 placeholder로 대체되는 경우가 있었어요.
로그에는 남지만, Slack이나 Telegram 같은곳에서 hermes 를 쓰는 사람 입장에서는 이걸 알기 어려웠죠.

그러면 사용자는 그냥 “왜 갑자기 얘가 맥락을 잃었지?” 라고 느끼게 됩니다.

실제로는 에이전트가 기억을 못 한 게 아니라, context compression 과정에서 예전 맥락이 조용히 손실된 거였어요.

Image 1

이번 개선은 이 부분을 꽤 잘 고쳤습니다.

첫 번째로, 요약 생성에 실패해서 실제 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을 확인해봐라”

이런 식으로 안내해줍니다.


정리하면 이전 흐름은 이랬습니다.

  1. context compression 실행
  2. summary model 실패
  3. 중간 대화 일부 제거
  4. placeholder 삽입
  5. 사용자는 모름

개선 후에는 이렇게 바뀌었어요.

  1. context compression 실행
  2. auxiliary compression model 실패
  3. main model로 fallback 재시도
  4. 성공하면 context 보존 + 설정 문제 안내
  5. 실패하면 context 손실 경고를 사용자에게 명확히 전달

장기 세션을 많이 쓰거나,
Slack/Telegram에서 Hermes를 계속 켜두고 쓰는 분들한테는 꽤 중요한 개선입니다.

16