GH-600 數位教科書 開啟互動版

D2 模擬題:實作工具使用與環境互動

D2「實作工具使用與環境互動」14 題原創模擬題,附正確答案、解析與常見陷阱。選項順序在互動版會隨機排列。

第 11 題(D2-O1)

你要建立一個只負責補測試的 custom agent,規定它不能上網查資料。agent profile 的 tools 應包含哪些?

複選題,選項:

  • read(讀取檔案)
  • edit(修改檔案)
  • search(搜尋程式碼)
  • web(搜尋網路上的資料)
看答案與解析

正確答案:read(讀取檔案);edit(修改檔案);search(搜尋程式碼)

解析:custom agent 用 tools 的別名開關工具類別。補測試要讀取與搜尋既有程式碼,新增或修改測試檔也需要 edit;web 讓代理取得網路資料,題目禁止上網就不給。tools 無法把 edit 限制在測試檔,「不改正式程式碼」要靠 profile 的指示、review 與 CODEOWNERS 等控制。

常見陷阱:以為拿掉 edit 就能「只寫測試」。新增測試檔同樣需要 edit;tools 是整類工具的開關,不是檔案層級的權限。

依據:Custom agents configuration、Creating custom agents for Copilot cloud agent

在互動版作答這題

第 12 題(D2-O4)

代理呼叫外部 API 時遇到下列錯誤。哪些適合用有上限的指數退避重試?

複選題,選項:

  • 503 Service Unavailable
  • 429 Too Many Requests
  • 403 Forbidden 權限不足
  • 400 Bad Request 參數錯誤
看答案與解析

正確答案:503 Service Unavailable;429 Too Many Requests

解析:D2-O4 要求依錯誤類型設計處理方式。503 與 429 都是暫時性狀況:服務暫時無法處理,或呼叫頻率超過限制,等一段時間後可能成功,適合有上限的指數退避重試。這裡的 403 指權限不足、400 指請求本身有誤,重試多少次結果都一樣,應停止並修正請求或沿升級路徑回報。注意 GitHub 超過次要速率限制時也可能回傳 403,這時要依 retry-after 等待後重試,所以要先讀回應訊息再判斷。

常見陷阱:判斷能不能重試,要問「等一下結果會不會不同」。權限與參數錯誤不會自己變好。

依據:Exam GH-600 Study Guide、Rate limits for the REST API

在互動版作答這題

第 13 題(D2-O2)

在 repository 的 MCP 設定中,每個 server 都必須用 tools 欄位列出允許的工具名稱,或用 ["*"] 允許全部工具。

是非題:判斷敘述是否正確。

看答案與解析

正確答案:正確

解析:cloud agent 的 MCP JSON 中,tools 是必填欄位:列出工具名稱就是 allowlist,["*"] 則開放該 server 的全部工具。設定完成後,Copilot 會自主使用這些工具,不會逐次請你核准,所以應該只列出任務需要的工具。

常見陷阱:custom agent profile 省略 tools 時會開放全部工具,這個行為不適用於 repository 的 MCP 設定,兩者不要混淆。

依據:Configure MCP servers for your repository、Custom agents configuration

在互動版作答這題

第 14 題(D2-O1)

某個 custom agent 要搜尋與讀取程式碼、修改測試檔,並執行測試指令確認通過;它不需要上網,也不委派其他 agent。哪個 tools 設定最符合最小權限?

單選題,選項:

  • tools: ["read", "search", "edit", "execute"]
  • tools: ["read", "search", "edit"]
  • tools: ["read", "edit", "execute", "web"]
  • tools: ["read", "search", "execute", "agent"]
看答案與解析

正確答案:tools: ["read", "search", "edit", "execute"]

解析:最小權限是「剛好夠用」,不是「越少越好」。這個 agent 要搜尋與讀取(read、search)、修改測試檔(edit),還要執行測試指令(execute),四者缺一不可。少了 execute 就無法確認測試通過;以 web 取代 search,少了搜尋程式碼的能力,還多了不需要的上網權限;以 agent 取代 edit,既無法修改測試檔,又多了委派其他 agent 的能力。

