KeyFrame內部研究專用

How to build an AI Agent and MCP Server (step-by-step)

Google Cloud Tech·6月18日週四·7 min英文

三句話摘要

示範如何透過 MCP(Model Context Protocol)將 ADK 部落格撰寫 Agent 連接到 Google Trends 外部工具,讓 Agent 具備即時資料查詢能力。 MCP 讓 Agent 以標準、隔離、語言無關的方式連接任意外部工具,而 ADK 的 `FunctionTool` 讓接入成本降到幾乎只需撰寫一個普通 Python 函式。 MCP 是工具與 Agent 之間的標準協議:Agent 本身無法直接執行外部查詢,MCP 作為中間層,讓工具以獨立 Process 運行,Agent 透過 stdio 詢問「有哪些工具」再呼叫,結果以 JSON 回傳,雙方完全解耦。

重點整理

重點
  • 1

    MCP 是工具與 Agent 之間的標準協議:Agent 本身無法直接執行外部查詢,MCP 作為中間層,讓工具以獨立 Process 運行,Agent 透過 stdio 詢問「有哪些工具」再呼叫,結果以 JSON 回傳,雙方完全解耦。

  • 2

    隔離性與互通性是 MCP 的核心優勢:工具可以用 Python、Go 或 Node.js 撰寫,Agent 不需知道實作細節;工具崩潰不會拖垮 Agent,且工具可隨時新增、替換或版本化,無需改寫 Agent 主程式碼。

  • 3

    ADK FunctionTool 自動化 Schema 生成:只需撰寫標準 Python 函式並加上 Docstring,ADK 的 `FunctionTool` 裝飾器會自動解析 Signature,產生符合 MCP 規範的工具 Schema,省去手動定義模型的步驟。

  • 4

    整合只需在 Agent.py 新增一個工具參考:從 Agent 的角度,呼叫 MCP 工具與呼叫本地函式完全相同,只需將 `trends_mcp` 加入 Root Agent 的工具清單,Agent 即可在撰寫部落格時自動查詢當前 Google Trends 趨勢。

實用技巧與重點

乾貨
  • 協議名稱:MCP(Model Context Protocol)
  • 框架:ADK(Agent Development Kit)
  • 工具:Google Trends(透過 MCP 串接)
  • 通訊方式:stdio(標準輸入輸出),非 HTTP
  • 結果格式:JSON
  • 核心檔案:`server.py`(MCP Server)、`Agent.py`(Root Agent)
  • 關鍵 ADK 類別:`FunctionTool`、`adk_mcp_tool`(將 ADK meta data 轉換為 MCP Tool Schema)
  • 兩個必要 Handler:`list_tools`(回傳工具清單與 Schema)、`call_tool`(執行工具並回傳結果)
  • 錯誤處理:呼叫失敗時回傳 JSON 格式錯誤訊息,並將詳細內容輸出至 stderr
  • 啟動方式:主程式呼叫 `asyncio.run()`,ADK 可直接開啟該 Process 並使用工具
  • UI:ADK Web UI 可視化測試 Agent 與 MCP Server 的連線

結論

結論

MCP 讓 Agent 以標準、隔離、語言無關的方式連接任意外部工具,而 ADK 的 `FunctionTool` 讓接入成本降到幾乎只需撰寫一個普通 Python 函式。

完整解析

詳細

這部影片的核心問題是:一個純靠語言模型運作的 Agent,雖然能根據主題規劃並撰寫部落格文章,但它不知道外部世界正在發生什麼。為了讓文章更貼近當下,講者決定將 Agent 連接到 Google Trends 的即時資料,而連接的橋樑就是 MCP——Model Context Protocol。

MCP 的概念其實很直觀。Agent(大腦)無法直接執行查詢 Trends 資料庫這類操作,因此需要一個標準化的中介層。MCP 讓外部工具以獨立 Process 的形式運行,透過 stdio 與 Agent 溝通:Agent 先問「你有哪些工具?」,工具回傳名稱、參數與回傳型別的 Schema;Agent 再說「用這些參數呼叫這個工具」,工具執行後以 JSON 回傳結果。整個設計的精髓在於隔離——工具用什麼語言撰寫、用了什麼 Library 都無所謂,只要遵守 MCP 協議即可;工具崩潰也不會影響 Agent 主程式,且工具可隨時新增或替換,不須重寫 Agent。

