從 AI 自動生成影片的分鏡內容開始
我們來看一個短影片的 JSON 分鏡,預計規劃會生成的文字/聲音:
[seg-1] title_card 3s ✅ (confidence=0.44)
文字: 未來已來
[seg-2] photo 3s ⚠️ NEEDS REVIEW (confidence=0.77)
文字: Google ADK 讓開發者只需三行程式碼,就能定義一個具備完整推理、規劃與工具呼叫能力、可對接任意企業系統的生產級自主代理
[seg-3] video_clip 8s ✅ (confidence=0.45)
文字: 一行指令,Agent 自動完成程式碼生成、測試與部署
[seg-4] credits 2s ✅ (confidence=0.57)
文字: 非官方技術示範
這是一支 20 秒內短影片的分鏡規格:四個片段,分別標註了類型、秒數、文字。
這 4 段是照 repo 裡 `adk_demo/main.py` 的預設 prompt 手動寫的示範 JSON——手上沒有 Gemini API key,沒辦法真的讓 ADK 跑一次;真正測試過的是 Jev 那一步,這四個 `confidence` 數字都
打真實 API 拿到的結果。下一Day 2 會有第一次真的端到端跑出來的版本。
但你自己唸一次 seg-2 那句文字,配上 3 秒鐘的照片:人一判斷就知道一定是唸不完。
而 Schema 檢查時,並不會發現這件事。這篇文章、以及接下來這整個系列要處理的東西,就是這個落差:如何用 AI 本身建構出比 Schema 更嚴格的防護網。
這一篇我們就把這四個片段直接呼叫 gemini-omni-1.1-flash 生成、串接成一支完整影片,看看會是什麼下場:
播到第二段時,你會知道,句子講到一半時,畫面就切走了。
為什麼不直接呼叫 Gemini API 就好
如果「叫模型產生一份符合 schema 的 JSON」,其實 google-adk 就不是必要的工具。你可以使用原生的 google-genai SDK,直接呼叫 gemini-3.1-pro、並且使用 `responseschema`,也能達到一樣效果:
from google import genai
client = genai.Client()
response = client.models.generate_content(
model=”gemini-3.1-pro-preview”,
contents=prompt,
config={”response_schema”: VideoTimeline, “response_mime_type”: “application/json”},
)
timeline = VideoTimeline.model_validate_json(response.text)ADK 真正有價值的應用場景是:讓 Agent 自己知道它可能錯了
ADK 的價值不在「產生一份 JSON」,是透過編排 (Orchestration),讓 Agent 可以透過工具/Agent tool,感知回傳的結果、並根據結果調整自己下一步要做什麼。
我們試著把這幾天正在熱門討論的 Jev- https://typesafe.ai 建構的檢查工具,包成 ADK tool,並掛載到 `director_agent` 身上,然後自我檢查:
from google.adk.agents import Agent
from google.adk.tools import FunctionTool
from common.jev_client import check_segment
from common.schemas import VideoTimeline
check_segment_tool = FunctionTool(check_segment)
director_agent = Agent(
name=”director_agent”,
model=”gemini-3.1-pro-preview”,
instruction=(
“你是一位專業的短影音剪輯師。規劃 video timeline 後,”
“對每一個片段呼叫 check_segment 自我檢查;”
“任何被標記 needs_review 的片段,重新生成該片段的 caption,”
“確保跟 duration_sec 合理對齊,最多重試兩次。”
),
tools=[check_segment_tool],
output_schema=VideoTimeline,
)這裡將 Jev 呼叫包裝成 ADK tool ,提供給 Agent 用來作自我檢查的工具。透過這種方式,ADK 的 Agent 不只能產生一份 JSON,還能感知工具回傳的結果、並根據結果調整自己下一步要做什麼。
tool-calling 版本目前還在實作中,這次就用外部呼叫版本,可以參考(common/jev_client.check_segment)示範如何使用 Jev
ADK: output_schema!=response_schema
這次為了下一篇文章,裝的 google-adk 版本是 2.7.0,這邊順便紀錄一個測試時發現的: 呼叫 API 時,用 `output_schema`,不是 `response_schema`。
這是官網寫法:
from google.adk.agents import Agent
from common.schemas import VideoTimeline
agent = Agent(
name=”agent”,
model=”model”,
instruction=”“,
response_schema=VideoTimeline,
)請改寫成
from google.adk.agents import Agent
from common.schemas import VideoTimeline
agent = Agent(
name=”agent”,
model=”model”,
instruction=”“,
output_schema=VideoTimeline,
)Jev 怎麼判斷排定的分鏡文字內容「塞不塞得下」預定的影片長度
可以參考 repo 裡面, `check_segment` 把片段秒數跟文字丟給 Jev透`noul`(是非題)來問
from typesafe_sdk import Noul, TypeSafeClient
def check_segment(segment_id: str, duration_sec: float, caption: str | None) -> dict:
if not caption:
return {”needs_review”: False, “confidence”: 0.0}
state = f”片段 {segment_id}:標註時長 {duration_sec} 秒,畫面文字/旁白「{caption}」”
with TypeSafeClient() as client:
response = client.system_one(
state=state,
questions={
“duration_caption_mismatch”: Noul(
instructions=(
“以正常中文語速估算,讀完/唸完這段文字所需時間,”
“是否明顯超過或短於標註的秒數(誤差超過約 30%)?”
)
)
},
model=”jev-latest”,
)
answer = response.answers[”duration_caption_mismatch”]
return {”needs_review”: answer.noul > 0.6, “confidence”: answer.noul}回傳的 `noul` 是一個 0-1 的機率值,不是 Transformer LLM 隨口回答「我覺得 80% 像」,TypeSafe 會把這個機率值訓練到讓它本身就是校準(calibration):模型說 70% 的時候,長期而言就是有 70% 是對的。這跟一般 LLM 用 `logprobs` 反推信心值不一樣,`logprobs` 反映的是「這個 token 有多常見」,不是「這個判斷有可信」。
開頭那組真實輸出裡,`seg-2` 拿到 `confidence=0.77`,超過 0.6 的門檻被標記;其他三個都在門檻以下、判定正常。
拿我自己開發的影片自動轉字幕工具 LeapieVideo,當作驗證參考
剛剛使用 Jev 回傳 `seg-2` 有問題,但「有問題」到底有?我把剛剛那支合成影片丟進我自另一個專案 LeapieVideo 實際轉字幕:
{”start”: 2.9, “end”: 4.376, “text”: “Google ADK”},
{”start”: 4.376, “end”: 5.557, “text”: “讓開發者只需三行”},
{”start”: 5.557, “end”: 6.557, “text”: “程式碼”},
{”start”: 6.557, “end”: 8.368, “text”: “一鍵智慧 一鍵執行”}`seg-2` 對應的時間軸只到 6.557 秒。實際生出來的影片裡,旁白只唸到「讓開發者只需三式碼」就被切掉。
Day1 心得
這邊是系列文的第一篇,重點是機制本身:`VideoTimeline` schema,加上用 Jev 評判是否需要重新生成分鏡片段,以及 ADK 評估自身回答是否如預期。
明天會將同樣的 schema 跟 `check_segment`,原封不動改用 Microsoft Agent Framework 重做一次。
---



