Agent 스트림 표준화로 UI 개선 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
인공지능
대상자
AI 에이전트 프레임워크 개발자, 프론트엔드 개발자, AI 인터페이스 구축자
(난이도: 중급 - AI 에이전트 스트림 처리 및 프론트엔드 통합 이해 필요)
핵심 요약
- AI 에이전트 스트림의 불일치 문제
- 프레임워크별로 TOOL_CALL
파셜 업데이트, STATE_SNAPSHOT
등 다양한 형식 사용
- 프론트엔드는 스트림 의미 해석과 이벤트 핸들링을 수동으로 처리해야 함
- AG-UI 프로토콜 도입
- TEXT_MESSAGE_START
, TOOL_CALL_ARGS
, STATE_SNAPSHOT
등 7가지 표준 이벤트 타입 정의
- run()
메서드를 통해 AG-UI
이벤트 스트림 제공 (프레임워크 무관)
- 실용적 이점
- LangGraph
, LlamaIndex
등 주요 프레임워크와 호환성 확보
- 프론트엔드 컴포넌트 재사용성 향상 및 런타임 전환 시 UI 리팩토링 필요성 감소
섹션별 세부 요약
1. 스트림 불일치 문제
- 프레임워크별 스트림 형식 차이 (예:
LangGraph
는 원시 스트림 제공,Mastra
는STATE_SNAPSHOT
활용) - 프론트엔드는
toolCallId
추적, 메시지 완료 감지 등 수동 처리 필요 TOOL_CALL
인자 누락, 메시지 종료 감지 실패 등 반복적 버그 발생
2. AG-UI 프로토콜 설계
- 구조적 이벤트 정의
- TEXT_MESSAGE_START
/ TEXT_MESSAGE_END
: 메시지 흐름 관리
- TOOL_CALL_START
/ TOOL_CALL_ARGS
/ TOOL_CALL_END
: 툴 호출 프로세스 추적
- STATE_SNAPSHOT
: 공유 상태 동기화 용이
- 프레임워크 호환성
- LangGraphAgent
등 래퍼 클래스를 통해 기존 스트림 변환 (예: toolCallId
매핑)
- AG-UI
이벤트 타입은 프론트엔드에서 직접 사용 가능
3. 기술적 구현 방식
- 이벤트 처리 흐름
- 프레임워크 스트림 →
AG-UI
이벤트 변환 (예:toolCallId
추적 로직) run()
메서드를 통해Observable
제공- 프론트엔드는
TEXT_MESSAGE_END
이벤트 기반으로 UI 업데이트
- SDK 지원
- JavaScript/Python SDK로 프론트엔드와 백엔드 간 중개 계층 구축
- AG-UI
이벤트 기반으로 DevTools
, Run Replay
등 도구 개발 가능
4. 커뮤니티 및 도구 활용
- 프레임워크 통합 현황
- ✅ LangGraph
, Vercel AI SDK
, LlamaIndex
등 주요 프레임워크 지원
- 커뮤니티 기반 어댑터 개발 (예: Agno
, AG2
등)
- 사용자 참여 방식
- TypeScript
/Python
SDK 직접 사용 또는 커스텀 어댑터 개발
- AG-UI
프로토콜은 개방형 확장 가능
결론
- 핵심 팁
- AG-UI
이벤트 타입을 사용해 프론트엔드에서 TOOL_CALL_ARGS
실시간 렌더링 가능
- STATE_SNAPSHOT
을 통해 공유 상태 동기화 시 MESSAGE_SNAPSHOT
활용
- LangGraph
등 기존 프레임워크와 호환성 확보를 위해 래퍼 클래스 사용 권장
- 실무 적용 예시
```typescript
const events = agent.run(); // AG-UI 이벤트 스트림 구독
events.subscribe(event => {
if (event.type === 'TEXT_MESSAGE_END') {
updateUI(event.payload.message); // UI 업데이트 로직
}
});
```
- 프로토콜 이점 요약
- 프론트엔드 개발 시간 30% 이상 절감 (이벤트 해석 로직 제거)
- AG-UI
기반으로 Multi-Agent Orchestration
등 고급 기능 구현 가능