opencode×AI-Math
課後延伸

把需求說清楚,讓工作接得下去

這一章練習三件事:把想做的事交代清楚、遇到錯誤時提供足夠線索,以及讓下一次對話接得上。你不需要多裝工具,也不需要換模型。

一份任務要交代什麼

想像你請同學幫忙。他需要知道你要做什麼、資料在哪裡,以及做到哪裡算完成。給 agent 的需求也一樣。

要素你要回答的問題分群例子
目標我想知道什麼?比較群數改變時,分群結果有何差異
輸入資料或既有程式在哪裡?本專案的 lab1_cluster.py 與 sklearn digits
限制哪些方法或條件要保留?沿用 random_state=0,用 uv run python 執行
輸出要交付哪些檔案?新程式、圖檔與一段解釋,放在指定路徑
完成判準我要看到什麼才算完成?檔案確實存在、程式跑完、解釋對得上結果

不必每次都寫很長。工作坊已把共通規則放進 AGENTS.md,每次只補上這個任務的條件。

練習:先自己寫一份需求

請 agent 把 Lab 1 的群中心畫回手寫數字影像。先自己寫需求,再展開下面的參考寫法。這裡選 k=10 是為了觀察十個群中心,並不表示每群一定對應一個數字。

參考寫法

把下列文字貼到 OpenCode 對話裡:

請先讀 lab1_cluster.py 與 AGENTS.md,整理目前的資料前處理與分群參數。

我要觀察 k=10 的群中心,各自像哪些手寫數字。
請另寫 lab1_centers.py,保留原檔;沿用原本的資料前處理,
使用 random_state=0、n_init=10,將十個群中心各自 reshape 成 8×8。

把十張影像排在同一張圖,標出群編號,存成 figs/lab1_centers.png。
用 uv run python 實際執行,印出群中心的 shape 與圖檔路徑。
最後說明:為什麼群編號不能直接當成數字標籤?

這份需求指定了讀取來源、保留原檔、產圖方式與完成判準。如果你改成其他前處理,請先思考群中心能否直接還原成原本的像素尺度。

完成後自己開圖。確認十個群中心都出現、標籤是群編號,並用自己的話解釋其中一張模糊影像。agent 的解釋需要和你看到的結果相符。

把一個大任務分成幾次對話

不確定做法時,先讓 agent 提出步驟,再決定要執行哪一步。可以用 Tab 切換到 Plan,查看畫面上的模式標示;回到 Build 才開始寫程式。仍要閱讀每次的權限要求。

先不要修改檔案。請讀 lab1_cluster.py,告訴我若要比較不同 random_state,
哪些參數應該固定、需要保存哪些輸出,以及我能從比較中回答什麼問題。

看完後再給下一步:

請先只做讀取資料與執行一次分群的部分,另存為 lab1_repeat.py。
跑完後印出資料 shape、參數和分群指標,先不要加重複實驗。

等這一步能跑,再要求加入迴圈與圖。這樣發生錯誤時,你知道是哪一步引入的,也有機會在它大量產生檔案前調整方向。

出錯時怎麼求助

ModuleNotFoundError 是錯誤種類,下面的檔名與行號才說明它發生在哪裡。請保留從 Traceback 開始到最後一行的完整內容。不要只截取最後一個單字,也不要要求 agent 在看過錯誤前把整個專案重寫。

在原本執行程式的 PowerShell 或 Ubuntu 終端機確認位置:

pwd
ls

然後把下面的範本填完整,貼進 OpenCode:

我在 Windows PowerShell/WSL Ubuntu(請保留實際使用的一個)遇到錯誤。
目前資料夾:填入 pwd 的結果。
執行指令:貼上剛才實際執行的完整指令。
預期結果:說明原本應該產生什麼。
實際錯誤:貼上從 Traceback 到最後一行的完整文字。
已嘗試:列出做過的操作與結果,沒有就寫尚未嘗試。

請先根據這些證據找原因,再提出最小修正。
不要刪除既有輸出,也不要重裝整套環境。
若需要更多資訊,告訴我應該執行哪一個檢查指令。

錯誤內容可能包含自己的姓名或私人路徑;分享給同學前,把不需要的個人資訊遮掉。套件找不到時,先確認用的是 uv run python,並完成 uv sync。

網路模型暫時不能用

先確認網路,再重試一次。仍然失敗時,保留錯誤訊息,停下來找講師;可以先閱讀既有程式、圖片與教材的參考輸出,寫下自己的判讀。不要為了繼續操作而新增付款方式、升級方案或改接需要付費的模型。

Session、context 與壓縮

Session 是一串可回頭查看的對話;context 是模型這一次回應時能讀到的內容。程式會把對話、讀取的檔案與工具輸出放進 context,長任務不一定能一直保留所有細節。

目前狀況怎麼做
同一題還在進行,只是關掉終端機用 /sessions 找回正確的對話,核對名稱與內容
換了題目用 /new 開新對話,重新提供相關檔案與目標
同一題對話已很長先保存進度,再用 ctrl+p 搜尋壓縮功能,或按 ctrl+x c
壓縮後漏掉重要條件請 agent 重新讀取進度檔與原始程式,補上缺少的限制

壓縮會把舊內容整理成摘要,可能省去細節。檔案裡保存的公式、參數與結果,才是下一次可以重新讀取的依據。

續作練習:保存 notes/progress.md

先完成任一個 Lab。還在同一段對話時,請 agent 整理進度:

請整理目前這個 Lab 的進度,存成 notes/progress.md。
如果已經有這個檔案,先讀它,再更新這次已改變的內容。

請包含:
- 目前目標與已決定的限制
- 已完成的程式、圖與筆記的相對路徑
- 實際成功執行的完整指令
- 已看到的關鍵結果,以及它們支持什麼結論
- 尚未完成或不能確定的部分
- 下一個可以接著做的小步驟

只根據目前確實發生的事整理。沒有執行過的步驟不能寫成完成,
也不要為了寫進度而另做實驗。

打開 notes/progress.md,核對檔名與結果。特別留意 agent 有沒有把「準備做」寫成「已完成」。

接著輸入 /new,在新的對話貼上:

請先讀 AGENTS.md 與 notes/progress.md,再查看其中提到的相關檔案。
先不要修改檔案,用自己的話說明目前做到哪裡、哪一件事還不能確定,
以及你建議接下來做的第一步。

新的 agent 若能根據檔案說明進度,表示你已經把工作從一段聊天變成可以接續的專案。若它說錯,先修正進度檔,再要求繼續。

完成這章時

  • 我寫過一份包含目標、輸入、限制、輸出與完成判準的任務。
  • 我知道程式錯誤應連同執行指令與工作資料夾一起提供。
  • notes/progress.md 記錄了實際成果,沒有把未完成的步驟寫成完成。
  • 我在新對話中請 agent 讀取進度,並核對它的理解。

接著可看 MCP、skills 與 subagent,把反覆使用的流程寫成自己的 skill;或到 數學應用 挑一個新題目。

參考資料