LLM 에이전트가 바뀐 사용자 의도를 놓치는 이유를 측정하고 고친다
When Users Change Their Minds: Measuring and Repairing Intent Drift in LLM Agents
무엇인가
LLM 에이전트는 사용자가 과제를 조금씩 지정하는 멀티턴 환경에서 동작한다. 사용자는 먼저 어떤 행동을 요청하고, 나중에 파라미터를 수정하고, 제약을 철회한 뒤, 그 결과 명세대로 실행을 요구한다. 이때 에이전트는 사용자 의도 중 어느 부분이 아직 살아 있는지 판단해야 한다. 이 논문이 정의하는 의도 드리프트(intent drift)는 이미 대체된(superseded) 의도 조각이 최종 답변이나 도구 호출에 계속 영향을 주는 실패 모드다. 기존 멀티턴 평가들은 과제 정보가 점진적으로 공개될 때 모델이 과제를 놓친다든가, 진화하는 과제를 최종적으로 따르는지를 측정했지만, 무효 의도가 남아 영향을 준 실패와 다른 멀티턴 오류를 구분하지 못했다. 이 실패를 직접 연구하려면 최종 의도를 알고 있어야 하고, 그 낡은 정보를 따를 때 과제 결과 자체가 달라져야 한다.
어떻게 동작하나
IntentFlux는 검증 가능한 소스 과제를 원래의 grader를 그대로 보존한 채 통제된 멀티턴 상호작용으로 변환한다. 의도 상태는 원자적 자연어 목표의 유한 집합 G로 표현되고, 편집은 Add(g), Delete(g), Replace(g, g') 세 가지로 상태를 변환한다. 오라클이 편집 시퀀스를 적용해 최종 활성 의도 G*를 얻고, 소스 과제의 grader가 그 기준으로 후보 출력을 채점한다. 낡은 의도는 두 방식으로 만든다. Variant는 활성 의도 항목에 대한 그럴듯한 대안 값으로, 나중에 목표 값으로 대체된다. Decoy는 사용자가 나중에 철회하는 그럴듯한 제약인데, 그것을 따를 때 소스 grader의 판정이 실제로 바뀌는 경우에만 유지한다. 따라서 decoy를 따르는 것은 단순한 표현 불일치가 아니라 채점 결과를 바꾸는 실패가 된다. 난이도는 예산 b ∈ {1, 3, 5}(easy/medium/hard)로 조절하며, 목표당 최대 b개의 variant와 b개의 유효 decoy를 노출한다. 사용자 시뮬레이터는 활성 목표별 큐와 별도의 decoy 큐를 유지하며 매 턴 실행 가능한 편집 하나를 자연 발화로 표현하고, 마지막 편집 뒤에는 중립적인 최종 답변 요청만 덧붙인다. 즉 어느 난이도에서도 G*를 재진술하거나 요약해 주지 않는다. 평가 지표는 전체 평가셋 중 현재 정답 의도 기준으로 완전한 과제 네이티브 크레딧을 받은 비율 CAR과, 같은 케이스의 clean 조건과 drift 조건 차이인 IDG다.
무엇과 다른가
627개 소스 과제 캘리브레이션에서 평균 과제 점수는 easy 0.476에서 hard 0.384로 떨어졌고, 이는 19.3%의 상대 감소다. 8개 모델 모두에서 완전 정답률이 단일 턴으로 같은 최종 과제를 받았을 때보다 진화하는 대화에서 복원할 때 유의하게 낮았고, IDG는 모든 난이도 구간에서 양수였다. 대화 길이만으로 설명되는지 확인하기 위한 턴 수 매칭 무드리프트 대조군은 0.734로, 단일 턴 조건 0.778에 근접했고 해당 드리프트 조건 0.469를 크게 웃돌았다. 즉 턴 수 증가만으로는 이 손실이 설명되지 않는다. 실시간 도구 사용 환경인 Interactive-Test(VitaBench 소스 100개)에서는 최종 의도를 명시적으로 재진술하지 않을 때 rubric 점수가 clean 대비 0.103 낮아졌다. 과제군별 반응은 이질적이어서 LiveCodeBench, GSM8K, HumanEval이 가장 크게 하락한 반면 BFCL은 같은 조건에서 오히려 점수가 올랐고 SummHay는 낮은 점수 바닥에 머물렀다. 궤적을 들여다보면 드리프트는 삭제된 내용을 그대로 유지하는 경우에만 국한되지 않는다. Delete 편집이 포함된 실패에서 에이전트는 삭제된 목표를 최종 답에서 자주 누락시켰고, BFCL에서는 대체된 새 값을 잘못된 함수 호출 슬롯에 묶는 실패가 흔했다.
어떻게 쓰나
그렇다면 대화 이력을 압축하는 것만으로 충분할까. 저자들은 rolling summarization을 쓰는 Deep Agents와 2단계 compaction을 쓰는 OpenHarness를 같은 동결된 medium 난이도 궤적에서 비교했는데, 각각 0.354와 0.392로 순수 멀티턴 실행의 0.367과 비슷하거나 오히려 낮았다. 압축된 이력은 대체된 값과 그 대체값을 동시에 보존할 수 있어, 생성기가 어느 쪽이 아직 유효한지 스스로 판단해야 하는 문제가 남는다. 게다가 무효 의도 항목이 이미 중간 결론이나 계획을 만들어냈다면, 원래 항목이 삭제된 뒤에도 그에 의존한 결론이 남아 생성을 계속 오염시킬 수 있다. 이 논문이 제안하는 StateForge는 이력을 현재 활성 상태로 접어 넣는(state folding) 학습 불필요 하네스다. 매 사용자 턴 뒤 트래커가 관찰된 의도 편집을 현재 활성 상태에 반영하고, 삭제·대체된 항목뿐 아니라 그로부터 파생된 결론까지 무효화한다. 상태는 직접 진술된 의도 항목과 파생 결론을 구분해 두어, 근거 의도가 바뀌면 의존 결론을 제거할 수 있게 한다. 생성 시에는 갱신된 상태를 캐시된 대화 이력과 현재 사용자 입력 사이에 삽입해, 이전 대화는 캐시 가능하게 두면서 활성 정보를 생성 시점에 최신으로 만든다. 별도의 포맷 트래커가 출력 관례를 유지하고, 최종 게이트가 생성 답변이 그 관례를 지켰는지 검사해 필요하면 재생성을 유발한다. General-Test에서 StateForge는 평균 점수를 0.367에서 0.467로 올렸다. 정답 최종 상태를 주입하면 0.549까지 오르지만, 전체 대화 이력을 유지한 채 정확한 상태를 줘도 clean 단일 턴 점수 0.778에는 0.229만큼 못 미친다. 상태 추정 오류가 중요하지만 격차의 일부만 설명한다는 뜻이다.
전제와 한계
저자들은 이 추적 역할에 베이스 에이전트급 모델이 필요한지도 확인했다. 2B와 4B 트래커는 122B 기준보다 유의하게 낮았지만 9B 트래커는 122B와 통계적으로 구분되지 않았다. 122B 베이스 에이전트를 고정한 채 트래커 부역할만 학습시키는 모듈형 경로에서는 on-policy distillation 한 번으로 2B 트래커가 General-Test에서 0.266에서 0.445로 올랐고, 같은 프로토콜에서 122B 트래커는 0.428이었다. 별도의 학습 설정에서는 thinking distillation으로 35B 단독 에이전트를 외부 하네스 없이 0.296에서 0.461로 끌어올렸다. 다만 이 증류 모델은 clean 조건에서 0.745에서 0.718로 소폭 하락했다. 한편 컴포넌트 매칭 재실험에서 전체 하네스와 두 recap 베이스라인의 쌍별 차이에 대한 95% 신뢰구간이 0을 포함해, 현재 실험만으로는 명시적 상태 표현이 매칭된 recap보다 우월하다고 입증되지 않는다. 오라클 조건만이 전체 하네스 대비 양의 쌍별 차이를 보여 정확한 상태 추정에서 나오는 여지가 실재함을 보여준다.
저자들이 밝힌 한계는 분명하다. IntentFlux는 현재 의도를 원자적 목표의 유한 집합으로 표현하므로 실행 가능하거나 분해 가능한 의도 구조를 가진 과제를 대상으로 한다. 캘리브레이션은 variant와 decoy 예산을 함께 늘리기 때문에 낡은 정보 부하의 결합 효과를 지지할 뿐 각각의 개별 인과 효과를 분리하지 못하며, 턴 수 매칭 대조군은 턴 수만으로는 설명되지 않음을 보일 뿐 메시지 순서나 편집 문구는 여전히 드리프트 구성의 속성으로 남는다. 외부 하네스 비교와 Interactive-Test는 각각 단일 테스트 모델(Qwen3.5-122B)을 사용했고 전자는 재생된 궤적 위에서 수행됐다. 사용자 시뮬레이터가 LLM이라는 점도 평가 프로토콜의 일부여서, 100개 편집 단계 발화 표본 감사에서 충실도 96%, 일관성 97%를 기록했지만 문구 자체가 변수다. 또한 벤치마크가 테스트하려는 상태를 스스로 제공해 버릴 수 있다는 문제도 드러난다. Interactive-Test의 진단 조건처럼 마무리 턴에서 최종 의도를 전부 제공하면 측정된 부분 크레딧 드리프트 격차가 사라졌기 때문에, 저자들은 이 재진술 조건을 난이도 요인으로 쓰지 않는다.
실무적으로 이 논문이 주는 메시지는 명확하다. 멀티턴 에이전트에서 대화 이력 요약이나 압축은 의도 드리프트를 안정적으로 복구하지 못한다. 이력 관리가 '무엇을 남길지'를 묻는다면, 상태 폴딩은 '무엇이 아직 유효한지'를 추가로 묻는다. 따라서 에이전트 파이프라인을 설계할 때 활성 요구사항 상태를 별도로 유지하고, 삭제·대체된 항목에서 파생된 결론까지 함께 무효화하는 절차를 두는 것이 좋다. 이 추적 역할은 베이스 모델급이 아니라 9B 수준의 작은 모델로도 수행 가능하며, 2B 트래커도 on-policy distillation으로 크게 개선됐다는 점은 비용 구조를 설계할 때 참고할 만하다. 다만 정확한 상태를 넣어도 clean 단일 턴 성능에는 못 미친다는 결과는, 상태 추정만 고쳐서는 부족하고 남아 있는 대화 이력 자체가 여전히 방해 요인이라는 점을 시사한다.