常見陷阱:最短的清單不一定正確。少給一個必要工具,代理就無法完成任務,或會想辦法繞過限制。

依據:Custom agents configuration

在互動版作答這題

第 15 題(D2-O2)

企業希望開發者在 IDE 與 Copilot CLI 中,只能使用經過審核的 MCP server。應該設定什麼?

單選題,選項:

  • MCP registry 搭配「Registry only」政策
  • MCP registry 搭配「Allow all」政策
  • 在各 repo 的 cloud agent MCP 設定列出 server
  • 在 custom agent 的 mcp-servers 列出 server
看答案與解析

正確答案:MCP registry 搭配「Registry only」政策

解析:MCP registry 是一組列出核可 server 的 HTTPS 端點。「Restrict MCP access to registry servers」政策選擇 Registry only 後,受支援的 IDE 與 Copilot CLI 只能執行 registry 內的 server;選 Allow all 則沒有限制,所有 MCP server 都能使用。這項政策目前為公開預覽,GitHub 文件指出更安全、已正式推出的做法是 enterprise allowlist(managed-settings.json),但它不在本題選項中。repository 的 MCP 設定只作用於 cloud agent;custom agent 的 mcp-servers 只設定該 agent 能用的 server,不會限制開發者在 IDE 裡加入其他 server。

常見陷阱:registry 本身只是清單,真正產生限制的是政策設定為 Registry only。

依據:Restrict MCP server access to a custom registry、Configure an MCP registry for your organization or enterprise、Exam GH-600 Study Guide

在互動版作答這題

第 16 題(D2-O2)

你要讓 cloud agent 使用一個需要 API 權杖的 MCP server。權杖應該存放在哪裡?

單選題,選項:

  • Agents secret,名稱以 COPILOT_MCP_ 開頭
  • Agents secret,名稱不加任何前綴
  • Actions secret,名稱以 COPILOT_MCP_ 開頭
  • Codespaces secret,名稱以 COPILOT_MCP_ 開頭
看答案與解析

正確答案:Agents secret,名稱以 COPILOT_MCP_ 開頭

解析:MCP server 需要的金鑰或權杖,要存成名稱以 COPILOT_MCP_ 開頭的 Agents secret 或 variable(組織或 repository 層級),只有這些才會提供給 MCP 設定,並在 JSON 中以 $COPILOT_MCP_API_KEY 這類語法引用。名稱沒有前綴的 Agents secret 不會提供給 MCP;Actions 與 Codespaces 的 secrets 屬於其他功能,即使加上前綴也不會用在這裡。

常見陷阱:兩個條件要同時成立:存放在 Agents secrets 或 variables,而且名稱以 COPILOT_MCP_ 開頭。

依據:Configure MCP servers for your repository、Building guardrails for GitHub Copilot cloud agent

在互動版作答這題

第 17 題(D2-O3)

某個工具只有一個很少使用的 custom agent 需要,安裝要 8 分鐘;repository 裡其他 cloud agent 任務都用不到。要讓那個 agent 能使用這個工具,最合適的做法是什麼?

單選題,選項:

  • 在該 custom agent 的指示中寫明需要時再安裝
  • 在 copilot-setup-steps.yml 預先安裝這個工具
  • 把這個工具的安裝檔一起提交到 repository
  • 把 setup steps 的 timeout-minutes 調到 59
看答案與解析

正確答案:在該 custom agent 的指示中寫明需要時再安裝

解析:copilot-setup-steps.yml 會在 Copilot 每次開始工作時執行,整個 repository 只有一份,無法只套用在某個 custom agent。把 8 分鐘的安裝放進去,所有 cloud agent 任務都要多等 8 分鐘。只有一個少用的 agent 需要時,在它的指示中寫明需要時再安裝,成本只由它負擔。把安裝檔提交到 repository 會讓 repo 變大且難以更新;調高逾時上限不會讓工具出現。

