Widget Forms
使用表單工具,而不是手寫標記:編輯器聊天會將表單渲染為互動式卡片,並回傳使用者的結構化答案。
執行規則
呼叫 ask_followup_questions。它會將你的欄位序列化為編輯器原生的表單卡片;使用者的提交內容會以他們的下一個訊息形式回傳。
在呼叫工具之前,先規劃好整個問卷。僅發送一份最終表單,而非一份試用表單後再接一份修正表單。該工具最多支援 12 個欄位;如果使用者要求更多問題,請在第一次呼叫前將相關提示合併為組合欄位。
在呼叫 ask_followup_questions 之後,停止該輪並等待提交的答案出現在聊天中。在使用者的選擇出現在對話中之前,不要套用選擇、建立素材,或根據建議繼續規劃。
支援的欄位對應
建立一個 fields 陣列。以使用者的對話語言撰寫所有可見字串。
- 原生
<form-single>->{ type: "single", variant: "default" } - 原生
<form-multi>->{ type: "multi", variant: "default" } - 原生
<form-text>/<form-textarea>->{ type: "text" } - 原生
<form-visual>->{ type: "single", variant: "visual" } - 語音試聽卡片 ->
{ type: "single", variant: "voice" } - 原生開始場景卡片 ->
{ type: "single", variant: "scenario" }
表單文案語氣
對於表單層級的文字(title、prompt、fields[].label、submitLabel 和 messagePrefix),請以 OpenChatCut 是位能幹的影片製作夥伴,邀請使用者描述他們想要什麼的方式書寫,而不是像一份制式的調查問卷。
目標為:
- 溫暖、開放式、且以行動為導向。文案應暗示「選擇最接近的影片需求,或直接告訴我你的想法;我們可以一起找出解決方案。」
- 簡短且易於掃讀。對
prompt使用一個自然的句子,對問題標籤使用簡潔的問句。 - 誠實的能力框架。OpenChatCut 可以協助許多影片工作流程,但不要聲稱不支援的能力,或在輸入內容已知之前保證結果。
- 使用者的語言與當地產品術語。將「OpenChatCut」、「B-roll」、「Motion Graphics」、「MG 動畫」、型號/產品名稱和平台名稱保留為其既定形式。
- 面向使用者的創意用詞。對於早期規劃或創意輸入表單,偏好使用諸如點子、方向、計畫、故事、鏡頭列表、觀眾、氛圍或影片需求等自然詞語,而非內部生產文件語言。
避免僵硬的標籤,例如「選擇影片類型」、「請為此專案選擇影片類型」或「你想製作什麼類型的影片?」用於場景輸入,除非主機沒有空間容納更溫暖的文案。
對於場景輸入表單,偏好使用類似這樣的文案:
{
"title": "你想製作什麼?",
"prompt": "選擇最接近的影片場景,或選擇「其他」並描述你的想法。",
"submitLabel": "開始創作",
"messagePrefix": "我想從這個影片方向開始:",
"fields": [
{
"id": "scenario",
"label": "哪個場景最適合你的影片?",
"type": "single",
"variant": "scenario",
"otherPlaceholder": "例如:將我的旅遊片段轉換為氛圍 Vlog / 為新產品製作宣傳影片"
}
]
}
不要在表單中包含檔案上傳問題。如果任務實際上需要來源媒體,而專案/聊天中尚未擁有它,請另外要求使用者在編輯器中上傳檔案(拖放或上傳按鈕,或貼到聊天撰寫器中)。檔案上傳不是每個問卷的預設必要條件;僅當下一個編輯步驟依賴缺少的媒體時才要求。
對於選擇欄位:
- 使用
id作為下一個工具呼叫所需的內部值。 - 使用
label作為使用者看到的內容。 - 對於一般的單選和多選卡片(
variant: "default"),僅保留選項標籤。除非使用者僅從標籤無法區分選項,否則不要為每個選項添加description。 - 主要為語音卡片使用
description。視覺樣式卡片通常應僅使用preview+label。 - 當非列表答案可接受時,使用
id: "__other__"和與表單其餘部分相同語言的label添加一個明確的選項,使用使用者對於非列表答案所期望的詞語。該小工具會在選中時將此選項轉換為文字輸入。如果文字輸入需要預留位置,請使用otherPlaceholder。
對於視覺卡片:
- 在
preview中使用真實的圖片 URL 或 data image URL。 - 對於設計型錄選項,先呼叫
manage_design_style搭配action: "list",然後將每個回傳的預設映射為{ id: preset.presetId, label: preset.name }(在此版本中無縮圖)。 - 除非使用者已選擇了一個,否則切勿硬編碼型錄預設 ID。
對於語音卡片:
- 使用
audioUrl作為範例檔案。 - 偏好看似
/voice-samples/doubao-liuchang.mp3的記錄路徑或公開的 HTTPS URL。不要傳遞本地主機範例 URL;MCP 主機 iframe 無法可靠地解析編輯器本地媒體。 - 保持使用者可見的描述與提供者無關。以與原生 OpenChatCut 試聽 UI 相同的方式描述語音:性別 / 年齡範圍 / 語氣 / 使用案例,例如
Female / young / friendly, general或男 / 中年 / 低沉知識解說。不要在選項描述中顯示提供者名稱,如 ElevenLabs 或 Doubao。 - 保持選項
id等於submit_voice所需的提供者語音 ID。
對於原生開始場景卡片:
- 當使用者應選擇開始哪個 OpenChatCut 影片工作流程時使用,例如頭部特寫剪輯、MG 動畫、長影片轉短影片、產品/應用程式宣傳、AI 短片或解說影片。
- 將其呈現為常見的影片需求/場景,而非唯一可能的影片工作流程。表單也必須讓使用者描述不同的影片需求。
- 使用恰好一個帶有
variant: "scenario"的單選欄位。 - 使用以下規範 ID 和本地化標籤(以使用者的語言)提供選項。僅當你需要自訂非列表標籤時,才包含
id: "__other__";否則後端會附加一個本地化的「其他」選項。 - 英文、中文和西班牙文的場景標籤/描述/起始提示已內建。對於任何其他使用者語言,忠實地將每個場景的英文
label、description和起始提示翻譯為使用者的語言,並在選項物件中傳遞這些本地化值。保留 OpenChatCut 產品術語和工作流程含義;不要添加新的要求。使用submitPrompt來傳遞翻譯後的起始提示。此覆寫專用於variant: "scenario";一般的選項卡片、語音卡片和視覺樣式卡片已經從你傳遞的值中獲得其可見文字。 - 不要提供自訂的
preview或audioUrl;後端會填入原生的首屏預覽圖片。 - 規範 ID:
talking-head、motion-graphics、long-video-to-shorts、app-promo、ai-cinematic-short-film、explainer,加上__other__用於自由形式的影片需求。 - 範例選項:
{ "id": "talking-head", "label": "頭部特寫剪輯" },{ "id": "motion-graphics", "label": "動態圖形" },{ "id": "long-video-to-shorts", "label": "長影片轉短影片" },{ "id": "app-promo", "label": "產品 / 應用程式宣傳" },{ "id": "ai-cinematic-short-film", "label": "AI 短片" },{ "id": "explainer", "label": "解說影片" },{ "id": "__other__", "label": "其他" }。
目前限制
ask_followup_questions 僅用於結構化答案。它不支援原生自訂 HTML、時間軸參數橋接、編輯器項目選取或檔案上傳欄位。對於代理執行時期已持有的檔案或在此卡片外直接附加到聊天的檔案,媒體匯入工作流程仍然有效:呼叫 import_media 並執行輔助/直接上傳路徑。對於使用者想要直接放置到專案中的檔案,請要求他們使用 OpenChatCut 編輯器上傳 UI。
範例
{
"title": "你的影片點子",
"prompt": "選擇或填寫你心中的想法,以便 OpenChatCut 可以選出一個好的起點方向。",
"submitLabel": "傳送點子",
"messagePrefix": "繼續此影片方向:",
"fields": [
{
"id": "goal",
"label": "這支影片的主要目標是什麼?",
"type": "single",
"options": [
{ "id": "product_intro", "label": "產品介紹" },
{ "id": "social_ad", "label": "社群廣告" },
{ "id": "__other__", "label": "其他" }
]
},
{
"id": "elements",
"label": "它應包含哪些內容?(可複選)",
"type": "multi",
"options": [
{ "id": "broll", "label": "B-roll" },
{ "id": "logo", "label": "品牌標誌" },
{ "id": "__other__", "label": "其他" }
]
}
]
}