Codex CLI 的規劃模式 (Plan mode) 可用來做執行複雜任務前的規劃,而非真的執行。
使用
在 Codex CLI 輸入/plan或按 Shift+Tab 即可進入規劃模式。
> /plan
• Model changed to gpt-6.1-sol medium for Plan mode.
> 幫我建立一個Java Http Client嘗試呼叫API的服務,若失敗會依照設定檔設定的次數和等待秒數進行重試,超過則拋出錯誤
我會先查看專案的 Java 版本、框架和設定檔結構,再確認重試條件,整理成可直接實作的方案。
• Exited (status 1) Get-Location; rg --files -g AGENTS.md -g pom.xml -g build.gradle -g build.gradle.kts -g '*.java' -g 'application…
└ C:\..\codex-practice
• Exited (status 1) Get-ChildItem -Force | Select-Object Mode,Name; Get-Command java,mvn,gradle -ErrorAction SilentlyContinue | Sele…
└ mvn.cmd C:\cust\apache-maven-3.9.12\bin\mvn.cmd
• Questions 3/3 answered
• 目前資料夾沒有專案,這個 HTTP 呼叫服務要以哪種形式建立?
answer: Spring Boot 服務
• 哪些失敗需要重試?
answer: 連線錯誤、逾時、429、5xx (Recommended)
• 第一版需要支援哪些 HTTP 方法?
answer: 僅 GET (Recommended)
會採用 Spring Boot,先支援 GET,並針對連線錯誤、逾時、HTTP 429 和 5xx 重試。設定中的「重試次數」會指首次呼叫失敗後的額外嘗試次數,例如設定 3 次,最多共呼叫 4 次;每次重試前固定等待設定的秒數。
• Browsing the web
• Searched the web for site.docs.spring.io/spring-boot system requirements Spring Boot 4.0 Java 25
• Questions 1/1 answered
• 這個 Spring Boot 服務要如何讓你呼叫及驗證?
answer: Service+執行範例 (Recommended)
• Proposed Plan
產生的執行計畫
# Spring Boot HTTP GET 重試服務
## 實作概要
在目前空白工作目錄建立 Maven 專案,採用 Java 25、Spring Boot 4.1.2 與 JDK java.net.http.HttpClient,提供可注入的同步 GET Service 及命令列執行範例,不新增 REST 端點。版本符合官方 Java 相容性要求。
## 服務與重試行為
- 提供 RetryingHttpClientService.get(URI uri),成功時回傳 HttpResponse<String>,保留狀態碼、標頭及本文。
- 共用一個 HttpClient Bean,每次嘗試建立 GET request 並設定請求逾時。
- HTTP 2xx 視為成功;連線/傳輸 IOException(含逾時)、HTTP 429、500–599 依設定重試。
- 其他非 2xx 立即拋出自訂 ApiCallException;不自動跟隨重新導向。
- max-retries 為首次呼叫之後的額外重試次數;設為 3 時,最多呼叫 4 次。
- 每次重試前固定等待設定秒數;最後一次失敗後立即拋出錯誤,不再等待。不採指數退避或 Retry-After。
- 例外保留嘗試次數、最後 HTTP 狀態碼(若有)與原始原因。執行緒中斷時保留中斷旗標並立即終止,不繼續重試。
- 記錄嘗試次數、失敗類型及等待時間,不記錄完整 URL 查詢參數或回應本文。
## 設定與執行範例
使用 application.yml、@ConfigurationProperties 與啟動驗證:
api:
client:
max-retries: 3
retry-delay-seconds: 2
connect-timeout-seconds: 5
request-timeout-seconds: 10
demo:
enabled: false
url: http://localhost:8081/example
- 重試次數與等待秒數允許 0;兩種逾時必須大於 0。無效設定使啟動失敗。
- Service 接收呼叫端提供的 HTTP/HTTPS URI;格式或協定不合法時立即報錯。
- 僅在 api.demo.enabled=true 時,由命令列 Runner 呼叫設定的 URL;成功輸出結果,失敗以非零狀態結束。
- README 說明設定、注入使用方式、執行指令,以及「重試 3 次=最多呼叫 4 次」。
## 驗證方式
使用 JUnit、可控制回應的本機 HTTP 測試伺服器與可替換的等待元件,避免測試真的等待數秒:
- 首次 200、204 成功,不重試。
- 429/5xx 後成功,驗證呼叫次數及等待次數。
- 持續失敗時,確認最多呼叫 1 + max-retries 次,且最後不等待。
- 400/401/404/302 立即失敗。
- 連線失敗與請求逾時會重試;中斷後立即停止並保留旗標。
- 重試次數為 0、等待為 0、無效設定,以及範例預設不執行。
- 執行 mvn test 與 mvn package,確認測試及封裝成功。
產輸執行計畫後,會詢問你是否要直接執行或是要停留在規劃模式。
沒有留言:
張貼留言