AI 채팅창 말고, 에이전트가 화면을 바꾸는 앱
에이전트를 앱에 붙이면 대부분 채팅창 하나가 생깁니다. 사용자가 물어보고, 에이전트가 텍스트로 답합니다. 그게 전부입니다. CopilotKit은 다른 질문에서 출발합니다. 에이전트가 앱의 상태를 직접 읽고, 쓰고, UI 컴포넌트를 런타임에 생성할 수 있다면 어떨까요?
이 SDK가 푸는 문제
에이전트 앱을 만들 때 가장 답답한 지점은 에이전트와 UI 사이의 단절입니다. 에이전트는 내부에서 상태를 바꿨는데, 화면은 그걸 모릅니다. 따로 API 레이어를 만들고, 상태 동기화 로직을 쓰고, 에이전트가 멈춰야 할 타이밍을 수동으로 처리해야 합니다.
CopilotKit은 이 단절을 세 가지로 해결합니다.
- Shared State — 에이전트와 UI 컴포넌트가 같은 상태 레이어를 읽고 씁니다. 에이전트가
city를 바꾸면 화면의<h1>이 즉시 업데이트됩니다. - Generative UI — 에이전트가 워크플로 안에서 UI 컴포넌트를 동적으로 생성합니다. 텍스트 응답이 아니라 실제 렌더링된 컴포넌트입니다.
- Human-in-the-Loop — 에이전트가 실행 중간에 사용자 입력, 확인, 수정을 요청하고 멈출 수 있습니다.
핵심 동작 원리
CopilotKit의 중심은 AG-UI Protocol입니다. Google, LangChain, AWS, Microsoft, Mastra, PydanticAI가 채택한 에이전트-UI 상호작용 프로토콜로, CopilotKit이 이 프로토콜을 주도합니다.
연결 구조는 단순합니다. UI → 에이전트 → 도구(Tool) → UI 렌더링이 하나의 루프로 묶입니다.
useAgent 훅이 이 루프의 진입점입니다.
const { agent } = useAgent({ agentId: 'my_agent' });
return (
<div>
<h1>{agent.state.city}</h1>
<button onClick={() => agent.setState({ city: 'NYC' })}>
Set City
</button>
</div>
);
useAgent는 useCoAgent의 상위 집합(superset)으로, AG-UI 위에 직접 올라갑니다. 에이전트 상태를 읽고, 업데이트하고, 에이전트 실행을 프로그래매틱하게 제어할 수 있습니다.
설치 및 시작
새 프로젝트를 시작할 때:
npx copilotkit@latest create -f <framework>
기존 프로젝트에 붙일 때:
npx copilotkit@latest init
init 하나로 다음이 세팅됩니다.
- 핵심 패키지 설치 완료
- Context, State, Hook 사용 준비
- 에이전트-UI 연결 완료 (에이전트가 즉시 액션 스트림 및 UI 렌더링 가능)
- 배포 준비 상태
실전 예시: LangGraph 에이전트와 연결
LangGraph 에이전트가 여행 도시를 추천하고, UI가 즉시 그 상태를 반영하는 시나리오입니다.
# LangGraph 에이전트 노드 예시
def recommend_city(state):
# 에이전트 로직
state["city"] = "Tokyo"
return state
// React UI에서 에이전트 상태를 구독
const { agent } = useAgent({ agentId: 'travel_agent' });
return <h1>추천 도시: {agent.state.city}</h1>;
에이전트가 city를 업데이트하는 순간 화면이 바뀝니다. 별도 WebSocket 설정이나 폴링 로직 없이 공유 상태 레이어가 처리합니다.
언제 쓰면 안 되는가
CopilotKit은 React 기반 풀스택 앱에서 에이전트와 UI를 타이트하게 통합할 때 강점이 있습니다. 반대로 다음 경우에는 맞지 않습니다.
- 에이전트가 백엔드 파이프라인만 처리하고 UI 피드백이 필요 없는 경우
- Vue, Svelte, Angular 등 React가 아닌 프레임워크를 쓰는 경우 (현재 React 중심)
- 단순 챗봇 하나만 붙이면 되는 경우 — 이 경우 오버스펙입니다
- 에이전트 프레임워크를 아직 결정하지 않은 초기 단계 — AG-UI 통합 에이전트가 전제입니다
같은 카테고리 대안 비교
| 도구 | 특징 | 한계 |
|---|---|---|
| Vercel AI SDK | 스트리밍 UI, 간단한 채팅 통합 | 에이전트 상태 공유 레이어 없음 |
| LangChain LCEL | 체인 구성, 다양한 모델 지원 | UI 레이어 직접 제공 안 함 |
| CopilotKit | 에이전트-UI 공유 상태, Generative UI, Human-in-the-Loop | React 생태계 전제 |
Vercel AI SDK가 채팅 스트리밍에 최적화된 가벼운 선택이라면, CopilotKit은 에이전트가 앱 UI를 제어해야 하는 더 복잡한 워크플로에 맞습니다.
마무리
CopilotKit은 'AI 채팅을 앱에 추가하는 도구'가 아닙니다. 에이전트가 앱의 상태와 UI를 직접 제어하는 루프를 만드는 SDK입니다. AG-UI Protocol 위에서 LangGraph, CrewAI, PydanticAI 등과 1st-party 통합을 지원하기 때문에, 에이전트 프레임워크를 이미 쓰고 있는 팀이라면 연결 비용이 낮습니다.
Generative UI와 Human-in-the-Loop까지 함께 쓰면, 에이전트가 단순 응답기가 아니라 앱의 실제 협업자로 동작하는 구조를 만들 수 있습니다. LangGraph 에이전트 앱을 React 프론트엔드와 연결하려는 팀이면 npx copilotkit@latest init부터 구조를 먼저 확인해볼 만합니다.
🐦 X에서 더 빠르게: @baegseungh7061
📚 이 시리즈 더 보기: AI 인사이트
💌 새 글 알림: X 팔로우 또는 블로그 RSS 구독
'AI 인사이트' 카테고리의 다른 글
| claude-task-master — PRD 한 장으로 AI 주도 개발의 태스크 트리를 만드는 법 (0) | 2026.05.24 |
|---|---|
| npm Sigstore 서명 우회 사건 — 공급망 신뢰 체계의 맹점 (0) | 2026.05.23 |
| AI 코딩 에이전트가 열어둔 보안 사각지대, 지금 당장 확인해야 할 세 가지 (0) | 2026.05.22 |
| impeccable — AI 없이 돌리는 프론트엔드 디자인 lint, 24개 안티패턴 탐지기 (0) | 2026.05.22 |
| Claude Code 샌드박스 취약점: CVE도 없이 조용히 패치된 보안 구멍 (0) | 2026.05.21 |