常見陷阱:setup steps 是一般情況下的最佳做法,但它的成本由每個任務分擔。先看需求的範圍,再決定放在哪一層。

依據:Configure the development environment、Custom agents configuration

在互動版作答這題

第 18 題(D2-O3)

你在一個既有的 PR 上提及 @copilot,請它修正 review 意見。cloud agent 可以把變更推送到哪裡?

單選題,選項:

  • 只能推送到這個 PR 的分支
  • 只能推送到新建立的 copilot/ 分支
  • 這個 PR 的分支與新的 copilot/ 分支
  • 觸發者有寫入權的任何一個分支
看答案與解析

正確答案:只能推送到這個 PR 的分支

解析:cloud agent 只能推送到單一分支。在既有 PR 上提及 @copilot 時,它取得的是該 PR 分支的寫入權;其他情況下才會建立新的 copilot/ 分支,並只能推送到那個分支。它的推送範圍與觸發者的權限無關,也仍受分支保護與必要檢查約束。

常見陷阱:「copilot/ 分支」是最常見的情況,但不是唯一的情況。從既有 PR 觸發時,目標是那個 PR 的分支。

依據:Risks and mitigations for GitHub Copilot cloud agent

在互動版作答這題

第 19 題(D2-O4)

代理呼叫的 MCP 工具持續回傳 503,已用指數退避重試到上限仍失敗。這一步只是產生一份可以稍後重跑的報表,其他步驟都不依賴它。下一步最合適的是什麼?

單選題,選項:

  • 記錄失敗後繼續其他步驟,報表稍後重跑
  • 停止整個任務,並沿升級路徑交給負責人
  • 取消重試上限,持續重試直到服務恢復
  • 改用另一個權限更高的工具產生報表
看答案與解析

正確答案:記錄失敗後繼續其他步驟,報表稍後重跑

解析:D2-O4 要求依失敗的影響範圍設計處理方式。重試已到上限,表示短時間內不會恢復;但這一步可以稍後重跑,其他步驟也不依賴它,記錄失敗並繼續其他工作,影響最小。停止整個任務會讓不相關的步驟一起停擺;取消上限會無限等待;改用權限更高的工具是擴權,不是錯誤處理。

常見陷阱:升級給人是重要的後備手段,但不是每個失敗都要讓整個任務停下。先看失敗會影響哪些步驟。

依據:Exam GH-600 Study Guide

在互動版作答這題

第 20 題(D2-O4)

代理大量呼叫 GitHub REST API 時收到 403,回應訊息指出觸發了次要速率限制(secondary rate limit),標頭帶有 retry-after: 60。下一步應該是什麼?

單選題,選項:

  • 等待 60 秒後再重試這個請求
  • 停止並回報權杖的權限不足
  • 改用觸發者的個人權杖立即重試
  • 立即重試,直到請求成功為止
看答案與解析

正確答案:等待 60 秒後再重試這個請求

解析:GitHub 超過次要速率限制時會回傳 403 或 429;若有 retry-after 標頭,應等待指定的秒數後才重試,持續失敗時再以指數退避並設定次數上限。這個 403 來自速率限制,不是權限不足,停止並回報權限問題會誤判原因;改用個人權杖是繞過控制;限制期間持續發送請求,可能讓整合被封鎖。

常見陷阱:403 不一定是權限問題。先讀回應訊息與標頭,再決定是重試還是停止。

依據:Rate limits for the REST API、Exam GH-600 Study Guide

在互動版作答這題

第 21 題(D2-O4)

事後要追查 cloud agent「在什麼時候、用了哪些工具與參數、得到什麼結果」。最直接的紀錄是什麼?

單選題,選項:

  • cloud agent 的 session log
  • PR 上的 commit 歷史與 diff
  • PR 上 CI workflow 的執行紀錄
  • 代理在 PR 描述中寫的摘要
看答案與解析

正確答案:cloud agent 的 session log

