大家好!歡迎來到「Build on Google AI」工程挑戰的第 22 天。
(沒錯,大家期待的安全授權機制又被插隊了!因為在實務場景中,當 RD Agent 把精美的影片分鏡表交出來後,行銷部 (Marketing) 的主管立刻衝進戰情室大喊:「腳本很棒,但誰來寫宣傳文案?沒有爆款鉤子,這支影片根本沒人看!」)
這就是真實的企業級產品流水線。今天,我們要將工作流向外延伸,透過 Google ADK 引入一位新同事:行銷 Agent (Marketing Agent)。
在行銷領域中,社群貼文的前三行決定了生死,這被稱為「鉤子 (Hook)」。如果我們只是寫個簡單的 Prompt 叫 AI「幫我寫篇 FB 貼文」,它通常會給你充滿 Hashtag 和冗長無趣的官腔文案。
今天,我們要用「軟體工程」的方法,將行銷學的「Hook -> Body -> CTA」框架,寫死在系統的底層結構裡!
第一步:定義「高轉換率」的文案資料結構
在行銷自動化中,我們不僅需要純文字,我們需要系統將標題、鉤子、內文與 Hashtag 完全拆分。這樣前端工程師才能將鉤子放大加粗、將 CTA 做成可點擊的按鈕。
我們繼續運用 Pydantic 的強型別魔法:
from pydantic import BaseModel, Field
from typing import List
# 定義單一平台的貼文結構
class SocialMediaPost(BaseModel):
platform: str = Field(description="目標平台,如 Facebook, Instagram, Threads")
hook: str = Field(description="爆款鉤子 (Hook):限 2 句話,必須製造懸念、痛點共鳴或反常識,吸引讀者停下手指")
body: str = Field(description="內文主體:根據影片內容提供價值,語氣需符合該平台調性")
call_to_action: str = Field(description="行動呼籲 (CTA):明確指示讀者下一步該做什麼,如點擊連結、留言")
hashtags: List[str] = Field(description="3-5 個高流量標籤")
# 定義完整的行銷活動包
class MarketingCampaign(BaseModel):
campaign_name: str = Field(description="行銷活動內部代號")
posts: List[SocialMediaPost] = Field(description="針對不同平台生成的貼文陣列")
第二步:打造千萬流量的行銷 Agent
有了骨架,我們需要為 Agent 注入靈魂(Persona)。在 ADK 中,給予 Agent 具體的身分設定與極度明確的規則約束,是產出高品質文案的關鍵。
from google.adk import Agent
# 初始化行銷 Agent
marketing_agent = Agent(
name="marketing_agent",
model="gemini-2.5-pro", # 創意發想與精準的受眾心理揣摩需要 Pro 級別
instruction=(
"你是一位曾操盤過多個千萬級流量產品的資深社群行銷總監。"
"你的任務是根據收到的『影片企劃或分鏡表』,為不同社群平台撰寫宣傳文案。\n"
"【重要守則】:\n"
"1. Threads 的受眾喜歡簡短、真實、甚至帶點碎碎念的隨性風格。\n"
"2. Facebook 適合完整的痛點故事鋪陳。\n"
"3. Instagram 需要重視視覺與排版,大量使用 Emoji。\n"
"絕不允許寫出『歡迎來到我的貼文』這種廢話,開頭的 Hook 必須一擊斃命!"
),
response_schema=MarketingCampaign # 強制以我們定義的格式輸出
)
第三步:實戰程式碼:從企劃到文案的完美交接
現在,我們把前幾天產出的「短影音企劃書」直接餵給這位行銷 Agent。
import logging
from tenacity import retry, wait_exponential, stop_after_attempt
from google.api_core.exceptions import ResourceExhausted
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@retry(retry=retry_if_exception_type(ResourceExhausted), wait=wait_exponential(multiplier=2, max=30), stop=stop_after_attempt(5))
def safe_marketing_invoke(prompt: str):
return marketing_agent.invoke(prompt)
if __name__ == "__main__":
# 這是前幾天 RD / Director Agent 產出的企劃內容 (模擬輸入)
video_storyboard_content = """
影片標題:Google ADK 解決 JSON 報錯的終極救星
總時長:15秒
分鏡 1:工程師看著螢幕崩潰抓頭髮,畫面上滿滿的 JSON 解析錯誤紅字。(3秒)
分鏡 2:一個發光的 Google ADK Logo 降臨,自動把亂碼變成整齊的 Python Pydantic 物件。(5秒)
分鏡 3:工程師準時下班,喝著咖啡看夕陽。旁白:「別再用 Regex 修 JSON 了,ADK 結構化輸出讓你準時下班。」(7秒)
"""
print("🚀 行銷 Agent 啟動!正在針對各大平台產出專屬文案...\n")
# 組合 Prompt,交接任務
task_prompt = f"請為以下即將上線的短影音企劃,產出 Facebook, Instagram 與 Threads 的宣傳文案:\n\n{video_storyboard_content}"
try:
campaign_result = safe_marketing_invoke(task_prompt)
print(f"🔥 行銷活動代號:【{campaign_result.campaign_name}】\n" + "="*40)
# 遍歷不同平台的貼文,直接提取獨立的 Hook 與 CTA
for post in campaign_result.posts:
print(f"\n📱 平台:{post.platform}")
print(f"🪝 鉤子 (Hook) ➡️ {post.hook}")
print(f"📝 內文 ➡️ {post.body}")
print(f"🎯 CTA ➡️ {post.call_to_action}")
print(f"🏷️ 標籤 ➡️ {' '.join(['#'+t for t in post.hashtags])}")
print("-" * 40)
except Exception as e:
logger.error(f"行銷文案生成失敗: {e}")
驚人的執行成果
當你執行這段程式碼時,你會發現強型別控制與精準 Prompt 帶來的魔力:
Threads 平台的 Hook: 「工程師們說實話,這禮拜你們被 JSON Decode Error 搞死幾次了?」
Facebook 平台的 Hook: 「還在用 Regex 暴力破解 LLM 的輸出格式?別傻了,這招只會讓你加班到天亮。」
這就是企業級的 AI 自動化!行銷 Agent 不是只給你一坨文字,而是精準地把「鉤子」、「內文」與「按鈕文字」全部切分好,完美契合現代行銷系統的需求。

小結
今天,我們透過 ADK 的結構化輸出,成功賦予了 Agent「行銷腦」,讓它能寫出懂人心、具備高轉換率的文案。