From 71251274d21f3e98960478505c4ca533318b2242 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Mon, 15 Sep 2025 20:24:24 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20VLA/Diffusion=20=EC=9E=90=EC=9C=A8=20?= =?UTF-8?q?=EC=97=90=EC=9D=B4=EC=A0=84=ED=8A=B8=20=EC=97=B0=EA=B5=AC=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - robeing_vla_diffusion_deep_dive.md를 research/autonomous_agents로 이동 - VLA(Vision-Language-Action) 및 Diffusion 모델 기술 분석 - ZeroGUI 자율 학습 메커니즘 설명 - 로빙 적용 시나리오 및 장기 로드맵 포함 --- .../robeing_vla_diffusion_deep_dive.md | 358 ++++++++++++++++++ 1 file changed, 358 insertions(+) create mode 100644 research/autonomous_agents/robeing_vla_diffusion_deep_dive.md diff --git a/research/autonomous_agents/robeing_vla_diffusion_deep_dive.md b/research/autonomous_agents/robeing_vla_diffusion_deep_dive.md new file mode 100644 index 0000000..7d73415 --- /dev/null +++ b/research/autonomous_agents/robeing_vla_diffusion_deep_dive.md @@ -0,0 +1,358 @@ +--- +tags: [VLA, Diffusion, Robeing, Autonomous Agent, AI, Architecture] +date: 2025-09-15 +modified: 2025-09-15 +--- + +# VLA, Diffusion, 자율 에이전트: '로빙'을 위한 기술 심층 분석 + +## 1. Executive Summary + +이 문서는 로봇 공학 분야에서 시작된 VLA(Vision-Language-Action) 및 디퓨전(Diffusion) 모델의 핵심 원리를 분석하고, 이를 '로빙(Roboing)'과 같은 인터넷 기반 자율 에이전트에 적용하기 위한 기술적 청사진을 제시합니다. + +문서는 크게 세 부분으로 구성됩니다. +1. **핵심 개념**: VLA와 디퓨전의 기본 원리를 비유와 함께 설명합니다. +2. **기술 심층 분석**: 로빙에 필요한 비전 인코더, 백본 LLM, 액션 학습을 위한 데이터베이스 설계 및 학습 프로세스를 구체적인 코드 예시와 함께 제안합니다. +3. **로빙 적용 시나리오**: 현재 로빙의 기능 수준에서 시작하여 장기적인 자율 에이전트로 발전하기 위한 단계별 아키텍처와 구체적인 시나리오를 다이어그램과 함께 제시합니다. + +궁극적으로 이 문서는 로빙이 단순한 챗봇을 넘어, 시각적 맥락을 이해하고, 복잡한 다단계 작업을 자율적으로 계획하며, 인간의 개입을 최소화하는 '제로-UI(Zero-UI)' 에이전트로 진화하기 위한 로드맵을 제공하는 것을 목표로 합니다. + +--- + +## 2. 핵심 개념 설명: VLA와 디퓨전 + +### 2.1. VLA (Vision-Language-Action): 행동의 3요소 + +VLA는 이름 그대로 세 가지 요소를 통합하여 지능적인 행동을 결정하는 모델 구조입니다. + +1. **Vision (시각)**: 주변 환경과 상태를 인식합니다. + * **로봇**: 카메라를 통해 본 실제 세계의 객체, 장애물. + * **로빙**: 웹페이지 스크린샷, PDF 문서의 레이아웃, 차트 이미지, GUI 애플리케이션 화면. + +2. **Language (언어)**: 사용자의 지시, 목표, 또는 텍스트 형태의 정보를 이해합니다. + * **로봇**: "사과를 집어줘" 와 같은 자연어 명령. + * **로빙**: "이 보고서 요약해줘" 라는 슬랙 메시지, 이메일 본문, 검색 쿼리. + +3. **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가 인간의 개입 없이 학습하는 과정은 다음과 같습니다. + +1. **태스크 생성 (Task Generation)**: 에이전트가 GUI 화면을 탐색하며 가능한 상호작용(클릭, 입력 등)을 조합하여 스스로 "해볼 만한" 태스크 후보들을 만들어냅니다. +2. **보상 추정 (Reward Estimation)**: VLM(Vision-Language Model)을 심판으로 활용합니다. VLM이 목표(예: "뉴스 검색")와 실행 후 결과 화면을 비교하여, 태스크 성공 여부를 점수(보상)로 매깁니다. +3. **온라인 상호작용 (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** | Google | CLIP 개선판. 시그모이드 손실 함수. | CLIP보다 텍스트-이미지 정렬 성능 우수. LLM과 결합 시 안정적. | CLIP만큼 생태계가 넓지는 않음. | +| **BLIP-2** | Salesforce | 이미지 캡셔닝, VQA(질의응답) 특화 | "이 차트는 무엇을 의미해?" 와 같은 이미지 질의응답에 강점. | 단순 특징 추출 용도로는 구조가 복잡하고 무거움. | +| **Florence-2** | Microsoft | 멀티태스크(캡션, OCR, 객체탐지) 통합 | 하나의 모델로 문서 내 텍스트 인식, 레이아웃 분석 등 복합 작업 가능. | 아직 공개 범위가 제한적이고 무거움. | + +**결론**: 초기에는 **SigLIP**으로 언어-이미지 정렬을 구현하고, 정밀한 차트/표 분석이 필요할 때 **DINOv2**를 보조적으로 사용하는 것이 현실적입니다. + +#### 4.1.2. 예제 구현 (Python) + +```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 예시) + +```sql +-- 문서 메타 정보 +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`에 축적된 로그를 사용하여 다음과 같이 정책 모델을 학습시킬 수 있습니다. + +1. **행동 모방 (Behavioral Cloning)**: 성공적으로 완료된 `action_plan`의 `steps_json`을 정답으로 간주하고, 주어진 `context_json`에서 이 행동 순서를 예측하도록 지도학습을 수행합니다. (초기 모델 학습에 용이) +2. **오프라인 강화학습 (Offline RL)**: 사용자의 긍정적 피드백(저장, 재사용 등)을 받은 계획에 높은 보상을, 부정적 피드백(수정, 무시)을 받은 계획에 낮은 보상을 부여하여, 로그 데이터만으로 정책을 점진적으로 개선합니다. +3. **정책 쉴드 (Policy Shield)**: 학습된 정책이 위험한 행동(예: 개인정보 유출, 비용 과다 발생)을 생성하지 않도록, 실행 전에 외부의 보안/윤리 모듈이 항상 검사하고 필터링합니다. + +--- + +## 5. '로빙' 적용 시나리오 및 아키텍처 + +### 5.1. 로빙의 진화 로드맵 + +| 단계 | 이름 | 핵심 기능 | 발전 요소 | +| :--- | :--- | :--- | :--- | +| **1 (현재)** | 뉴스 브리핑 어시스턴트 | 뉴스 크롤링, 요약, 슬랙 전송 | 주기적/키워드 기반 브리핑 | +| **2 (단기)** | 업무 검색 파트너 | 자연어 명령 이해, 웹/문서 검색 후 요약 | Intent Analyzer, 자동 요약 답변 | +| **3 (중기)** | 파일 처리 에이전트 | Slack에 업로드된 파일(PDF, DOCX) 처리 | 파일 파서, 텍스트/표 추출, 지식베이스 저장 | +| **4 (장기)** | 자율적 협업 파트너 | 사용자 패턴 학습, 선제적 작업 제안, 멀티에이전트 협업 | 기억 시스템, 자율 행동 범위 확대 | + +### 5.2. Diffusion-VLA 기반 아키텍처 진화 + +#### 1단계: 기본 VLA 구조 (현재) +```mermaid +flowchart LR + U[사용자 지시] --> LLM[언어 인코더] + ENV[뉴스/웹 페이지] --> VISION[텍스트/HTML 파서] + LLM --> POLICY[액션 정책 (규칙 기반)] + VISION --> POLICY + POLICY --> A[단일 액션 실행 (Slack 메시지, 검색)] +``` + +#### 2단계: 액션 후보 분포 생성 (디퓨전 도입) +```mermaid +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단계: 평가 및 윤리/스탯 모듈 연동 +```mermaid +flowchart LR + subgraph "계획 단계" + DIST[행동 후보 분포] --> EVAL[평가 모듈] + end + subgraph "검증 단계" + EVAL --> ETHICS[윤리 체크] + EVAL --> STATS[스탯/레벨업 모델] + end + subgraph "실행 단계" + ETHICS --> SELECT[최종 액션 선택] + STATS --> SELECT + SELECT --> EXEC[실행 (Slack/Notion/Email)] + end +``` + +#### 4단계: 멀티에이전트 확장 +```mermaid +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가지**: +1. **뉴스 인텔 브리핑**: 매일 아침 지정된 키워드의 뉴스를 요약하여 DM으로 전송. +2. **제로-클릭 태스크 생성**: 슬랙 채널에서 "누가?", "언제까지?" 등의 대화가 감지되면, 할 일 초안을 자동으로 만들어 스레드에 제안. +3. **링크 자동 요약**: 채널에 URL이 공유되면, 해당 페이지를 크롤링하여 5줄 요약과 핵심 키워드를 스레드에 답글로 달아줌. + +--- + +## 6. 결론 및 다음 단계 + +VLA와 디퓨전 모델은 로빙이 단순한 정보 제공자를 넘어, 시각적 맥락을 이해하고 복잡한 인터넷 기반 작업을 자율적으로 계획하고 실행하는 '존재형 에이전트'로 성장하기 위한 핵심 기술입니다. + +**다음 단계 제안**: +1. **데이터 로깅 강화**: 제안된 `qa_trace` 및 `action_plan` 스키마에 따라 모든 사용자 상호작용과 에이전트 행동을 구조화하여 기록 시작. +2. **Vision 모듈 도입**: SigLIP을 사용하여, 슬랙에 공유되는 이미지나 URL의 썸네일과 사용자 질의 간의 관련도를 측정하는 기능부터 프로토타이핑. +3. **Zero-UI 시나리오 구현**: '링크 자동 요약'과 같이 위험도가 낮고 효용이 높은 시나리오를 먼저 구현하여 사용자 피드백 수집 및 학습 데이터 축적.