解析:session log 逐步記錄 cloud agent 在工作階段中的操作,包括呼叫的工具、參數與結果,正是題幹要追查的內容。commit 與 diff 只顯示最後留下的變更,看不到過程中的工具呼叫;CI 的執行紀錄記錄的是 workflow,不是代理的操作;PR 描述是代理自己的摘要,可能遺漏重點。

常見陷阱:commit 歷史也有時間與內容,但它記錄的是結果。題幹問的是工具與參數,那是過程。

依據:Risks and mitigations for GitHub Copilot cloud agent、Troubleshooting GitHub Copilot cloud agent

在互動版作答這題

第 22 題(D2-O3)

CI 每晚請代理修正 lint 錯誤,這些修正只改格式。團隊希望通過檢查後就能合併、不需要人工審查,但主線的保護規則不能拿掉。哪一種設計最合適?

單選題,選項:

  • 用受限權杖開 PR,必要檢查通過後自動合併
  • 用受限權杖開 PR,並要求一位 reviewer 核准
  • 用管理員權杖直接把修正推送到 main
  • 修正前暫停分支保護,推送後再恢復
看答案與解析

正確答案:用受限權杖開 PR,必要檢查通過後自動合併

解析:題幹要求保留主線保護、但不增加人工審查。用受限權杖開 PR,讓 ruleset 要求的 status checks 決定能否合併,檢查通過後自動合併,既不繞過保護,也沒有多一道人工關卡。要求 reviewer 核准違反「不需人工審查」;管理員權杖直推與暫停分支保護,都是拆掉護欄。

常見陷阱:要求人工審查是常見的安全預設,但題幹已說明這類變更不需要。保護規則與人工審查是兩件事,可以分開決定。

依據:Building guardrails for GitHub Copilot cloud agent、About rulesets

在互動版作答這題

第 23 題(D2-O1)

某個 custom agent 的任務會用到 github MCP server 大部分的工具,而且這個 server 經常新增工具,團隊希望新工具不需修改 profile 就能使用。tools 應該怎麼設定?

單選題,選項:

  • 使用 github/* 開放這個 server 的工具
  • 逐一列出 github/工具名稱,需要時再補
  • 使用 ["*"] 開放所有 server 的全部工具
  • 不設定 github server,改由指示描述
看答案與解析

正確答案:使用 github/* 開放這個 server 的工具

解析:custom agent 的 tools 可以用 server-name/* 開放某個 MCP server 的全部工具,也可以用 server-name/tool-name 只開放特定工具。任務會用到大部分工具、又希望新工具自動可用時,github/* 最符合需求,範圍也只限這個 server。逐一列出需要每次新增時修改 profile;["*"] 會開放所有 server 與內建工具,超出需求;不設定 server,代理就無法使用這些工具。

常見陷阱:最小權限不代表每次都要逐一列出工具。範圍限定在需要的 server,已經比開放全部小得多。

依據:Custom agents configuration

在互動版作答這題

第 24 題(D2-O4)

代理已推送兩個 commit,正在執行一個還要 20 分鐘的檔案產生步驟。使用者此時取消了任務。代理應該怎麼處理?

單選題,選項:

  • 立即停止新動作,清理暫存並記錄進度
  • 做完這個 20 分鐘的步驟後再記錄進度
  • 立即停止新動作,並回滾兩個 commit
  • 立即停止新動作,並刪除暫存與紀錄
看答案與解析

正確答案:立即停止新動作,清理暫存並記錄進度

解析:取消代表不再授權新的動作,但已經做的事要能交代:清理可以安全清理的暫存資源,並記錄完成到哪一步,方便之後恢復或由人決定是否回滾。把 20 分鐘的步驟做完等於忽略取消;自行回滾已推送的 commit 是未經授權的新動作;連紀錄一起刪除,就沒有人知道任務停在哪裡。

常見陷阱:三個「立即停止」的選項差在後半句。取消之後該留下的是紀錄,該清掉的是暫存,已推送的變更留給人決定。

依據:Exam GH-600 Study Guide

在互動版作答這題