단순히 마지막에 승인 버튼만 넣는 'Human-in-the-loop' 구현은 그만두세요. (에이전트 AX/UX 패턴)
Stop building "Human-in-the-loop" just by putting an Approve button at the end. (Agent AX/UX Patterns)
핵심 요약
에이전트의 HITL을 단순한 최종 승인 단계로 보지 말고, 실행 과정 전반을 제어하고 가시화하는 런타임 아키텍처로 설계해야 합니다.
- 명시적 핸드오프 — 에이전트가 임의로 판단하게 두지 말고 파괴적인 작업 전에는 반드시 상태를 멈추도록 설계함.
- 작업 중 제어 — 컨텍스트를 유지하면서도 실행 중간에 에이전트를 멈추고 방향을 수정할 수 있는 기능을 제공함.
- 배경 작업 가시화 — 단순히 '생각 중'이라는 표시 대신 DAG나 실행 그래프를 실시간으로 사용자에게 노출함.
최근 엔터프라이즈 에이전트 아키텍처를 감사해보니, 거의 모든 팀이 LangGraph나 CrewAI 같은 프레임워크를 사용하면서 똑같은 실수를 저지르고 있었습니다.
팀들은 **'Human-in-the-loop' (HITL)**을 단순히 최종 상태 승인 정도로만 취급합니다. 하지만 에이전트가 5분짜리 다단계 백그라운드 작업(데이터 변경이나 이메일 발송 등)을 수행하는데 최종 결과물만 검토한다면, 그건 HITL이 아닙니다. 그냥 사후 검토일 뿐이죠.
이제 대화형 UI 설계는 그만두고 런타임 아키텍처를 설계해야 할 때입니다.
현재 프로덕션에서 훨씬 효과적인 세 가지 패턴:
- 명시적 핸드오프(Explicit Handoffs) 에이전트가 언제 멈출지 추측하게 두지 마세요. 파괴적인 작업이 수행되기 전에는 반드시 하드 상태 중단(hard state break)을 설계하세요.
- 작업 중 제어(Mid-Task Steering) 사용자는 컨텍스트 윈도우를 날리지 않고도 실행 중간에 '중단 및 방향 수정'을 할 수 있어야 합니다.
- 배경 작업 가시화(Perceptible Background Work) 단순히 '생각 중...'이라는 스피너만 띄우지 말고, DAG나 실행 그래프를 실시간으로 UI에 노출하세요.
대부분의 IDE 에이전트가 여전히 얕은 HITL 패턴을 기본값으로 사용하고 있어서, 저는 이런 패턴들을 에이전트 UX를 위한 llms.txt 스타일의 원칙으로 정리하고 있습니다. 필요하시다면 공유해 드릴게요.
다들 LangGraph에서 작업 중간의 상태 가시성을 어떻게 처리하고 계신가요? 노드 실행 과정을 프론트엔드로 스트리밍하시나요?


