Artifacts
아티팩트를 사용하면 에이전트가 A2H Protocol (Agent-to-Human, 버전 0.3)을 통해 구조화된 대화형 콘텐츠를 사용자에게 전송할 수 있습니다. 텍스트로 양식을 설명하는 대신, 사용자가 직접 작성할 수 있는 실제 양식을 전송합니다.
아티팩트 전송
await agent.sendArtifact(conversationId, { artifact: { a2h: "0.3", subtype: "form", blocks: [ { tag: "input", key: "name", variant: "text", label: "Project name", required: true, }, { tag: "input", key: "description", variant: "textarea", label: "Description", }, { tag: "action", key: "submit", label: "Create Project", variant: "primary", }, ], }, title: "New Project Form", summary: "Fill in the project details", forwardable: false,});아티팩트 업데이트
이전에 전송한 아티팩트를 업데이트하여 진행 상태나 새로운 상태를 반영합니다:
await agent.updateArtifact(conversationId, { ref_artifact: "artifact_id", revision: 2, // 현재 리비전보다 커야 함 updates: { status_block_key: { state: "done", label: "Completed", }, },});사용자 응답 수신
사용자가 아티팩트와 상호작용하면(양식 제출, 버튼 클릭) 응답이 onEvent를 통해 도착합니다:
agent.onEvent((event) => { if (event.type === "artifact_response") { const { conversation_id, ref_artifact, ref_action, values } = event.payload; // values에 사용자가 제출한 양식 데이터가 포함됨 }});블록 유형
아티팩트는 블록으로 구성됩니다. 각 블록은 유형을 결정하는 tag를 가집니다:
| 태그 | 설명 | 사용 예 |
|---|---|---|
input | 텍스트 입력, 텍스트 영역, 숫자, 날짜 | 양식 필드 |
select | 드롭다운 또는 라디오 선택 | 옵션 목록 |
checkbox | 불리언 토글 | 확인 사항 |
action | 버튼 (primary, secondary, danger) | 제출, 취소, 승인/거부 |
text | 정적 표시 텍스트 | 안내, 설명 |
status | 진행률 표시기 | 작업 진행률 바 |
table | 표 형식 데이터 표시 | 검색 결과, 데이터 테이블 |
code | 구문 강조 코드 | 코드 스니펫 |
image | 삽입된 이미지 | 차트, 다이어그램 |
divider | 시각적 구분선 | 섹션 구분 |
아티팩트 하위 유형
| 하위 유형 | 목적 |
|---|---|
form | 사용자 입력 수집 |
status | 작업 진행 상태 표시 |
result | 최종 출력 표시 |
error | 오류 정보 표시 |
table | 구조화된 데이터 표시 |
code | 구문 강조가 포함된 코드 표시 |
제한 사항
| 제약 조건 | 값 |
|---|---|
| 아티팩트당 최대 블록 수 | 16 |
| 최대 A2H 페이로드 크기 | 64KB |
| 최대 총 페이로드 (래핑 포함) | 200KB |
| 아티팩트 수명 주기당 최대 업데이트 | 100 |
| 기본 전달 가능 여부 | 아니오 |
SDK가 처리하는 것
- 전송 전 아티팩트 페이로드 암호화
- 알림용 미리보기 텍스트 구성
- WebSocket 또는 REST 폴백을 통한 라우팅
- 페이로드 구조 검증
다음 단계
- 메시지 전송 — 텍스트 및 미디어 메시지
- 스트리밍 — 실시간 응답 스트리밍
- Data Grants — 사용자 데이터 접근 요청