- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동 - book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서) - 빈 폴더 제거 (journey/assets/*)
20 KiB
tags, date, modified
| tags | date | modified | ||||||
|---|---|---|---|---|---|---|---|---|
|
2025-09-15 | 2025-09-15 |
VLA, Diffusion, 자율 에이전트: '로빙'을 위한 기술 심층 분석
1. Executive Summary
이 문서는 로봇 공학 분야에서 시작된 VLA(Vision-Language-Action) 및 디퓨전(Diffusion) 모델의 핵심 원리를 분석하고, 이를 '로빙(Roboing)'과 같은 인터넷 기반 자율 에이전트에 적용하기 위한 기술적 청사진을 제시합니다.
문서는 크게 세 부분으로 구성됩니다.
- 핵심 개념: VLA와 디퓨전의 기본 원리를 비유와 함께 설명합니다.
- 기술 심층 분석: 로빙에 필요한 비전 인코더, 백본 LLM, 액션 학습을 위한 데이터베이스 설계 및 학습 프로세스를 구체적인 코드 예시와 함께 제안합니다.
- 로빙 적용 시나리오: 현재 로빙의 기능 수준에서 시작하여 장기적인 자율 에이전트로 발전하기 위한 단계별 아키텍처와 구체적인 시나리오를 다이어그램과 함께 제시합니다.
궁극적으로 이 문서는 로빙이 단순한 챗봇을 넘어, 시각적 맥락을 이해하고, 복잡한 다단계 작업을 자율적으로 계획하며, 인간의 개입을 최소화하는 '제로-UI(Zero-UI)' 에이전트로 진화하기 위한 로드맵을 제공하는 것을 목표로 합니다.
2. 핵심 개념 설명: VLA와 디퓨전
2.1. VLA (Vision-Language-Action): 행동의 3요소
VLA는 이름 그대로 세 가지 요소를 통합하여 지능적인 행동을 결정하는 모델 구조입니다.
-
Vision (시각): 주변 환경과 상태를 인식합니다.
- 로봇: 카메라를 통해 본 실제 세계의 객체, 장애물.
- 로빙: 웹페이지 스크린샷, PDF 문서의 레이아웃, 차트 이미지, GUI 애플리케이션 화면.
-
Language (언어): 사용자의 지시, 목표, 또는 텍스트 형태의 정보를 이해합니다.
- 로봇: "사과를 집어줘" 와 같은 자연어 명령.
- 로빙: "이 보고서 요약해줘" 라는 슬랙 메시지, 이메일 본문, 검색 쿼리.
-
Action (행동): 인식한 시각 정보와 이해한 언어적 목표를 바탕으로 다음에 수행할 행동을 결정합니다.
- 로봇: 로봇 팔의 관절 각도 조절, 바퀴 구동.
- 로빙: API 호출, 웹 브라우저의 버튼 클릭, 텍스트 입력, 슬랙 메시지 전송.
쉬운 비유: LLM이 "말로 설명된 요리법"을 생성하고, VLM이 "사진 속 재료와 도구"를 인식한다면, **VLA는 "사진 속 냉장고를 보고, 레시피를 이해해서, 직접 요리를 만드는 행동 순서"**를 만들어내는 것과 같습니다.
2.2. 디퓨전 모델 (Diffusion Models): 이미지에서 행동 계획으로
디퓨전 모델은 본래 이미지 생성 분야에서 놀라운 성능을 보여준 기술입니다.
-
작동 원리: 깨끗한 이미지에 점진적으로 노이즈를 추가하는 과정(Forward Process)을 학습한 뒤, 그 역과정(Reverse Process)을 통해 완전한 노이즈로부터 깨끗한 이미지를 생성해냅니다.
-
행동 계획에서의 의미: 이 원리를 행동 계획에 적용하면, 단 하나의 '정답' 행동을 예측하는 대신, 가능한 행동들의 확률 분포에서 가장 그럴듯한 **행동 순서(Trajectory)**를 점진적으로 샘플링하고 복원해낼 수 있습니다.
쉬운 비유: 조각가가 대리석 원석(노이즈)에서 불필요한 부분을 점차 깎아내어 최종 조각상(목표 행동)을 완성하는 것과 유사합니다. 처음에는 무작위적인 행동에서 시작해, 점차 목표에 부합하는 정교한 행동 순서로 수렴시키는 방식입니다.
2.3. Diffusion-VLA: 두 기술의 시너지
Diffusion-VLA는 VLA의 '상황 인식 및 목표 이해' 능력과 디퓨전의 '안정적인 다단계 계획 생성' 능력을 결합한 것입니다.
- VLA: "무엇을(Vision), 왜(Language) 해야 하는가?"를 파악합니다.
- Diffusion: "어떻게(Action Sequence) 해야 하는가?"에 대한 여러 경로를 탐색하고 최적의 경로를 생성합니다.
이를 통해 "박스를 정리해줘"와 같이 모호한 지시에도, '박스를 연다 → 물건을 꺼낸다 → 분류한다 → 제자리에 놓는다'와 같은 다양한 행동 순서 후보를 생성하고 그중 가장 효율적인 계획을 선택할 수 있게 됩니다.
3. GUI/인터넷 환경 적용: ZeroGUI와 자율 학습
로봇 공학의 VLA를 인터넷 환경으로 가져오려는 시도 중 가장 주목할 만한 것은 ZeroGUI와 같은 GUI 자동화 연구입니다.
3.1. ZeroGUI란? (Zero Human Cost, Not Zero-Shot)
- 핵심 아이디어: "Zero-Shot(사전 학습만으로 새로운 작업을 수행)"의 의미가 아니라, GUI 에이전트 학습에 필요한 **"인간의 라벨링 비용을 0(Zero)"**으로 만들자는 목표를 가집니다.
- 기존 방식: "이 버튼을 클릭해" 와 같이 사람이 모든 행동 경로를 데이터로 만들어줘야 했습니다.
- ZeroGUI 방식: 에이전트가 스스로 GUI 환경과 상호작용하며 학습 데이터를 생성하고, 스스로 보상을 평가하여 자율적으로 학습합니다.
3.2. 자율 학습의 3단계 메커니즘
ZeroGUI가 인간의 개입 없이 학습하는 과정은 다음과 같습니다.
- 태스크 생성 (Task Generation): 에이전트가 GUI 화면을 탐색하며 가능한 상호작용(클릭, 입력 등)을 조합하여 스스로 "해볼 만한" 태스크 후보들을 만들어냅니다.
- 보상 추정 (Reward Estimation): VLM(Vision-Language Model)을 심판으로 활용합니다. VLM이 목표(예: "뉴스 검색")와 실행 후 결과 화면을 비교하여, 태스크 성공 여부를 점수(보상)로 매깁니다.
- 온라인 상호작용 (Online Interaction): 실제 GUI 환경에서 '탐색 → 태스크 생성 → 실행 → 보상 추정'의 강화학습 루프를 지속적으로 반복하며 정책을 점진적으로 개선합니다.
3.3. ZeroGUI의 실험 구성
- 환경:
OSWorld(데스크톱 GUI 벤치마크),AndroidLab(모바일 시뮬레이터) - 베이스 에이전트:
UI-TARS,Aguvis와 같은 기존 GUI 에이전트 위에 ZeroGUI의 자율 학습 루프를 적용하여 성능 향상을 증명했습니다. - 하드웨어: 특정 고사양 하드웨어를 요구하기보다는, VLM을 구동할 수 있는 표준적인 GPU 환경에서 재현 가능하도록 깃허브에 스크립트와 모델을 공개했습니다.
4. 기술 심층 분석: '로빙'을 위한 빌딩 블록
4.1. 'Vision' 컴포넌트: 비전 인코더
로빙이 PDF의 차트, 웹페이지의 레이아웃을 '보기' 위해 필요한 모듈입니다.
4.1.1. 사전학습 인코더 비교
| 모델명 | 개발사 | 특징 | 장점 (로빙 적용 시) | 단점 |
|---|---|---|---|---|
| CLIP | OpenAI | 이미지-텍스트를 동일 공간에 매핑 | "그래프 찾아줘" 등 언어-이미지 매칭에 탁월. 생태계 넓음. | 세밀한 텍스트/숫자 인식은 약함. |
| DINOv2 | Meta | 텍스트 라벨 없이 자기지도학습 | 시각적 패턴, 레이아웃 등 세부 특징 추출에 매우 강력. | 언어와 직접 결합된 구조가 아님. 계산 비용이 큼. |
| SigLIP | CLIP 개선판. 시그모이드 손실 함수. | CLIP보다 텍스트-이미지 정렬 성능 우수. LLM과 결합 시 안정적. | CLIP만큼 생태계가 넓지는 않음. | |
| BLIP-2 | Salesforce | 이미지 캡셔닝, VQA(질의응답) 특화 | "이 차트는 무엇을 의미해?" 와 같은 이미지 질의응답에 강점. | 단순 특징 추출 용도로는 구조가 복잡하고 무거움. |
| Florence-2 | Microsoft | 멀티태스크(캡션, OCR, 객체탐지) 통합 | 하나의 모델로 문서 내 텍스트 인식, 레이아웃 분석 등 복합 작업 가능. | 아직 공개 범위가 제한적이고 무거움. |
결론: 초기에는 SigLIP으로 언어-이미지 정렬을 구현하고, 정밀한 차트/표 분석이 필요할 때 DINOv2를 보조적으로 사용하는 것이 현실적입니다.
4.1.2. 예제 구현 (Python)
# 1. SigLIP으로 텍스트 지시와 문서 이미지 정렬
import torch
from PIL import Image
from transformers import AutoProcessor, AutoModel
# model_id = "openai/clip-vit-large-patch14" # 또는 CLIP
model_id = "google/siglip-so400m-patch14-384" # SigLIP 권장
device = "cuda" if torch.cuda.is_available() else "cpu"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModel.from_pretrained(model_id).to(device)
model.eval()
def score_image_text(image_path: str, text: str) -> float:
"""이미지와 텍스트 간의 관련도 점수를 계산합니다."""
image = Image.open(image_path).convert("RGB")
inputs = processor(text=[text], images=[image], return_tensors="pt", padding=True).to(device)
with torch.no_grad():
outputs = model(**inputs)
image_emb = torch.nn.functional.normalize(outputs.image_embeds, dim=-1)
text_emb = torch.nn.functional.normalize(outputs.text_embeds, dim=-1)
sim = (image_emb @ text_emb.T).squeeze().item()
return float(sim)
# 예시: "재무지표 표"와 가장 관련 높은 페이지 찾기
query = "재무지표 표와 관련된 섹션을 찾아 요약하라"
candidates = ["page1.png", "page2.png", "page3.png"]
# scored = [(p, score_image_text(p, query)) for p in candidates]
# best_page, best_score = max(scored, key=lambda x: x[1])
# print(f"가장 관련 높은 페이지: {best_page}, 점수: {best_score:.3f}")
# 2. DINOv2로 이미지 내 정보 밀도가 높은 영역 찾기
import timm
import torchvision.transforms as T
import numpy as np
backbone = timm.create_model("vit_large_patch14_dinov2", pretrained=True).to(device).eval()
preproc = T.Compose([
T.Resize(518), T.CenterCrop(518),
T.ToTensor(), T.Normalize(mean=0.5, std=0.5)
])
def extract_grid_saliency(image_path: str):
"""이미지를 그리드로 나누고 각 패치의 정보량(분산)을 계산합니다."""
img = Image.open(image_path).convert("RGB")
x = preproc(img).unsqueeze(0).to(device)
with torch.no_grad():
feats = backbone.forward_features(x)['tokens']
tokens = feats[:, 1:, :] # class 토큰 제외
sal = tokens.var(dim=-1).squeeze().detach().cpu().numpy()
side = int(np.sqrt(sal.shape[0]))
sal_map = sal.reshape(side, side)
top_idx = np.unravel_index(np.argmax(sal_map), sal_map.shape)
return sal_map, top_idx
# sal_map, peak = extract_grid_saliency(best_page)
# print(f"가장 정보량 높은 패치 위치: {peak}")
4.2. 'Language' 컴포넌트: 백본 LLM
로빙의 두뇌 역할을 하며, 사용자의 지시와 시각적 맥락을 종합하여 추론하고 계획을 수립합니다.
4.2.1. 추천 LLM 및 단계별 전략
| 구분 | 추천 모델 | 장점 | 단점 | 적용 단계 |
|---|---|---|---|---|
| 상용 API | GPT-4o mini, Claude 3.5 Sonnet | 고성능, 안정적, 긴 문맥 처리 | API 비용 발생, 외부 의존성 | 현재 ~ 단기: 빠른 프로토타이핑 및 안정성 확보 |
| 오픈소스 | LLaMA 3.1, Qwen2, Mistral | 자체 호스팅으로 비용 절감, 커스터마이징 용이 | 운영을 위한 GPU 자원 필요, 한국어 성능 한계 | 중기 ~ 장기: 비용 효율화 및 특정 태스크 최적화 |
전략: 초기에는 상용 API로 빠르게 기능을 구현하고, 데이터가 축적되면 특정 기능(분류, 요약 등)을 경량 오픈소스 모델로 대체하는 하이브리드 방식이 현실적입니다.
4.2.2. 예상 API 비용 (하루 100회 호출 기준)
- 가정: 호출당 입력 500토큰, 출력 300토큰
- GPT-4o mini: 약 $0.77 / 월
- Claude 3.5 Sonnet: 약 $10 / 월
하루 100회 정도의 호출은 저렴한 모델 사용 시 월 1달러 내외로 운영 가능하여 초기 실험에 부담이 적습니다.
4.3. 'Action' 컴포넌트: 학습과 실행
4.3.1. 액션 학습을 위한 Polyglot DB 아키텍처
다양한 형태의 데이터를 효율적으로 저장하고 검색하기 위해 여러 DB를 조합하는 '폴리글롯(Polyglot)' 구조를 제안합니다.
- PostgreSQL: 계정, 권한, 문서 메타데이터 등 정형 데이터 (트랜잭션 보장)
- Object Storage (S3/MinIO): PDF, 이미지 등 원본 파일 저장
- Vector DB (ChromaDB): 텍스트/이미지 임베딩 벡터 저장 및 의미 검색
- Search Engine (OpenSearch): 키워드 기반 전문(Full-text) 검색
- Graph DB (Neo4j): 엔티티(사람, 조직), 문서 간의 관계 추적
- Redis: 캐시, 실시간 작업 큐
4.3.2. 핵심 테이블 스키마 (PostgreSQL 예시)
-- 문서 메타 정보
CREATE TABLE doc (
doc_id BIGSERIAL PRIMARY KEY,
owner_id BIGINT NOT NULL,
title TEXT NOT NULL,
source_uri TEXT,
storage_key TEXT NOT NULL, -- S3 경로
sensitivity SMALLINT NOT NULL, -- 민감도 레벨
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
-- 문서 버전 관리
CREATE TABLE doc_version (
version_id BIGSERIAL PRIMARY KEY,
doc_id BIGINT NOT NULL REFERENCES doc(doc_id) ON DELETE CASCADE,
rev INTEGER NOT NULL,
checksum_sha256 BYTEA NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
-- 검색/임베딩 단위 (문단, 표, 그림 등)
CREATE TABLE doc_chunk (
chunk_id BIGSERIAL PRIMARY KEY,
version_id BIGINT NOT NULL REFERENCES doc_version(version_id) ON DELETE CASCADE,
chunk_type TEXT NOT NULL, -- 'text', 'table', 'figure'
loc_page INTEGER, -- 페이지 번호
loc_bbox JSONB, -- 페이지 내 위치 [x1,y1,x2,y2]
text_norm TEXT, -- 정규화된 텍스트
meta JSONB -- 표 헤더, 차트 종류 등 추가 정보
);
-- 사용자 질의와 에이전트 행동 추적 로그
CREATE TABLE qa_trace (
trace_id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
query_text TEXT NOT NULL,
topk_json JSONB, -- 검색된 근거 chunk_id 리스트
answer_ref TEXT, -- 생성된 답변의 저장 위치
created_at TIMESTAMPTZ DEFAULT now()
);
-- 자율 행동 계획 로그
CREATE TABLE action_plan (
plan_id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
context_json JSONB, -- 행동 결정 시점의 컨텍스트
steps_json JSONB, -- 생성된 행동 순서 [{op:"API.CALL",...}]
status TEXT, -- 'planned', 'running', 'done', 'failed'
created_at TIMESTAMPTZ DEFAULT now()
);
4.3.3. 액션 학습 프로세스
qa_trace와 action_plan에 축적된 로그를 사용하여 다음과 같이 정책 모델을 학습시킬 수 있습니다.
- 행동 모방 (Behavioral Cloning): 성공적으로 완료된
action_plan의steps_json을 정답으로 간주하고, 주어진context_json에서 이 행동 순서를 예측하도록 지도학습을 수행합니다. (초기 모델 학습에 용이) - 오프라인 강화학습 (Offline RL): 사용자의 긍정적 피드백(저장, 재사용 등)을 받은 계획에 높은 보상을, 부정적 피드백(수정, 무시)을 받은 계획에 낮은 보상을 부여하여, 로그 데이터만으로 정책을 점진적으로 개선합니다.
- 정책 쉴드 (Policy Shield): 학습된 정책이 위험한 행동(예: 개인정보 유출, 비용 과다 발생)을 생성하지 않도록, 실행 전에 외부의 보안/윤리 모듈이 항상 검사하고 필터링합니다.
5. '로빙' 적용 시나리오 및 아키텍처
5.1. 로빙의 진화 로드맵
| 단계 | 이름 | 핵심 기능 | 발전 요소 |
|---|---|---|---|
| 1 (현재) | 뉴스 브리핑 어시스턴트 | 뉴스 크롤링, 요약, 슬랙 전송 | 주기적/키워드 기반 브리핑 |
| 2 (단기) | 업무 검색 파트너 | 자연어 명령 이해, 웹/문서 검색 후 요약 | Intent Analyzer, 자동 요약 답변 |
| 3 (중기) | 파일 처리 에이전트 | Slack에 업로드된 파일(PDF, DOCX) 처리 | 파일 파서, 텍스트/표 추출, 지식베이스 저장 |
| 4 (장기) | 자율적 협업 파트너 | 사용자 패턴 학습, 선제적 작업 제안, 멀티에이전트 협업 | 기억 시스템, 자율 행동 범위 확대 |
5.2. Diffusion-VLA 기반 아키텍처 진화
1단계: 기본 VLA 구조 (현재)
flowchart LR
U[사용자 지시] --> LLM[언어 인코더]
ENV[뉴스/웹 페이지] --> VISION[텍스트/HTML 파서]
LLM --> POLICY["액션 정책 (규칙 기반)"]
VISION --> POLICY
POLICY --> A["단일 액션 실행 (Slack 메시지, 검색)"]
2단계: 액션 후보 분포 생성 (디퓨전 도입)
flowchart LR
U[사용자 지시] --> LLM[언어 인코더]
ENV[문서/뉴스/Slack 상태] --> VISION[비전 인코더]
LLM --> POLICY[디퓨전 정책]
VISION --> POLICY
POLICY --> DIST[행동 분포 샘플링]
DIST --> CAND1["후보1: 뉴스 수집→요약→Slack"]
DIST --> CAND2["후보2: 뉴스 수집→분석→Notion"]
DIST --> CAND3["후보3: Slack+Notion 동시 기록"]
3단계: 평가 및 윤리/스탯 모듈 연동
flowchart LR
subgraph "계획 단계"
DIST[행동 후보 분포] --> EVAL[평가 모듈]
end
subgraph "검증 단계"
EVAL --> ETHICS[윤리 체크]
EVAL --> STATS[스탯/레벨업 모델]
end
subgraph "실행 단계"
ETHICS --> SELECT[최종 액션 선택]
STATS --> SELECT
SELECT --> EXEC["실행 (Slack/Notion/Email)"]
end
4단계: 멀티에이전트 확장
flowchart LR
SELECT[최적 액션 시퀀스] --> COORD[멀티에이전트 코디네이터]
COORD -- 작업 분배 --> AG1[에이전트1: 뉴스 크롤링]
COORD -- 작업 분배 --> AG2[에이전트2: 요약·분석]
COORD -- 작업 분배 --> AG3[에이전트3: Slack 보고]
AG1 --> MERGE[결과 통합]
AG2 --> MERGE
AG3 --> MERGE
MERGE --> USER[최종 사용자 피드백]
5.3. Zero-UI: 보이지 않는 인터페이스
사용자가 명시적으로 부르지 않아도, 로빙이 맥락을 파악하여 조용히 작업을 처리하고 최소한으로 개입하는 것을 목표로 합니다.
- 트리거: 시간(매일 아침), 이벤트(특정 키워드 언급), 상태(과도한 알림 억제)
- 상호작용: 슬랙 스레드에 "이대로 생성할까요? [예/아니오]" 와 같은 한 줄 확인
- 가드레일: 외부 발송, 비용 발생, 권한 변경 등 고위험 행동은 항상 명시적 승인 요구
즉시 적용 가능한 Zero-UI 시나리오 3가지:
- 뉴스 인텔 브리핑: 매일 아침 지정된 키워드의 뉴스를 요약하여 DM으로 전송.
- 제로-클릭 태스크 생성: 슬랙 채널에서 "누가?", "언제까지?" 등의 대화가 감지되면, 할 일 초안을 자동으로 만들어 스레드에 제안.
- 링크 자동 요약: 채널에 URL이 공유되면, 해당 페이지를 크롤링하여 5줄 요약과 핵심 키워드를 스레드에 답글로 달아줌.
6. 결론 및 다음 단계
VLA와 디퓨전 모델은 로빙이 단순한 정보 제공자를 넘어, 시각적 맥락을 이해하고 복잡한 인터넷 기반 작업을 자율적으로 계획하고 실행하는 '존재형 에이전트'로 성장하기 위한 핵심 기술입니다.
다음 단계 제안:
- 데이터 로깅 강화: 제안된
qa_trace및action_plan스키마에 따라 모든 사용자 상호작용과 에이전트 행동을 구조화하여 기록 시작. - Vision 모듈 도입: SigLIP을 사용하여, 슬랙에 공유되는 이미지나 URL의 썸네일과 사용자 질의 간의 관련도를 측정하는 기능부터 프로토타이핑.
- Zero-UI 시나리오 구현: '링크 자동 요약'과 같이 위험도가 낮고 효용이 높은 시나리오를 먼저 구현하여 사용자 피드백 수집 및 학습 데이터 축적.