Artifact
Artifact 讓 Agent 透過 A2H Protocol(Agent-to-Human,版本 0.3)向使用者傳送結構化、互動式的內容。你可以直接傳送一個使用者可以填寫的表單,而非用文字描述表單。
傳送 Artifact
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,});更新 Artifact
更新先前傳送的 Artifact 以反映進度或新狀態:
await agent.updateArtifact(conversationId, { ref_artifact: "artifact_id", revision: 2, // 必須大於當前修訂版號 updates: { status_block_key: { state: "done", label: "Completed", }, },});接收使用者回應
當使用者與 Artifact 互動(提交表單、點擊按鈕)時,回應透過 onEvent 到達:
agent.onEvent((event) => { if (event.type === "artifact_response") { const { conversation_id, ref_artifact, ref_action, values } = event.payload; // values 包含使用者提交的表單資料 }});區塊類型
Artifact 由區塊組成。每個區塊有一個 tag 來決定其類型:
| Tag | 說明 | 使用範例 |
|---|---|---|
input | 文字輸入、文字區域、數字、日期 | 表單欄位 |
select | 下拉選單或單選 | 選項列表 |
checkbox | 布林切換 | 確認項目 |
action | 按鈕(主要、次要、危險) | 提交、取消、批准/拒絕 |
text | 靜態顯示文字 | 說明、描述 |
status | 進度指示器 | 任務進度條 |
table | 表格式資料展示 | 搜尋結果、資料表 |
code | 語法高亮程式碼 | 程式碼片段 |
image | 嵌入式圖片 | 圖表、圖示 |
divider | 視覺分隔線 | 區段分隔 |
Artifact 子類型
| 子類型 | 用途 |
|---|---|
form | 收集使用者輸入 |
status | 顯示任務進度 |
result | 顯示最終輸出 |
error | 顯示錯誤資訊 |
table | 結構化資料展示 |
code | 帶語法高亮的程式碼展示 |
限制
| 約束 | 值 |
|---|---|
| 每個 Artifact 的最大區塊數 | 16 |
| A2H 載荷最大大小 | 64KB |
| 含封裝的最大載荷 | 200KB |
| 每個 Artifact 生命週期的最大更新次數 | 100 |
| 預設可轉發 | 否 |
SDK 處理的事項
- 在傳送前加密 Artifact 載荷
- 建構通知用的預覽文字
- 透過 WebSocket 或 REST 回退路由
- 驗證載荷結構