아티팩트 생성 방식
ToolResult에 artifacts 목록을 반환하는 모든 도구는 다운로드 가능한 파일을 생성합니다. 에이전트에는 특별한 지시가 필요하지 않습니다 — 아티팩트 생성은 도구 실행의 자연스러운 부작용입니다.
일반적인 생성자:
| 도구 | 아티팩트 유형 | 예시 |
|---|---|---|
python_exec | 이미지, HTML, CSV, JSON | PNG로 저장된 matplotlib 차트 |
template_render | HTML | 형식화된 보고서 |
| 코드 실행 도구 | 모든 파일 | 생성된 코드, 내보낸 데이터 |
| 이미지 생성 | 이미지 | AI 생성 일러스트레이션 |
갤러리
Artifacts 페이지(/artifacts)는 모든 대화에서 생성한 모든 파일의 통합 보기를 제공합니다.
필터링
네 가지 유형 필터로 보기를 좁힐 수 있습니다:| 필터 | 파일 유형 |
|---|---|
| 모두 | 모든 파일 |
| 이미지 | PNG, JPG, GIF, SVG, WebP |
| HTML | HTML 페이지 및 보고서 |
| 코드 | Python, JavaScript, TypeScript, JSON, YAML, XML, CSS, SQL, Markdown, 셸 스크립트 |
| 파일 | 기타 — CSV, PDF, 일반 텍스트, 바이너리 파일 |
미리보기
아티팩트를 클릭하여 인라인 미리보기를 열 수 있습니다:- 이미지 — 전체 해상도로 렌더링됨
- HTML — 샌드박스 iframe에 표시됨 (스크립트 격리됨)
- 코드 — 언어 감지를 통한 구문 강조 표시
- 마크다운 — 형식이 지정된 텍스트로 렌더링됨
- 기타 — 일반 텍스트 또는 다운로드 프롬프트로 표시됨
메타데이터
각 아티팩트는 다음을 표시합니다:- 파일 이름 및 크기
- 생성 타임스탬프
- 소스 대화 (생성된 대화로 다시 이동하려면 클릭)
저장소
아티팩트는 서버 파일시스템의uploads/conversations/{conversation_id}/artifacts/ 디렉토리에 저장됩니다. 각 아티팩트는 UUID 기반 파일명을 받으므로 URL을 예측할 수 없습니다. 파일은 직접 제공되며, 개별 아티팩트에 대한 데이터베이스 레코드가 없어 저장소 계층이 단순하고 빠릅니다.
API
| Endpoint | Description |
|---|---|
GET /api/artifacts | 현재 사용자의 모든 아티팩트를 나열합니다. ?page=, ?size=, ?type= 필터를 지원합니다 |
GET /api/conversations/{id}/artifacts | 특정 대화의 아티팩트를 나열합니다 |
GET /api/conversations/{id}/artifacts/{artifact_id} | 특정 아티팩트를 다운로드합니다 |