實作層面,講者在專案中建立 `server.py`,撰寫一個標準 Python 函式 `trends`,接收 JSON 格式的語言參數並回傳 JSON。接著用 ADK 的 `FunctionTool` 包裝這個函式——ADK 會自動讀取函式的 Signature 與 Docstring,產生完整的工具 Schema,無需手動定義模型。MCP Server 物件作為工具與 Agent 之間的小型中介,實作兩個關鍵 Handler:`list_tools` 在 Agent 連線時回傳工具清單(透過 `adk_mcp_tool` helper 將 ADK meta data 轉換為 MCP 格式),`call_tool` 則驗證工具名稱後直接呼叫 `FunctionTool` 的 `run_async` 方法,成功時回傳 JSON 文字內容,失敗時回傳結構化錯誤訊息並將詳細資訊輸出至 stderr。最後以 `asyncio.run()` 啟動整個服務。

完成 Server 端後,Agent.py 的改動極為精簡:只需在 Root Agent 的工具清單中加入 `trends_mcp`。從 Agent 的角度,呼叫這個 MCP 工具與呼叫本地函式沒有任何差異,但背後卻已串接到真實的外部資料流。開啟 ADK Web UI 後,Agent 便能在撰寫文章前先查詢當前 Google Trends,讓部落格內容錨定在真實趨勢上。

關鍵時刻

Pipeline v2

帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。

事實查核

Pipeline v2

說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

更多「AI 技術」的內容

🔬“We have foundation models for language, not for physics” — Anima Anandkumar, Bren Professor of Computing
編輯精選
83 min
AI 技術英文PODCAST8月26日

🔬“We have foundation models for language, not for physics” — Anima Anandkumar, Bren Professor of Computing

Latent Space

  • 加速傳統物理模擬的典範轉移:氣象科學家原本認為 AI 無法匹敵數十年的物理建模工作,但傅里葉神經算子不僅達到同等精度,還快了一萬多倍。原本需要超級計算機的計算現在用消費級 GPU 就能完成,這改變了整個領域的思維方式。
  • 傅里葉域的非局部現象捕捉:傅里葉域能有效表示非局部現象(如大氣河流跨越千里的影響),且計算複雜度為準線性,遠優於完全連接的全局模型。這特別適合流體動力學、量子化學等自然現象中普遍存在的非局部相互作用。
  • 多解析度連續函數表示:神經算子將輸入輸出視為連續函數而非固定維度向量,可在推論時以任意解析度查詢,並能在更高解析度上疊加物理約束或額外數據,克服了固定解析度神經網路的限制。
Between Two Nerds: Attribution is dead, long live attribution
32 min
AI 技術英文PODCAST8月25日

Between Two Nerds: Attribution is dead, long live attribution

Risky Business

  • 工具成本的破壞性下降 — 傳統上,攻擊者必須重複使用昂貴自製的惡意軟體或工具組,因為開發和維護成本極高。這種成本結構使得安全研究人員可以通過工具特徵和程式碼簽名來追蹤攻擊者。LLM 自動化了代碼生成與維護工作流,使得攻擊者可以輕易為每個目標生成新工具,或改用通用系統工具,導致傳統的工具特徵分析失效。
  • 所有取證證據都在攻擊者掌控之中 — 無論是使用的 IP 位址、惡意軟體類型或戰術流程,這些都是攻擊者的主動選擇。即使看似是隨機巧合,攻擊者仍有能力在事前決定留下什麼痕跡。因此,所有可恢復的取證證據本質上都是攻擊者願意暴露的信息。
  • LLM 削弱工具簽名但保留高階行為特徵 — LLM 經過公開駭客技術訓練,使不同使用者產生相似的攻擊模式。然而,勒索軟體集團、國家級行為者的受害者選擇、贖金要求方式或目標模式等高階特徵仍具有識別價值。例如,鎖定加密交易所的攻擊幾乎只能指向朝鮮。
Why the Next AI Breakthrough May Come from Physics with Max Welling - #774
55 min
AI 技術英文PODCAST8月25日

Why the Next AI Breakthrough May Come from Physics with Max Welling - #774

TWIML AI

  • 多層篩選的材料設計流程:先搜尋文獻資料庫找現有材料,若無合適的就用生成模型產生數十萬個候選分子,用機器學習力場進行分子動力學模擬篩選,再進行實驗驗證。這套流程相比傳統量子力學計算能加速效率數個數量級。
  • 生成AI與熱力學的數學等價性:資訊論是兩個領域的共同基礎,生成模型的擴散過程與非平衡統計力學描述資訊損失的過程在數學上完全對應,許多開發出來的方法工具在兩領域都有精確對應的形式。
  • 基礎模型的遷移學習策略:先在廣泛材料資料集上訓練基礎力場表示,再針對特定材料類別進行蒸餾微調,既能保持計算效率也能獲得專一性。