Hello World Dev Conference
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Write
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Help
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Write
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    --- GA: UA-34467841-15 --- # AI 驅動的智能代理測試實踐:Google ADK與 MCP 整合 - Chris Yeh ###### tags: `HelloWorld2025` `HWDC2025` `2025` `F 會議室` `持續整合和持續部署` <blockquote> 傳統測試流程碎片且成本高,難以滿足快速迭代。講題將帶領開發者深入 Model Context Protocol (MCP) 與 Google Agent Development Kit (ADK),示範如何結合 Gemini LLM 架構出「多代理 + 測試案例」一體化流程。我們自研五大指令—— /cases (場景生成)、/codes (POM 代碼生成)、/test (端到端執行)、/comparing (版本差異分析)、/images (視覺回歸)——對應測試設計的五大痛點,將測試策略、代碼產出與執行結果緊密串接。議程將展示 Orchestrator Agent 調度子代理、共享 session.state、Callback 實作失敗重試,以及一鍵部署至 Vertex AI Agent Engine 與 Cloud Run 的流程。參與者可學會將 AI 代理融入 CI/CD,將測試案例開發、維護與報告整合成可觀測、可持續的自動化閉環,大幅提升整體測試設計效率。 聽眾收穫: 1.深入了解 MCP:從協議定位、資料流到 LLM 介接流程,全盤掌握標準化串接要點 2.精通 ADK:熟悉 Google Agent ADK 元件組合,快速落地多元業務情境 3.善用 Gemini 與其他 LLM:比較、評估模型優劣,挑選合適生成結果的設計方案 4.掌握五大測試情境:/cases /codes /test /comparing /images 一站式解決需求、代碼、執行、差異、視覺五大痛點 5.Multi-Agent 溝通設計模式:以代理微服務思維打造 Orchestrator 與子代理協作框架,彈性共享狀態與任務 6.一鍵雲端部署:將代理發布至 Vertex AI Agent Engine 或 Cloud Run,無縫接軌 CI/CD 管線 </blockquote> {%hackmd @HWDC/announcement-2025 %} ## 會議資訊 **時間:** 16:45 ~ 17:30 **地點:** F 會議室 **日期:** 2025年10月15日 **語言:** 中文 **難度:** 中階 **相關連結:** - [Hello World Dev Conference 2025 官方網站](https://hwdc.ithome.com.tw/2025) [target=_blank] - [Hello World 2025 議程表](https://hwdc.ithome.com.tw/2025/agenda) [target=_blank] ## 筆記區 ### 前情提要 開發者的共同夢魘: - 模糊的需求 - 無盡的測試 - 脆弱的程式碼 溝通與信任的鴻溝 #### AI Agent 的優勢 - 永不疲倦 ~~(精力絕倫)~~ - 精通多國語言 - 記憶力超群 ~~(只是有時候會錯亂)~~ - 善於溝通 ~~You're absolutely right!~~ 三大核心 - 標準化的溝通基石(MCP) - 專業的 AI 代理軍團 (ADK & A2A) - ### MCP 解密 wiki: https://zh.wikipedia.org/zh-tw/%E6%A8%A1%E5%9E%8B%E4%B8%8A%E4%B8%8B%E6%96%87%E5%8D%8F%E8%AE%AE 定義: - 標準化訊息格式 - 上下文共享機制 - 增強互操作性 - 提升開發效率 ```mermaid flowchart LR %% === Core title === CORE([核心架構總覽<br/>MCP Core]) %% === Subgraph: 核心成員 === subgraph G1[ MCP 主要核心成員 ] HOST[MCP 管理員 Host] CLIENT[MCP 用戶端 Client] SERVER[MCP 伺服器 Server] end %% === Subgraph: 資料來源 === subgraph G2[ 資料來源 / Services ] LOCAL[本地資料來源<br/>Local Sources] REMOTE[遠端資料服務<br/>Remote Services] end %% === Relationships === CORE --- G1 CORE --- G2 %% Host governs registry/coordination HOST -->|管理/註冊| SERVER HOST -->|政策/權限| CLIENT %% Client-Server over MCP CLIENT <--> |MCP 協議/請求-回應| SERVER %% Server to data SERVER <--> |讀寫/查詢| LOCAL SERVER <--> |API/Connector| REMOTE ``` ~~山也要 MCP,海也要 MCP~~ --- 測試模擬 (有示範影片) 1. 測試初始化 2. 測試執行 3. 結果驗證 --- 為何一個 MCP 遠遠不夠? - 測試場景的多元性 - 專屬智能代理的需求 - 情境感知與記憶 - 工具與環境的整合 --- ### Google ADK - Agent framework 主要元件 - Agent - Tool - #### Agent - 工作流程代理 - 多代理系統 - 自訂代理 #### Tool - 函式工具 - 長時間任務工具 - 代理作為工具 - 內建與第三方工具 #### Session & Memory - Session: 短期記憶 - Memory: 長期記憶 #### Callback 應用場景 - 日誌記錄 - 安全檢查 - 動態控制 #### Runtime ADK runtime 採 event-driven loop - Runner接收輸入 - 代理執行邏輯 - Runner處理事件 - 代理恢復執行 ### Google ADK MCP 整合 1. ADK 作為 MCP Client 2. ADK 作為 MCP Server 部署 建議部署 Agent 到 Cloud Run - 使用 ADK CLI (建議 python) - 使用 gcloud CLI (高度彈性) - 可以透過 docker 建立不同 mcp 需要的環境. ### AI 賦能應用的五大 AI 測試應用剖析 1. 測試案例創建 2. 端到端測試 3. 測試程式碼生成 - 可使用 POM 模式做抽象化 4. 程式碼比較與分析 5. 圖像視覺比對 Multi agent team 1. 定義 2. 實現 3. 執行 4. 審核 5. ### 總結與下一步方向 - 標準化(MCP) - 結構化(ADK) - AI 賦能測試平台設計 - ADK Agent 與 MCP 無縫整合 這不僅是關於工具 更是關於思維的轉變 **命令式開發 => 意圖驅動開發** ## 討論區 > 歡迎在此進行討論與 Q&A https://hackmd.io/@HWDC/2025/%2FBJR2n55jge#%E8%A8%8E%E8%AB%96%E5%8D%80 ## 相關資源 - 投影片連結:(待講者提供) - 相關文件:(待更新) ## 逐字稿 關於AI的主題,我相信這兩天或甚至是之前的研討會,大家應該都聽過蠻多的。過去這一兩年,包含整合測試這一塊其實有蠻多著墨,包含之前在Cloud Submit裡面有分享關於Playwright跟Azure DevOps整個完整生態系的結合。 那其實大家知道,其實以現在的角度,或是說以現在的需求來講的話,我們都會想說,那我們要如何透過AI去驅動所謂的整個測試,那甚至是說我們講AI覆能、AI覆能,那其實測試啊,我們也是希望是說可以解決這樣一個痛點。 好,那這邊就是說明一下,就是我們在這個主題裡面,主要會分成六大項,包含前提要的部分,就是大概講一下整個背景,那接下來的話,第二部分會介紹所謂的 MCP 的部分,那第三個部分的話,就是會包含就是現在今年才剛推出的,就是 Word APK 的部分,那也會做一個說明,那第四個部分,就是說,我們如何透過這樣一個整合,然後來應用到我們可以想像得到的一個測試情境, 然後我們來複習說,我們能夠如何應用。那第五個部分就是,當我們整合起來的時候,我們有沒有機會,比如說像我們知道啊,Google ADK 包含它後來發布,然後捐獻給 Linus Foundation 的那個 A2A 的協定,那我們如何透過一個 共同夢也,或是說,嗯,應該這樣講好了,就是為什麼我們會有這樣的一個需求,其實大家看第一個項目,就是所謂模糊的需求這件事情,大家可能會想像的是說,哎,其實好像我們現在在做web coding,好像也該,嗯。 現在目前,不管是Bytecode或是過去所承接的需求,可能就是一句話,一直以來我們可能要去除外,或甚至要去收集更多。現在目前的話,我們可能可以透過一些不同的方式來做。第二部分的話,我相信有很多團隊也都很不想面對的,就是 我們必須要做很多測試,那不管是基本的Unitest到Integration甚至到End-to-End,尤其是到End-to-End的時候,大家都會選擇,要嘛就是所謂的Regression,它就是一個,嗯,對,沒錯,可能我要求你 可能你改了一些future,那你就是要測那300個,那人工測,然後,好,也不知道到底有測還是沒測,甚至你可能會發現,呃,人工測的時候可能,欸,你只會發現他測的那個圖片。 如果不小心漏線的話,好像是上一版的日期。最後的話就是最弱的程式碼。其實說真的,我們整個需求定義的時候,很容易就是比如說有一些程式碼,它可能很多的 else 或是什麼的,那就寫死了。很有可能當我們比較大需求改動的時候,那我們也沒有辦法去... 有效的去做一個擴散,那說真的,其實這些部分啊,不只是流程的問題,那可能可能就是我們可能在溝通啊,或是說在整個性能上也會產生更大的裂痕,因為因為失敗了嘛,然後被不管是被user或者是被其他人question,那其實都會蠻少的。 那就是因為這樣的原因,所以我們可以想像一下,如果說我們開發團隊多了一個成員,對,那這樣子的一個成員,他是可以24X7,他是可以理解那需求,然後去生成,包含測試IDR,然後讓你的產品可以維持一個比較好的一個狀態。那另外的話, 那這是第一點吧,那第二點的話就是說,欸,我們這樣子的一個成員,他能不能夠精通,比如說,他也可以理解不同的程式語言,甚至說,欸,我們今天,就像我們基本的,我們的提問可能是,我們過去可能一定要英文,或是什麼樣,可是現在目前,原則上LM都完全看得懂中文嘛,所以,他就是可以透過這樣一個方式看得懂我們想要他講的東西。 要做的事情,以他能夠去完成,那我們可以指引他到對的方向,去做對的事。第三個部分就是,我們有沒有機會是,當我們所實現的這些事情的時候,我們可以存在特定的位置,甚至是我們可以讓它是一個,我們講的,現在俗稱的,它是一個Memory,或是說它就是一個Context。 這樣的一個記憶,它可以讓它就是overall,你可以去有點像是變成是說我們在iterator的過程中,它能夠是一個規範,那當以後它要去幫你做這些事情的時候,它能夠去follow這樣一個規範去做。 最後就是,這樣的一個模式,我們是不是可以再結合,比如說我們的一些平台啊,像剛剛我們有提到的HUD BIOS的整個CID的整個Platform,然後去讓它完整的一個搭配AI幫我們參考的產生的一個Test Report或是什麼樣的方式,然後讓我們可以有效的去delivery這樣子的一個產出, 這就是我們所提到的三大核心主題,第一個主題就是SCP,第二個主題就是所謂A-A,我們會延伸到所謂ATK,我們會延伸到所謂A-A這樣的一個協定。 在AI的上方技術設備的應用下, 實現測試場景的應用。 我相信MGP大家應該都很清楚了,算是從去年11月開始,比較火的應該是從今年2、3月吧,就是開始比較火,它是從Cursor那邊出來的,我最早研究也是透過Cursor的方式,然後去用這樣一個Parameter去引導它。 MGP是一個標準的訊息協定,希望透過開放與標準的溝通協定,實現AI的帶領與合作。 這條語音備忘錄,已進行編輯以加入正確的標點符號。 在編輯過程中,您將在編輯過程中獲得更多的資訊,並且將更多的資訊提供給更多的使用者。 現在目前可能一些需求它跑出來的那個整個配置,然後還有相關的html、css,對,那這些mcp啊,其實它就有辦法去幫我們去去做到相對應的,比如說我們的一些data context的,或是說我們AI想要接下來要生成的一些context的一些比較有效的整理齁。 另外,在整個NCP裡面,我們想要強調的是說,它整體的開發效率會提升。那為什麼會提升呢?其實,像剛剛所提到的, 我們今天如果透過MCP的模式,比如說像包含像我們之前也用一些Git的MCP啊,或者說像剛剛所提到的Notion、Bigma,那其實我們都可以overload將它整合起來,變成是一個整套的一個機制,那可能如果說我今天是這樣子的一個模式是在比如說在IDE裡面,我去整合很多不同的template,我也可以透過 最底層,比如說像File System的MCP,然後讓它去針對我在Local在你的File Store之內去做整個CRUD,就是檔案的CRUD,然後來完成我整個Overall在第一端去JCode這樣一個開發。 提到另外一邊,除了剛剛講到尊養來源以外,其實MTP主要會有三個部分。大概介紹一下,比如說像host是什麼? 這條語音備忘錄,已進行編輯以加入正確的標點符號。 這時候,當客戶收到這個資訊時,他會對他的MCP有一個協定檔,可能是一個MCP的Addressor,然後這時候他就會去看他定義的MCP的Server。不管是透過Docker寫下來的,或是SSE的,他就會透過這樣一個方式去寫。 使用自然語言的方式對應到MTTS服務,並透過該服務中描述的一些Tool Functions,正確地使用,執行某些任務,最後返回到LLM。 這邊我們會舉一個LM跟MCP之間的溝通,我們這邊是以Playwright MCP為例。大家可以想像,我們今天從最底層這邊,就是 NLM 模型當收到這樣一個訊息的時候,它就能夠辨識說, 它到底要 call 誰的 MCP 的 Client。這時候 MCP 的 Client 它就會透過一個類似像就是 RPC 這樣的一個協定的方式, 然後再去導到我們的 Perlite 的 MCP。那 Perlite 的 MCP 這邊你可以想像它就是我們的 server。 這就是MTP的server,然後這時候,我們今天下的prerun的指令是go to到某個browser,那等一下我們會有一些,會有一個影片。 這時候它就會自動的到我們的 Browser 裡面去做這相關的操作,然後再回來到我們的 MCP 的 Server,然後再將這樣子的一個資料回回來,然後最後到 MCP 的 Client,然後再回到 LLM,再做最後一層的一個 LLM 的大模型,它會幫這個結果再做最後的一個包裝。 對,所以原則上啊,其實整個 MCP 的操作過程大概就會是長得像這個樣子,那也會因為這樣子的一個原因,那讓我們的 LLM 可以透過 這就是一條語音備忘錄,已進行編輯以加入正確的標點符號。 這個東西其實是我最早所去想像跟實現的一個事情,這個部分它也是一樣以測試為例,其實它主要會有兩個情境,第一個情境就是測試案例的一個撰寫,第二個情境就是所謂測試程式碼的一個生成。 因應時間關係,我大概跟大家介紹一下,以第一個情境來講的話,我們可以想像有很多的測試案例,可能像過去都會生涯在CL上面,或者是說我們會有一些MD啊,甚至會有一些TXT的一些檔案,對,那這個時候我們就可以透過 透過這樣子的一個整個流程,然後大家可以看到,到第二層的時候,我們就會去因為這樣一個Property,它就會去執行所謂,它就會引導到我們的Provide MCP,然後這時候它就會將我們的測試案例轉換成另外一種格式的一個MD檔。那當這樣一個MD檔轉完之後呢,其實我們還可以針對這樣一整個流程呢 讓他去 filter,比如說,我們的測試案例做完了嘛,那做完了之後呢,我們會希望他能夠去幫我們分辨哪一些測試案例是屬於 integration,哪一些測試案例 maybe 在 imitator 就做完,哪一些案例他是必須要到 end-to-end 的時候完成的,所以他會再跑到我們的這邊的看到就是第二層的部分。 第二層的部分完成後,會再產生另一個MD。這個MD做完了之後,原則上會到下一關。下一關這邊可能就是說,我們既然確定了哪些東西是真的要做end-to-end的,它這時候會到這邊。 再次進行編輯,使用同樣的方式來編輯MCP, 使用同樣的方式來編輯MCP,使用同樣的方式來編輯MCP, Biosystems的MCP和一些透過Swake的API,讓他去確認包含我們的DV有沒有資料,API Code正不正確,然後最後再reference到我們的Biosystems的資料。 測試報告的一個Tablet,最後才產生我們的測試案例的Overall結果。 這條語音備忘錄,已進行編輯以加入正確的標點符號。 這就是我們想要的測試範例的格式。第二個部分,我這邊就比較不詳述,這個部分的話,其實是我希望我上面做的模擬完成可行的過程,做完之後,我可以去套用,比如說像我,因為像我剛剛前前有提到,就是我們有整個Bluelight的一個完整的 測試框架的一個repo那這個部分的話,就會去搭配我們上面所講出來的一些測試案例他會去將我這樣一個repo當context去產生我想要的整個playline的一個測試框架的一個整個完整 這件事情有什麼騷擾,因為你可能,說真的,其實以AI現在目前來看的話,如果我們大家其實有在用AI都會知道,其實AI蠻像在抽獎一樣的。 可能你仔細十次,還是會錯五次,那我有些時候模型不小心選錯了,還錯三次四次,對,所以其實在這種情境之下,我們會透過第二個方式,讓他去找... 相對應的程式碼,以便後面的regression可以用。那另外的話,我們也可以透過這樣一個程式碼的長出來的程式碼,可以去遞補當下一次我們再長出來的時候,他們的差異在哪裡。 然後來判斷它們到底會不會有問題。好,那這個延伸議題也是提供給大家參考的喔。就是我今天可能是說,我的另外一個想像是,比如說我今天透過MCP這樣一個工具,比如說我做一個download這樣一個前進的時候, 這會發生什麼事情呢?網頁可能是無痕的,會有預設的狀態,可是事實上... 如果是 Pre-Write 的話,它會以 Time-Lapse Cycle 為存在它的 Graph 裡面, 然後會讓我一直找不到我下載下來的那個東西在哪裡。所以那時候我就想到說, 欸,那我有沒有機會? 我透過實現基本的pre-write框架,讓我的property用下參數的方式去填寫我這個框架的程式碼的template, 最後再引導他去執行,然後再透過 Excel 的 MCP 跟 Pre-Write去驗證我最後跑出來的這個報表裡面的結果對不對?OK,那這件事情就是可行的,而且他能夠幫你做一件事情就是如果你今天也很喜歡寫程式的話,你可以去設定很多不同的模組跟框架然後用填參數的方式去引導 AI 幫你填進去然後幫你這樣整個 Overload 的流程設計出來 也可以稱它為Reporting Service, 只是說這個Reporting Service可能叫做AI Reporting Service。那這邊的話題我給大家參考。 那這張流程圖的話,就大概像剛剛講的那樣子,那我就先不贅述了,那我們再往下一下。 請大家參考一下。 因時間的關係,讓大家稍微看一下這個MGP的工具,就像我們剛剛整理的那樣子,這件事情是模擬的一個考慮。 抱歉 它會自動的去執行我們剛剛所掛載的所有相對應的一些MPP,然後來模擬操作,包含我們initial data,我們也可以告訴它我們的資料會在哪裡,那我們讓它可以正確的填到我們想要填的位置,那最後跑出來。 這條語音備忘錄,已進行編輯以加入正確的標點符號。 這條語音備忘錄,已進行編輯以加入正確的標點符號。 參考某個Template,將它所跑出來的所有測試的結果,按照這樣一個格式去填,然後達到一個完整的結果,這樣,OK?好,那我這邊的話就先關掉,等我一下。 好的,那其實啊,剛剛那個部分啊,主要就是,如果以RUF來講的話,主要就是分成這三大部分,就是所謂我會去進行的測試的初始化,那包含initial data,包含測試怎麼樣去下這些流程,怎麼樣去模擬。那第二個部分的話,就是透過這樣一個prompting step-by-step的方式去做執行。 最後,我會包含API的驗證、DP Query的驗證、 全線購入的驗證,以及我跑出來的Tested Report的驗證格式。 好,那我們這邊就是有一個提問啦,就是大家可以想一下,好像看起來我們透過一個 IDE 跟一個 MCP 就好像可以做完 AI 輔助開發測試這件事情嗎? 其實,我說真的,其實我一開始也是這樣想,覺得說,欸,我好像這樣子就可以做了。可是說真的,其實我們有沒有思考過一件事情就是,如果說我們只單單扣 那事實上大家知道嘛,今天如果我們在一個Property下很大,甚至給他很複雜的一個指令,甚至要繞著他說,噢,你就是把我所有的事情都做完,通常那個換取是非常大的。 所以也因為這樣子的一個原因,再加上 Security, 比如說我們很單純的就是,啊我又扣 MGP,然後那就讓他跑。可是說真的,其實我們也沒有考慮過的是, 比如說有些東西,他根本就是必須...... 該語音備忘錄時,必須將生成體的東西轉換成另一種格式,才能夠轉換成 LLM 語音備忘錄。 一條語音備忘錄,已進行編輯以加入正確的標點符號。 他一直以來都會非常的suffer,那其實我覺得套用到agent這件事情,和套用到所謂AI去執行這件事情,其實也是一樣的道理。今天如果我們把所有東西全部都塞在同一個地方。 其實它是非常難回覆的。另外的話,就是包含一些比如說記憶啊,或者是說一些工作環境的整合啊,那我們有沒有機會將這樣子的一個服務 expose 出去,而不是單純只靠 IDE,那其實也會是另外一些問題。 在這種情形之下,我們就會透過Google ADK來實現它。 這條語音備忘錄,已進行編輯以加入正確的標點符號。 主要的元件是主要的核心,主要的核心是Agent,主要的核心是Tool,主要的核心是Memory,主要的核心是Tool, 進一步的說明來講的話,除了這三大部分以外啊,當然就是我們會希望我們可以在這個部分包含我們的整個Overall Context也可以放進去,那最後他可能他一些闡述Artifact是不是我們也可以deliver到其他的部分去在做運用,那其實他會有其他的一些算是延伸的一些部件的部分。 在這裡,我們主要會去講這三個部分, 包含代理、工具跟回調的部分。代理在ADK裡面,主要會有三種模式。一種就是,你就單純寫一個url page, 第二種模式就是工作流程,就有點像我們寫程式一樣。一個就是單... 然後來去做代理的編排。那另外的話,就是Tool。那其實這個Tool,大概你有想像說,Tool跟NCP會有什麼差別?那上面的東西,我就不照本身科學看。你會知道Tool,它本身... 我今天是所,它會歸類成我是在這個AI agent裡面,它本身能夠賦能,或是說它必須要比較是robust的去執行的一個所謂的function。 MCP會像是希望服務可以對接到外部,可以透過標準的程序讓服務對接到外部。 這個完整的一個整個agent的生態,或是agent的流能夠有更多其他外部功能的一些應用跟function,所以我會把它定調成是說,有點像是我們在寫一個class,然後這個class的話 這條語音備忘錄,已進行編輯以加入正確的標點符號。 也許我們今天進行一個測試,那它測試的話,它其實Google ADK 它提供在 ADK Web 上面直接執行嘛,那第二個部分的話,可能就會說,噢,我們是透過他們的 Cloud SQL,那也可以通過去間接,那第三個部分的話,它有提供一個 Vertex AI 的一個 Session,那其實透過這個方式,你可以透過傳特定 Session 的方式,讓他進去,可以幫你記得,比如說。 GCP的Solution裡面,它都有提供這樣一個東西,來方便它整個上下文的一個儲蓄。好,那剛剛有提到嘛,其實 我們知道是說,MCP可能會有什麼問題,剛剛有提到嘛,就是一件就是security的問題嘛,那其實在MOOADK裡面,它也有提供這樣子的一個概念。 這條語音備忘錄,已進行編輯以加入正確的標點符號。 總括來說,在Google ADK裡面,它會透過Runner這樣一個概念,然後去接收相對應的一些Property進來的一些Input。 然後再去執行相對應的邏輯,比如指派給相對應的agent,然後對應的一些邏輯。當他處理完的時候,我們就可以透過WireLoop的方式將他所跑回來的那個結果再收回來。那主要Runtime的話就是 通常就會用在比如說,我們今天可能建置這樣子的Google AI Edge,它是在比如說是一個API的領口式的領域之下,那我們就會用Google Edge的API這樣子領域。 剛剛有提到,雖然說我們有Tool,可是其實Tool它也沒有辦法真正解決所有的問題,那主要是什麼原因呢?最主要的原因還是會在於是說,比如說我今天 我今天建了一个Agen,但我不可能去实现Notion的API。 你说。 在使用 Edge-to-Edge 的概念的時候,我們可能就會到所謂 GKE 上面去做部署。那這邊的話主要會有兩大策略,那我這邊的話就是比較簡單的說明。就原則上我們這邊有提供怎麼樣去做這些事情的部署方法,那不外乎當然我們的權限要夠嘛,service account 要對嘛。那另外的話就是我們的整個環境變數,包含 我們要透過Versus AI,或是透過Gemini的API Token Key,也都可以。那我們會透過這樣的方法,然後將我們的API Token 備忘錄放在所謂的Security Manager裡面。 他不想要,就是說他想要去更客製化一點,比如說我們知道我們搭客GPU的時候,可能他maybe他就只有一個基本的環境嘛,可是大家想像的是,如果我今天我在做這件事情的時候,maybe我要call的mcp他是node.js的環境。 那我要怎麼做? 原則上我就會透過方法2來設計,就是所謂這邊有提到的就是高度彈性的方式我就會去執行,我就會在他的Dockerfile裡面將我比如說像Node.js的環境什麼的,我就會把它綁定進去接下來我也會把MTB相關的一些 需要的指令還有相關的應用,我會把它放在所謂的大哥 file 裡面,再來執行命令,最後再去將相對應的一些環境變數發布。 在這種情形之下,我們就能夠讓 Google ADK 本身可以在 Cloud Run 的環境裡正確執行 MCP。這是我們有採取的坑,所以其實官方是建議說用 ADK CLI,但是我覺得這個坑還蠻大的。 因為MCP根本扣不到,所以建議大家可以看一下官方的那個Dockerfile的方法,然後去把你所需要的環境或是設定,或是透過Pipeline的方式去把它迭代,讓它環境是可以fulfill你的UVX或者是說Node.js的一些環境。 設定在您的 Mac 上,並提供給大家參考。 進行編輯以加入正確的標點符號。 第一個部分就是像剛剛提到的測試案例的創建,我們知道測試案例的創建也是非常重要的一環,包含我們今天可能會去複製SA的文件,或是說相對應一些用戶的一些要求,或是說我們會通過PTT的方式去實現。 我們都可以透過一些過去的測試案例去實現,這些東西都會是我們測試案例創建的一個主要的context。我們會透過這樣一整個模式去幫他去做建立。 第二個部分就是像我們剛剛去模擬的,今天我們有沒有機會讓SA就是所謂或是QA的能源正確的在我們的ID上面模擬過整個UX的這樣一個流程,當他模擬完的時候我們會自動在 以上整個流程裡面,再去參考到我們的正確,就是參考到 maybe 我們剛剛所提到 reference 的那些 context 的程式吧,讓它長成我們想要的標準。 測試程式碼的一個框架的那個結構,對,透過這個方法,然後再搭配第三個部分,這樣把它overall的整個將整個測試的Android的UI跟UX的部分都完成。 第四個部分,就是像剛剛我們提到的痛點,就是今天我們可能在做測試的時候最累的就是regression。 其實在這個部分,我們這邊也有提出這樣一個Solution,就是今天如果說我們整個測試的框架在生成程式碼的時候,我們是以POM的角度出發的時候,事實上當下一次我們的Fusion改動,我們要再做這件事情的時候,我們可以在同一個Pattern底下讓它 在產生對應的 POM 中,POM 其實就是以一個 Page 為目標的一個 class,或是我們可以想像說 一個POM就是一個頁面,頁面可能有很多欄位,這些欄位可能就是那個form的群。這邊的很多button或是很多action的操作,可能就是... 這個頁面的一些功能所以我們可以想像像我剛剛所提到的今天我們第一次產生的時候跟第二次我們要再測試測試然後再重新產生的時候我們就可以去遞伏他他的頁面有沒有產生什麼樣的變化然後再請他出報告 請使用語音備忘錄,以進行編輯以加入正確的標點符號。 畫面的圖像部分,甚至整個框架的部分,都可以做一個Overall的測試比對。 那這邊的話就是大致的跟大家說明一下說,大概Test Case的話,要做這件事情的話,大概會有哪一些流程跟方式,讓大家可以參考一下。 使用語音備忘錄,已進行編輯以加入正確的標點符號。 第三個部分是像剛剛提到的,就是我們會透過這樣一個模擬的方式,然後再參考到正確的,我們想要讓他參考到相對應的程式,然後再去產生相對應的code。 然後來協助下一次regression的時候,它可以直接NPM run test去執行這件事。那第四個部分啊,就是我們剛剛有提到,就是以POM的角度去做出發,去將它所我們要比較的這些重點,包含了一些頁面的差異啊,或是說裡面有沒有一些 然後一步一步的將整個代碼比較的結果給產生出來。第五個部分的話,就是包含了一些圖像的比較,然後還有一些可能裡面有沒有一些色差,但我相信這個可能再更細一點,只是說可能它會比較偏Intensity的部分。那這邊就先這樣子說。 好,那我們剛剛有提到嘛,其實我們會知道的是,不管是MCE或是單純的一個Google ADK,那我們都會希望是說,就像我們現在在標榜說我們在做Microsoft的概念。 在單一服務的情況下,我們有沒有機會透過類似像Azure Microservices這樣把它整合起來? 所以,我們剛剛將這樣一個概念,就會整合出所謂這樣子的一個五大所謂的agent,包含CAS、CODE、VISION。 透過這五大代理人員,我希望在整個測試的平台下,我都能夠AI附和他,甚至我每一個代理人員之間都能夠直接溝通。所以我們就延伸了下一個我們所提到的。 在這樣一個架構的情境下,我們可以透過 A2A 的方式,讀取到 Host Agent 的資訊。這時候,Host Agent 就會知道,我們今天想要做的是什麼樣的事情。 如果這件事情是它本身的 MCP 可以完成的,那它就會去透過 MCP 的方式,像剛剛一樣,它就會去執行它完成。那如果今天這個 function 它是要 delegate 給其他的 agent 使用的,這時候它就會去找到 就有點像是Eureka的方式,就是有點像是那個Eureka就是Service Discovery的概念它會去找到我在這裡整個,我們可以想像,可以把它想像成是一個Cluster,就像一個GKE的Cluster一樣 它會去找到我現在上面有多少的agent, 每一個agent他們的agent card是什麼。好,那當我找到的時候,我就可以透過這個模式 去找到正確的agent,然後再往下勾。那當然,其他的所有的agent, 他們也可以透過A2A這樣一個模式,去間接他們所跑出來的任何的質量。那透過這樣一整個overall的solution, 我們就可以將這樣子的整個... 整個環境的設計就部署在所謂的GKE的環境上,來達到這樣一個整個A2A的這樣子Azure Microservices的一個架構設計。 要去完成的事情,他可能要去他的test case,他可能必須要go robust,所以他會一直去finding,那如果說像其他比如說鏟扣那些他也是,所以我們可以在這樣一個專職的行徑之下,那我們的每一個agent的表現能夠更好。 那他們之間的溝通也只需要透過所謂的這樣子的一個agent card的一個contract,我們叫agent card的一個contract,就是一個契約來執行。 所以,這裡整個流程說明,就像我剛剛跟大家講的這樣,如果大家可以看一下,它整個Overall流程就會長得像這樣子的一個模式。 這邊做一下總結,其實我們今天看到標準化的MCP,就是我們今天看到如何透過MCP 第二部分就是我們怎麼樣透過ADK的方式,可能他只是一個root的agent,然後他可以去透過prompting的方式去引導到對的地方,然後去做一些事情。第三部分就是,在這樣整個OAuth的整合之下。 最後的話就是我們希望這樣子的一個整合框架,就是不管是ATK啊、MCP啊,甚至到ATM啊,它都能夠無縫的去整合,然後這樣一個整個overall的一個solution。 所以其實這個是一個標語,只是說我們會知道是說其實我們過去可能就是很單純就是執行開發嘛,那就是做一些可能就是開發或是說寫程式的東西,可是其實像現在啊 在某些情境下,在某些情境下,在某些情境下, 那我是去讓他為ADK相對應的很多的Symbol的Call跟機械程式碼,那我會去跟他講說他應該要怎麼做,透過SpecDream這樣一個AI Spec Development的這樣一個概念,請他幫我做出來,然後我再去回調他。 對,讓他也會follow這樣一個規格,然後讓我們可能就是說,欸,我們怎麼想,那就希望他能夠怎麼幫我們做到,那也可以透過這樣一個概念,就是過去有點像顛覆,就是已經不像過去那樣子。 下一步會是建議大家,如果大家已經深陷其中了,那可能就會很了解。那如果大家現在才剛開始,或是說也想要更了解的話,大家可以去理解一下說,現在MCP,包含它的官方的一些生態系,MCP.SO啊。 或者是說有一個網站它是專門,我忘記它叫什麼名字,但是它就是可以,它會去間接一些HTTP哪裡,它也會定期去掃描一些弱點什麼之類,然後它會去讓你通過它的平台,然後去間接很多不同的HTTP。 我到時候會再補充進去。第二個部分的話就是,如果大家也有 GCP 這樣一個 Solution 或是這樣一個偏好的話,其實 ADK 真的是一個很好的方向。 當然,A2A更是接下來我們要做Azure Microservices的一個延伸很重要的重點,最後我們會把這樣一個整個完整的生態系,讓AI真的能夠符合你方向的能力。 我的演講就到此結束,謝謝大家。關於AI的主題,我相信這兩天或甚至是之前的研討會,大家應該都聽過蠻多的。過去這一兩年,包含整合測試這一塊其實有蠻多著墨,包含之前在Cloud Submit裡面有分享關於Playwright跟Azure DevOps整個完整生態系的結合。 那其實大家知道,其實以現在的角度,或是說以現在的需求來講的話,我們都會想說,那我們要如何透過AI去驅動所謂的整個測試,那甚至是說我們講AI覆能、AI覆能,那其實測試啊,我們也是希望是說可以解決這樣一個痛點。 好,那這邊就是說明一下,就是我們在這個主題裡面,主要會分成六大項,包含前提要的部分,就是大概講一下整個背景,那接下來的話,第二部分會介紹所謂的 MCP 的部分,那第三個部分的話,就是會包含就是現在今年才剛推出的,就是 Word APK 的部分,那也會做一個說明,那第四個部分,就是說,我們如何透過這樣一個整合,然後來應用到我們可以想像得到的一個測試情境, 然後我們來複習說,我們能夠如何應用。那第五個部分就是,當我們整合起來的時候,我們有沒有機會,比如說像我們知道啊,Google ADK 包含它後來發布,然後捐獻給 Linus Foundation 的那個 A2A 的協定,那我們如何透過一個 共同夢也,或是說,嗯,應該這樣講好了,就是為什麼我們會有這樣的一個需求,其實大家看第一個項目,就是所謂模糊的需求這件事情,大家可能會想像的是說,哎,其實好像我們現在在做web coding,好像也該,嗯。 現在目前,不管是Bytecode或是過去所承接的需求,可能就是一句話,一直以來我們可能要去除外,或甚至要去收集更多。現在目前的話,我們可能可以透過一些不同的方式來做。第二部分的話,我相信有很多團隊也都很不想面對的,就是 我們必須要做很多測試,那不管是基本的Unitest到Integration甚至到End-to-End,尤其是到End-to-End的時候,大家都會選擇,要嘛就是所謂的Regression,它就是一個,嗯,對,沒錯,可能我要求你 可能你改了一些future,那你就是要測那300個,那人工測,然後,好,也不知道到底有測還是沒測,甚至你可能會發現,呃,人工測的時候可能,欸,你只會發現他測的那個圖片。 如果不小心漏線的話,好像是上一版的日期。最後的話就是最弱的程式碼。其實說真的,我們整個需求定義的時候,很容易就是比如說有一些程式碼,它可能很多的 else 或是什麼的,那就寫死了。很有可能當我們比較大需求改動的時候,那我們也沒有辦法去... 有效的去做一個擴散,那說真的,其實這些部分啊,不只是流程的問題,那可能可能就是我們可能在溝通啊,或是說在整個性能上也會產生更大的裂痕,因為因為失敗了嘛,然後被不管是被user或者是被其他人question,那其實都會蠻少的。 那就是因為這樣的原因,所以我們可以想像一下,如果說我們開發團隊多了一個成員,對,那這樣子的一個成員,他是可以24X7,他是可以理解那需求,然後去生成,包含測試IDR,然後讓你的產品可以維持一個比較好的一個狀態。那另外的話, 那這是第一點吧,那第二點的話就是說,欸,我們這樣子的一個成員,他能不能夠精通,比如說,他也可以理解不同的程式語言,甚至說,欸,我們今天,就像我們基本的,我們的提問可能是,我們過去可能一定要英文,或是什麼樣,可是現在目前,原則上LM都完全看得懂中文嘛,所以,他就是可以透過這樣一個方式看得懂我們想要他講的東西。 要做的事情,以他能夠去完成,那我們可以指引他到對的方向,去做對的事。第三個部分就是,我們有沒有機會是,當我們所實現的這些事情的時候,我們可以存在特定的位置,甚至是我們可以讓它是一個,我們講的,現在俗稱的,它是一個Memory,或是說它就是一個Context。 這樣的一個記憶,它可以讓它就是overall,你可以去有點像是變成是說我們在iterator的過程中,它能夠是一個規範,那當以後它要去幫你做這些事情的時候,它能夠去follow這樣一個規範去做。 最後就是,這樣的一個模式,我們是不是可以再結合,比如說我們的一些平台啊,像剛剛我們有提到的HUD BIOS的整個CID的整個Platform,然後去讓它完整的一個搭配AI幫我們參考的產生的一個Test Report或是什麼樣的方式,然後讓我們可以有效的去delivery這樣子的一個產出, 這就是我們所提到的三大核心主題,第一個主題就是SCP,第二個主題就是所謂A-A,我們會延伸到所謂ATK,我們會延伸到所謂A-A這樣的一個協定。 在AI的上方技術設備的應用下, 實現測試場景的應用。 我相信MGP大家應該都很清楚了,算是從去年11月開始,比較火的應該是從今年2、3月吧,就是開始比較火,它是從Cursor那邊出來的,我最早研究也是透過Cursor的方式,然後去用這樣一個Parameter去引導它。 MGP是一個標準的訊息協定,希望透過開放與標準的溝通協定,實現AI的帶領與合作。 這條語音備忘錄,已進行編輯以加入正確的標點符號。 在編輯過程中,您將在編輯過程中獲得更多的資訊,並且將更多的資訊提供給更多的使用者。 現在目前可能一些需求它跑出來的那個整個配置,然後還有相關的html、css,對,那這些mcp啊,其實它就有辦法去幫我們去去做到相對應的,比如說我們的一些data context的,或是說我們AI想要接下來要生成的一些context的一些比較有效的整理齁。 另外,在整個NCP裡面,我們想要強調的是說,它整體的開發效率會提升。那為什麼會提升呢?其實,像剛剛所提到的, 我們今天如果透過MCP的模式,比如說像包含像我們之前也用一些Git的MCP啊,或者說像剛剛所提到的Notion、Bigma,那其實我們都可以overload將它整合起來,變成是一個整套的一個機制,那可能如果說我今天是這樣子的一個模式是在比如說在IDE裡面,我去整合很多不同的template,我也可以透過 最底層,比如說像File System的MCP,然後讓它去針對我在Local在你的File Store之內去做整個CRUD,就是檔案的CRUD,然後來完成我整個Overall在第一端去JCode這樣一個開發。 提到另外一邊,除了剛剛講到尊養來源以外,其實MTP主要會有三個部分。大概介紹一下,比如說像host是什麼? 這條語音備忘錄,已進行編輯以加入正確的標點符號。 這時候,當客戶收到這個資訊時,他會對他的MCP有一個協定檔,可能是一個MCP的Addressor,然後這時候他就會去看他定義的MCP的Server。不管是透過Docker寫下來的,或是SSE的,他就會透過這樣一個方式去寫。 使用自然語言的方式對應到MTTS服務,並透過該服務中描述的一些Tool Functions,正確地使用,執行某些任務,最後返回到LLM。 這邊我們會舉一個LM跟MCP之間的溝通,我們這邊是以Playwright MCP為例。大家可以想像,我們今天從最底層這邊,就是 NLM 模型當收到這樣一個訊息的時候,它就能夠辨識說, 它到底要 call 誰的 MCP 的 Client。這時候 MCP 的 Client 它就會透過一個類似像就是 RPC 這樣的一個協定的方式, 然後再去導到我們的 Perlite 的 MCP。那 Perlite 的 MCP 這邊你可以想像它就是我們的 server。 這就是MTP的server,然後這時候,我們今天下的prerun的指令是go to到某個browser,那等一下我們會有一些,會有一個影片。 這時候它就會自動的到我們的 Browser 裡面去做這相關的操作,然後再回來到我們的 MCP 的 Server,然後再將這樣子的一個資料回回來,然後最後到 MCP 的 Client,然後再回到 LLM,再做最後一層的一個 LLM 的大模型,它會幫這個結果再做最後的一個包裝。 對,所以原則上啊,其實整個 MCP 的操作過程大概就會是長得像這個樣子,那也會因為這樣子的一個原因,那讓我們的 LLM 可以透過 這就是一條語音備忘錄,已進行編輯以加入正確的標點符號。 這個東西其實是我最早所去想像跟實現的一個事情,這個部分它也是一樣以測試為例,其實它主要會有兩個情境,第一個情境就是測試案例的一個撰寫,第二個情境就是所謂測試程式碼的一個生成。 因應時間關係,我大概跟大家介紹一下,以第一個情境來講的話,我們可以想像有很多的測試案例,可能像過去都會生涯在CL上面,或者是說我們會有一些MD啊,甚至會有一些TXT的一些檔案,對,那這個時候我們就可以透過 透過這樣子的一個整個流程,然後大家可以看到,到第二層的時候,我們就會去因為這樣一個Property,它就會去執行所謂,它就會引導到我們的Provide MCP,然後這時候它就會將我們的測試案例轉換成另外一種格式的一個MD檔。那當這樣一個MD檔轉完之後呢,其實我們還可以針對這樣一整個流程呢 讓他去 filter,比如說,我們的測試案例做完了嘛,那做完了之後呢,我們會希望他能夠去幫我們分辨哪一些測試案例是屬於 integration,哪一些測試案例 maybe 在 imitator 就做完,哪一些案例他是必須要到 end-to-end 的時候完成的,所以他會再跑到我們的這邊的看到就是第二層的部分。 第二層的部分完成後,會再產生另一個MD。這個MD做完了之後,原則上會到下一關。下一關這邊可能就是說,我們既然確定了哪些東西是真的要做end-to-end的,它這時候會到這邊。 再次進行編輯,使用同樣的方式來編輯MCP, 使用同樣的方式來編輯MCP,使用同樣的方式來編輯MCP, Biosystems的MCP和一些透過Swake的API,讓他去確認包含我們的DV有沒有資料,API Code正不正確,然後最後再reference到我們的Biosystems的資料。 測試報告的一個Tablet,最後才產生我們的測試案例的Overall結果。 這條語音備忘錄,已進行編輯以加入正確的標點符號。 這就是我們想要的測試範例的格式。第二個部分,我這邊就比較不詳述,這個部分的話,其實是我希望我上面做的模擬完成可行的過程,做完之後,我可以去套用,比如說像我,因為像我剛剛前前有提到,就是我們有整個Bluelight的一個完整的 測試框架的一個repo那這個部分的話,就會去搭配我們上面所講出來的一些測試案例他會去將我這樣一個repo當context去產生我想要的整個playline的一個測試框架的一個整個完整 這件事情有什麼騷擾,因為你可能,說真的,其實以AI現在目前來看的話,如果我們大家其實有在用AI都會知道,其實AI蠻像在抽獎一樣的。 可能你仔細十次,還是會錯五次,那我有些時候模型不小心選錯了,還錯三次四次,對,所以其實在這種情境之下,我們會透過第二個方式,讓他去找... 相對應的程式碼,以便後面的regression可以用。那另外的話,我們也可以透過這樣一個程式碼的長出來的程式碼,可以去遞補當下一次我們再長出來的時候,他們的差異在哪裡。 然後來判斷它們到底會不會有問題。好,那這個延伸議題也是提供給大家參考的喔。就是我今天可能是說,我的另外一個想像是,比如說我今天透過MCP這樣一個工具,比如說我做一個download這樣一個前進的時候, 這會發生什麼事情呢?網頁可能是無痕的,會有預設的狀態,可是事實上... 如果是 Pre-Write 的話,它會以 Time-Lapse Cycle 為存在它的 Graph 裡面, 然後會讓我一直找不到我下載下來的那個東西在哪裡。所以那時候我就想到說, 欸,那我有沒有機會? 我透過實現基本的pre-write框架,讓我的property用下參數的方式去填寫我這個框架的程式碼的template, 最後再引導他去執行,然後再透過 Excel 的 MCP 跟 Pre-Write去驗證我最後跑出來的這個報表裡面的結果對不對?OK,那這件事情就是可行的,而且他能夠幫你做一件事情就是如果你今天也很喜歡寫程式的話,你可以去設定很多不同的模組跟框架然後用填參數的方式去引導 AI 幫你填進去然後幫你這樣整個 Overload 的流程設計出來 也可以稱它為Reporting Service, 只是說這個Reporting Service可能叫做AI Reporting Service。那這邊的話題我給大家參考。 那這張流程圖的話,就大概像剛剛講的那樣子,那我就先不贅述了,那我們再往下一下。 請大家參考一下。 因時間的關係,讓大家稍微看一下這個MGP的工具,就像我們剛剛整理的那樣子,這件事情是模擬的一個考慮。 抱歉 它會自動的去執行我們剛剛所掛載的所有相對應的一些MPP,然後來模擬操作,包含我們initial data,我們也可以告訴它我們的資料會在哪裡,那我們讓它可以正確的填到我們想要填的位置,那最後跑出來。 這條語音備忘錄,已進行編輯以加入正確的標點符號。 這條語音備忘錄,已進行編輯以加入正確的標點符號。 參考某個Template,將它所跑出來的所有測試的結果,按照這樣一個格式去填,然後達到一個完整的結果,這樣,OK?好,那我這邊的話就先關掉,等我一下。 好的,那其實啊,剛剛那個部分啊,主要就是,如果以RUF來講的話,主要就是分成這三大部分,就是所謂我會去進行的測試的初始化,那包含initial data,包含測試怎麼樣去下這些流程,怎麼樣去模擬。那第二個部分的話,就是透過這樣一個prompting step-by-step的方式去做執行。 最後,我會包含API的驗證、DP Query的驗證、 全線購入的驗證,以及我跑出來的Tested Report的驗證格式。 好,那我們這邊就是有一個提問啦,就是大家可以想一下,好像看起來我們透過一個 IDE 跟一個 MCP 就好像可以做完 AI 輔助開發測試這件事情嗎? 其實,我說真的,其實我一開始也是這樣想,覺得說,欸,我好像這樣子就可以做了。可是說真的,其實我們有沒有思考過一件事情就是,如果說我們只單單扣 那事實上大家知道嘛,今天如果我們在一個Property下很大,甚至給他很複雜的一個指令,甚至要繞著他說,噢,你就是把我所有的事情都做完,通常那個換取是非常大的。 所以也因為這樣子的一個原因,再加上 Security, 比如說我們很單純的就是,啊我又扣 MGP,然後那就讓他跑。可是說真的,其實我們也沒有考慮過的是, 比如說有些東西,他根本就是必須...... 該語音備忘錄時,必須將生成體的東西轉換成另一種格式,才能夠轉換成 LLM 語音備忘錄。 一條語音備忘錄,已進行編輯以加入正確的標點符號。 他一直以來都會非常的suffer,那其實我覺得套用到agent這件事情,和套用到所謂AI去執行這件事情,其實也是一樣的道理。今天如果我們把所有東西全部都塞在同一個地方。 其實它是非常難回覆的。另外的話,就是包含一些比如說記憶啊,或者是說一些工作環境的整合啊,那我們有沒有機會將這樣子的一個服務 expose 出去,而不是單純只靠 IDE,那其實也會是另外一些問題。 在這種情形之下,我們就會透過Google ADK來實現它。 這條語音備忘錄,已進行編輯以加入正確的標點符號。 主要的元件是主要的核心,主要的核心是Agent,主要的核心是Tool,主要的核心是Memory,主要的核心是Tool, 進一步的說明來講的話,除了這三大部分以外啊,當然就是我們會希望我們可以在這個部分包含我們的整個Overall Context也可以放進去,那最後他可能他一些闡述Artifact是不是我們也可以deliver到其他的部分去在做運用,那其實他會有其他的一些算是延伸的一些部件的部分。 在這裡,我們主要會去講這三個部分, 包含代理、工具跟回調的部分。代理在ADK裡面,主要會有三種模式。一種就是,你就單純寫一個url page, 第二種模式就是工作流程,就有點像我們寫程式一樣。一個就是單... 然後來去做代理的編排。那另外的話,就是Tool。那其實這個Tool,大概你有想像說,Tool跟NCP會有什麼差別?那上面的東西,我就不照本身科學看。你會知道Tool,它本身... 我今天是所,它會歸類成我是在這個AI agent裡面,它本身能夠賦能,或是說它必須要比較是robust的去執行的一個所謂的function。 MCP會像是希望服務可以對接到外部,可以透過標準的程序讓服務對接到外部。 這個完整的一個整個agent的生態,或是agent的流能夠有更多其他外部功能的一些應用跟function,所以我會把它定調成是說,有點像是我們在寫一個class,然後這個class的話 這條語音備忘錄,已進行編輯以加入正確的標點符號。 也許我們今天進行一個測試,那它測試的話,它其實Google ADK 它提供在 ADK Web 上面直接執行嘛,那第二個部分的話,可能就會說,噢,我們是透過他們的 Cloud SQL,那也可以通過去間接,那第三個部分的話,它有提供一個 Vertex AI 的一個 Session,那其實透過這個方式,你可以透過傳特定 Session 的方式,讓他進去,可以幫你記得,比如說。 GCP的Solution裡面,它都有提供這樣一個東西,來方便它整個上下文的一個儲蓄。好,那剛剛有提到嘛,其實 我們知道是說,MCP可能會有什麼問題,剛剛有提到嘛,就是一件就是security的問題嘛,那其實在MOOADK裡面,它也有提供這樣子的一個概念。 這條語音備忘錄,已進行編輯以加入正確的標點符號。 總括來說,在Google ADK裡面,它會透過Runner這樣一個概念,然後去接收相對應的一些Property進來的一些Input。 然後再去執行相對應的邏輯,比如指派給相對應的agent,然後對應的一些邏輯。當他處理完的時候,我們就可以透過WireLoop的方式將他所跑回來的那個結果再收回來。那主要Runtime的話就是 通常就會用在比如說,我們今天可能建置這樣子的Google AI Edge,它是在比如說是一個API的領口式的領域之下,那我們就會用Google Edge的API這樣子領域。 剛剛有提到,雖然說我們有Tool,可是其實Tool它也沒有辦法真正解決所有的問題,那主要是什麼原因呢?最主要的原因還是會在於是說,比如說我今天 我今天建了一个Agen,但我不可能去实现Notion的API。 你说。 在使用 Edge-to-Edge 的概念的時候,我們可能就會到所謂 GKE 上面去做部署。那這邊的話主要會有兩大策略,那我這邊的話就是比較簡單的說明。就原則上我們這邊有提供怎麼樣去做這些事情的部署方法,那不外乎當然我們的權限要夠嘛,service account 要對嘛。那另外的話就是我們的整個環境變數,包含 我們要透過Versus AI,或是透過Gemini的API Token Key,也都可以。那我們會透過這樣的方法,然後將我們的API Token 備忘錄放在所謂的Security Manager裡面。 他不想要,就是說他想要去更客製化一點,比如說我們知道我們搭客GPU的時候,可能他maybe他就只有一個基本的環境嘛,可是大家想像的是,如果我今天我在做這件事情的時候,maybe我要call的mcp他是node.js的環境。 那我要怎麼做? 原則上我就會透過方法2來設計,就是所謂這邊有提到的就是高度彈性的方式我就會去執行,我就會在他的Dockerfile裡面將我比如說像Node.js的環境什麼的,我就會把它綁定進去接下來我也會把MTB相關的一些 需要的指令還有相關的應用,我會把它放在所謂的大哥 file 裡面,再來執行命令,最後再去將相對應的一些環境變數發布。 在這種情形之下,我們就能夠讓 Google ADK 本身可以在 Cloud Run 的環境裡正確執行 MCP。這是我們有採取的坑,所以其實官方是建議說用 ADK CLI,但是我覺得這個坑還蠻大的。 因為MCP根本扣不到,所以建議大家可以看一下官方的那個Dockerfile的方法,然後去把你所需要的環境或是設定,或是透過Pipeline的方式去把它迭代,讓它環境是可以fulfill你的UVX或者是說Node.js的一些環境。 設定在您的 Mac 上,並提供給大家參考。 進行編輯以加入正確的標點符號。 第一個部分就是像剛剛提到的測試案例的創建,我們知道測試案例的創建也是非常重要的一環,包含我們今天可能會去複製SA的文件,或是說相對應一些用戶的一些要求,或是說我們會通過PTT的方式去實現。 我們都可以透過一些過去的測試案例去實現,這些東西都會是我們測試案例創建的一個主要的context。我們會透過這樣一整個模式去幫他去做建立。 第二個部分就是像我們剛剛去模擬的,今天我們有沒有機會讓SA就是所謂或是QA的能源正確的在我們的ID上面模擬過整個UX的這樣一個流程,當他模擬完的時候我們會自動在 以上整個流程裡面,再去參考到我們的正確,就是參考到 maybe 我們剛剛所提到 reference 的那些 context 的程式吧,讓它長成我們想要的標準。 測試程式碼的一個框架的那個結構,對,透過這個方法,然後再搭配第三個部分,這樣把它overall的整個將整個測試的Android的UI跟UX的部分都完成。 第四個部分,就是像剛剛我們提到的痛點,就是今天我們可能在做測試的時候最累的就是regression。 其實在這個部分,我們這邊也有提出這樣一個Solution,就是今天如果說我們整個測試的框架在生成程式碼的時候,我們是以POM的角度出發的時候,事實上當下一次我們的Fusion改動,我們要再做這件事情的時候,我們可以在同一個Pattern底下讓它 在產生對應的 POM 中,POM 其實就是以一個 Page 為目標的一個 class,或是我們可以想像說 一個POM就是一個頁面,頁面可能有很多欄位,這些欄位可能就是那個form的群。這邊的很多button或是很多action的操作,可能就是... 這個頁面的一些功能所以我們可以想像像我剛剛所提到的今天我們第一次產生的時候跟第二次我們要再測試測試然後再重新產生的時候我們就可以去遞伏他他的頁面有沒有產生什麼樣的變化然後再請他出報告 請使用語音備忘錄,以進行編輯以加入正確的標點符號。 畫面的圖像部分,甚至整個框架的部分,都可以做一個Overall的測試比對。 那這邊的話就是大致的跟大家說明一下說,大概Test Case的話,要做這件事情的話,大概會有哪一些流程跟方式,讓大家可以參考一下。 使用語音備忘錄,已進行編輯以加入正確的標點符號。 第三個部分是像剛剛提到的,就是我們會透過這樣一個模擬的方式,然後再參考到正確的,我們想要讓他參考到相對應的程式,然後再去產生相對應的code。 然後來協助下一次regression的時候,它可以直接NPM run test去執行這件事。那第四個部分啊,就是我們剛剛有提到,就是以POM的角度去做出發,去將它所我們要比較的這些重點,包含了一些頁面的差異啊,或是說裡面有沒有一些 然後一步一步的將整個代碼比較的結果給產生出來。第五個部分的話,就是包含了一些圖像的比較,然後還有一些可能裡面有沒有一些色差,但我相信這個可能再更細一點,只是說可能它會比較偏Intensity的部分。那這邊就先這樣子說。 好,那我們剛剛有提到嘛,其實我們會知道的是,不管是MCE或是單純的一個Google ADK,那我們都會希望是說,就像我們現在在標榜說我們在做Microsoft的概念。 在單一服務的情況下,我們有沒有機會透過類似像Azure Microservices這樣把它整合起來? 所以,我們剛剛將這樣一個概念,就會整合出所謂這樣子的一個五大所謂的agent,包含CAS、CODE、VISION。 透過這五大代理人員,我希望在整個測試的平台下,我都能夠AI附和他,甚至我每一個代理人員之間都能夠直接溝通。所以我們就延伸了下一個我們所提到的。 在這樣一個架構的情境下,我們可以透過 A2A 的方式,讀取到 Host Agent 的資訊。這時候,Host Agent 就會知道,我們今天想要做的是什麼樣的事情。 如果這件事情是它本身的 MCP 可以完成的,那它就會去透過 MCP 的方式,像剛剛一樣,它就會去執行它完成。那如果今天這個 function 它是要 delegate 給其他的 agent 使用的,這時候它就會去找到 就有點像是Eureka的方式,就是有點像是那個Eureka就是Service Discovery的概念它會去找到我在這裡整個,我們可以想像,可以把它想像成是一個Cluster,就像一個GKE的Cluster一樣 它會去找到我現在上面有多少的agent, 每一個agent他們的agent card是什麼。好,那當我找到的時候,我就可以透過這個模式 去找到正確的agent,然後再往下勾。那當然,其他的所有的agent, 他們也可以透過A2A這樣一個模式,去間接他們所跑出來的任何的質量。那透過這樣一整個overall的solution, 我們就可以將這樣子的整個... 整個環境的設計就部署在所謂的GKE的環境上,來達到這樣一個整個A2A的這樣子Azure Microservices的一個架構設計。 要去完成的事情,他可能要去他的test case,他可能必須要go robust,所以他會一直去finding,那如果說像其他比如說鏟扣那些他也是,所以我們可以在這樣一個專職的行徑之下,那我們的每一個agent的表現能夠更好。 那他們之間的溝通也只需要透過所謂的這樣子的一個agent card的一個contract,我們叫agent card的一個contract,就是一個契約來執行。 所以,這裡整個流程說明,就像我剛剛跟大家講的這樣,如果大家可以看一下,它整個Overall流程就會長得像這樣子的一個模式。 這邊做一下總結,其實我們今天看到標準化的MCP,就是我們今天看到如何透過MCP 第二部分就是我們怎麼樣透過ADK的方式,可能他只是一個root的agent,然後他可以去透過prompting的方式去引導到對的地方,然後去做一些事情。第三部分就是,在這樣整個OAuth的整合之下。 最後的話就是我們希望這樣子的一個整合框架,就是不管是ATK啊、MCP啊,甚至到ATM啊,它都能夠無縫的去整合,然後這樣一個整個overall的一個solution。 所以其實這個是一個標語,只是說我們會知道是說其實我們過去可能就是很單純就是執行開發嘛,那就是做一些可能就是開發或是說寫程式的東西,可是其實像現在啊 在某些情境下,在某些情境下,在某些情境下, 那我是去讓他為ADK相對應的很多的Symbol的Call跟機械程式碼,那我會去跟他講說他應該要怎麼做,透過SpecDream這樣一個AI Spec Development的這樣一個概念,請他幫我做出來,然後我再去回調他。 對,讓他也會follow這樣一個規格,然後讓我們可能就是說,欸,我們怎麼想,那就希望他能夠怎麼幫我們做到,那也可以透過這樣一個概念,就是過去有點像顛覆,就是已經不像過去那樣子。 下一步會是建議大家,如果大家已經深陷其中了,那可能就會很了解。那如果大家現在才剛開始,或是說也想要更了解的話,大家可以去理解一下說,現在MCP,包含它的官方的一些生態系,MCP.SO啊。 或者是說有一個網站它是專門,我忘記它叫什麼名字,但是它就是可以,它會去間接一些HTTP哪裡,它也會定期去掃描一些弱點什麼之類,然後它會去讓你通過它的平台,然後去間接很多不同的HTTP。 我到時候會再補充進去。第二個部分的話就是,如果大家也有 GCP 這樣一個 Solution 或是這樣一個偏好的話,其實 ADK 真的是一個很好的方向。 當然,A2A更是接下來我們要做Azure Microservices的一個延伸很重要的重點,最後我們會把這樣一個整個完整的生態系,讓AI真的能夠符合你方向的能力。 我的演講就到此結束,謝謝大家。 ## 會後摘要 ### 整體背景與痛點 - 當前軟體開發面臨三大痛點:模糊的需求、繁瑣的測試流程以及脆弱的程式碼 - 透過 AI 作為開發團隊的額外成員可以 24x7 理解需求、生成測試 IDR,並維持產品品質 - AI 能理解不同程式語言和自然語言(如中文),更有效地執行指定任務 ### MCP (Message Conversation Prompt) - MCP 是標準的訊息協定,希望透過開放與標準的溝通協定實現 AI 的協作 - MCP 可提升整體開發效率,允許整合多種工具(如 Git、Notion、Figma) - MCP 架構包含三個主要部分:Host、Client 和 Server,讓 LLM 能夠與外部系統互動 ### Google ADK (AI Development Kit) - ADK 包含三個核心組件:Agent(代理)、Tool(工具)和 Memory(記憶) - 代理在 ADK 中有三種模式:單純 url page、工作流程模式、以及代理編排 - Tool 與 MCP 的差別:Tool 是 AI agent 中能賦能的函數,MCP 則是希望服務對接到外部的標準程序 - ADK 支持 Google Edge API、GKE 部署等多種運行環境 ### 測試應用場景 - 測試案例創建:利用 AI 分析需求文件,生成結構化測試案例 - 測試程式碼生成:模擬 UX 流程並生成符合框架的測試代碼 - 整合 UI/UX 測試:完成整體 Android UI 和 UX 測試 - 智能 Regression 測試:透過 POM (Page Object Model) 比較頁面差異,減輕回歸測試負擔 - 視覺測試:進行圖像比較,檢測色差等視覺問題 ### A2A (Agent-to-Agent) 協定整合 - 透過 A2A 協定將多個專業 agent 整合起來,包括 CAS、CODE、VISION 等五大代理 - 每個 agent 專注於特定任務,透過 agent card (契約) 進行有效溝通 - 可部署在 GKE 環境上,實現類似 Azure Microservices 的架構設計 ### 建議下一步 - 深入了解 MCP 及其生態系統 ([MCP.SO](http://MCP.SO)) - 若使用 GCP,推薦進一步探索 Google ADK - 研究 A2A 作為實現 AI 微服務架構的重要基礎

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully