A2UI: Agent-to-User Interface
A2UI는 업데이트 가능한 에이전트 생성 UI를 표현하기에 최적화된 포맷과 초기 렌더러 세트를 갖춘 오픈 소스(open-source) 생성형 UI 프레임워크(generative UI framework)로, 에이전트가 풍부한 사용자 인터페이스(user interfaces)를 생성하거나 채우는 것을 가능하게 합니다.
<img src="https://raw.githubusercontent.com/a2ui-project/a2ui/HEAD/docs/public/assets/a2ui_gallery_examples.png" alt="A2UI 컴포넌트 갤러리" height="400">
A2UI이 구현할 수 있는 다양한 UI 구성을 보여주는 A2UI 렌더링 카드 갤러리.
요약 (Summary)
생성형 AI(Generative AI)는 텍스트와 코드를 생성하는 데 탁월하지만, 특히 해당 에이전트가 원격으로 실행되거나 신뢰 경계(trust boundaries)를 넘나드는 경우 사용자에게 풍부하고 상호작용적인 인터페이스를 제시하는 데 어려움을 겪을 수 있습니다.
A2UI는 에이전트가 'UI를 말할' 수 있도록 하는 오픈 표준이자 라이브러리 세트입니다. 에이전트는 UI의 _의도(intent)_를 설명하는 선언적 JSON 포맷(declarative JSON format)을 전송합니다. 그러면 클라이언트 애플리케이션이 자체 네이티브 컴포넌트 라이브러리(Flutter, Angular, Lit 등)를 사용하여 이를 렌더링합니다.
이 접근 방식은 에이전트가 생성한 UI가 데이터처럼 안전하면서도 코드처럼 표현력이 뛰어나게 보장합니다.
A2UI 사용 시점 (When to use A2UI)
- 다음 경우에 A2UI를 사용하세요: 동일한 에이전트로부터 Flutter, Angular, SwiftUI / Jetpack Compose 또는 여러 플랫폼에서 에이전트가 생성한 UI가 필요한 경우.
- 에이전트가 원격(remote), 제3자(third-party)이거나 신뢰 경계(trust boundary)를 넘나드는 상황이며, 렌더러에게 실행 가능한 코드를 전송해서는 안 되는 경우에 A2UI를 사용하세요.
a2ui_flutter와 함께 Flutter에서 A2UI를 사용하는 방법: flutter pub add a2ui_flutter a2ui_core. 이는 기존의 genui 패키지를 대체합니다.
- 만약 도구 결과를 자체 컴포넌트로 렌더링하는 React 전용 채팅이라면 A2UI가 필요하지 않을 수 있습니다. LLM 툴킷만으로 충분할 수도 있습니다. A2UI는 플랫폼을 추가하거나 원격 에이전트를 사용할 때 적합합니다.
프레임워크에 맞는 렌더러를 설치하세요. 예를 들어 npm install @a2ui/react (또는 @a2ui/angular, @a2ui/lit)을 사용합니다. 이는 @a2ui/web_core에 의존하며, 앱이 이 모듈에서 직접 가져오는 경우(예: 메시지 프로세서 또는 기본 카탈로그)에는 @a2ui/web_core를 명시적으로 추가해야 합니다. 각 플랫폼별 자세한 내용은 Client Setup guide를 참조하세요.
높은 수준의 철학 (High-level philosophy)
A2UI는 에이전트가 생성하는 상호 운용성(interoperable), 크로스 플랫폼(cross-platform), 생성형 또는 템플릿 기반의 사용자 인터페이스(UI) 응답에서 발생하는 특정 과제를 해결하기 위해 설계되었습니다.
프로젝트의 핵심 철학:
- 보안 우선(Security first): LLM이 생성한 임의 코드를 실행하는 것은 보안 위험을 초래할 수 있습니다. A2UI는 실행 가능한 코드(executable code)가 아닌 선언적 데이터 형식(declarative data format)입니다. 클라이언트 애플리케이션은 신뢰할 수 있고 사전에 승인된 UI 컴포넌트(
“Smart Wrapper”를 등록함으로써, 레거시 콘텐츠를 위한 보안 iframe 컨테이너를 포함하여 기존의 모든 UI 컴포넌트를 A2UI의 데이터 바인딩 및 이벤트 시스템에 연결할 수 있습니다. 결정적으로, 이는 보안을 개발자의 손에 확고히 맡기며, 핵심 시스템에만 의존하는 대신 사용자 정의 컴포넌트 로직 내에서 엄격한 샌드박싱 정책과 "신뢰 사다리(trust ladders)"를 직접 적용할 수 있게 합니다.
사용 사례 (Use cases)
사용 사례에는 다음이 포함됩니다:
- 동적 데이터 수집 (Dynamic Data Collection): 에이전트가 대화의 특정 맥락(예: 전문 예약)을 기반으로 맞춤형 양식(날짜 선택기, 슬라이더, 입력란)을 생성합니다.
- 원격 서브 에이전트 (Remote Sub-Agents): 오케스트레이터 에이전트가 원격 특화 에이전트(예: 여행 예약 에이전트)에 작업을 위임하고, 이 에이전트는 메인 채팅 창 내에서 렌더링될 UI 페이로드를 반환합니다.
- 적응형 워크플로우 (Adaptive Workflows): 사용자의 질의를 기반으로 승인 대시보드나 데이터 시각화를 즉석에서 생성하는 엔터프라이즈 에이전트입니다.
아키텍처 (Architecture)
A2UI 플로우는 UI 생성과 UI 실행을 분리합니다:
- 생성 (Generation): 에이전트(Gemini 또는 다른 LLM 사용)가 UI 컴포넌트의 구성 및 속성을 설명하는 JSON 페이로드인 사전 생성된
A2UI Response를 생성하거나 사용합니다.
- 전송 (Transport): 이 메시지는 클라이언트 애플리케이션으로 전송됩니다 (A2A, AG-UI 등을 통해).
- 해결 (Resolution): 클라이언트의 A2UI Renderer가 JSON을 구문 분석합니다.
- 렌더링 (Rendering): Renderer는 추상 컴포넌트(예:
type: 'text-field')를 클라이언트 코드베이스의 구체적인 구현에 매핑합니다.
의존성 (Dependencies)
A2UI는 경량 형식으로 설계되었지만, 더 큰 생태계에 통합됩니다:
- 전송 방식 (Transports): A2A Protocol 및 AG-UI와 호환됩니다.
- LLM: JSON 출력을 생성할 수 있는 모든 모델에서 생성될 수 있습니다.
- 호스트 프레임워크 (Host Frameworks): 지원되는 프레임워크(현재: Web 또는 Flutter)로 구축된 호스트 애플리케이션이 필요합니다.
시작하기 (Getting started)
시작하려는 경로를 선택하세요:
레스토랑 파인더 데모 — 요약
필수 조건: Node.js 18+(Corepack이 활성화된 상태), uv, 그리고 Gemini API 키.
git clone https://github.com/a2ui-project/a2ui.git
cd a2ui
export GEMINI_API_KEY="your_gemini_api_key"
...
[!TIP]
macOS Homebrew 사용자: 이전에 독립형 패키지 관리자를 설치했다면, Corepack이 프로젝트별로 버전을 관리할 수 있도록 Corepack을 설치하기 전에 충돌하는 링크를 해제하세요:
brew unlink yarn pnpm
brew install corepack
corepack enable
위 명령어들은 워크스페이스 전반에 걸쳐 의존성을 설치하고, 렌더러를 빌드하며, Python 에이전트를 시작하고, `http://localhost:5173`에서 클라이언트를 열어줍니다. 단계별 지침, 대체 데모 및 문제 해결 방법은 **[전체 Quickstart](docs/public/quickstart.md)**를 참고하세요.
### 모든 에이전트 프레임워크 및 하네스에 A2UI 사용 — 요약
```bash
npx create-ag-ui-app@latest
사용하려는 프레임워크 또는 래퍼(harness)에 AG-UI CLI를 사용하십시오 (Google Chat, ADK, LangGraph, CrewAI, Mastra, Strands, Slack, Teams 등). 그런 다음 **AG-UI 가이드**를 따라 A2UI 렌더링을 활성화하십시오. 일부 스캐폴딩 경로는 내부적으로 Next.js와 CopilotKit의 A2UI 런타임을 사용하지만, 설정 표면(setup surface)은 AG-UI를 우선합니다.
기타 렌더러 (Other renderers)
Flutter의 경우, 내부적으로 A2UI를 사용하는 GenUI SDK를 확인하십시오. 모든 클라이언트 구현 목록은 docs/public/reference/renderers.md에서 확인할 수 있습니다.
패키지 (Packages)
이 패키지들은 이 저장소(repository)에서 개발되었습니다. '아직 게시되지 않음(Not published yet)'으로 표시된 패키지는 소스 코드로부터 사용할 수 있습니다.
Python
TypeScript
Dart 및 Flutter
| 패키지 | 설명 | 버전 |
|---|
| a2ui_core | 렌더러 및 에이전트를 위한 프로토콜 메시지, 데이터 모델, 데이터 바인딩 및 표현식. | pub |
| ... | | |
Swift
Swift 라이브러리는 이 저장소의 루트에 있는 Package.swift를 통해 빌드됩니다.
로드맵 (Roadmap)
우리는 커뮤니티와 다음 사항에 대해 협력하기를 기대합니다:
- 사양 안정화 (Spec stabilization): v1.0 사양으로 전환하는 작업.
- 더 많은 렌더러: React, Jetpack Compose, iOS (SwiftUI) 등에 대한 공식 지원 추가 및 더 많은 지원 예정.
- 추가 전송 계층 (Additional transports): REST 등 지원 확대.
- 추가 에이전트 프레임워크 (Agent frameworks): Genkit, LangGraph 등 지원 추가.
기여하기 (Contribute)
A2UI는 Apache 2.0 라이선스가 적용된 프로젝트입니다. 우리는 UI의 미래가 에이전트 기반(agentic)이라고 믿으며, 이를 구축하는 데 여러분과 함께 일하기를 원합니다.
시작 방법에 대한 자세한 내용은 CONTRIBUTING.md를 참조하십시오.