生活分享
AI 寫的程式能信嗎:審查、測試與安全檢查清單
代理寫完程式、按下合併之前先做完這張清單:讀 diff 確認改動沒有超出你交代的、跑測試並檢查斷言是不是真的在驗行為、確認相依套件存在且授權可用並鎖定版本、把金鑰與 .env 擋在 repo 外、檢查輸入驗證與注入、把代理的權限縮到最小,最後用 PR 範本、CI 與 Dependabot 固定成流程。依 OWASP、GitHub 官方文件與三家代理的官方安全說明整理,並說明什麼時候該找人審。
閱讀時間約 8 分鐘

AI 代理AI 代理(AI Agent)是什麼:從回答問題到完成任務AI 代理是能依目標與環境回饋選擇下一步的軟體系統,常由語言模型、工具與執行控制組成。本文用整理活動報名資料的情境,區分聊天回答、固定工作流程與代理任務,說明規劃、實際操作和完成證據為何不同。附交辦與驗收方法,幫你看懂代理能做哪些事、何時應停下,以及為什麼自主程度不等於可靠程度。閱讀全文寫程式的速度不是問題,問題是要不要把產出的改動直接合併。可以用,但不能跳過審查,而且要看的地方跟你自己寫程式時不一樣:代理常犯的錯有固定幾種,改動超出交代、測試寫來配合實作、引用不存在的套件、把金鑰寫進程式碼。
這篇把合併前該做的事排成一張初學者也做得到的清單,每一項說明怎麼檢查、用什麼工具接住,最後變成 PR 範本與 CI 設定。內容依 OWASP、GitHub 與三家代理的官方文件整理,查證日是 2026 年 9 月 14 日。
先讀 diff,再談其他
第一步不是跑測試,是打開改動本身。代理很常順手多做一點:重構你沒提到的檔案、改設定檔、刪掉看起來沒用的程式;單看每行合理,合起來卻改變行為。
git status
git diff --stat
git diff
git log --oneline main..HEAD讀的時候問三個問題:檔案在範圍裡嗎?有沒有刪掉我沒要求刪的?有沒有一段我看不懂?第三個最重要,看不懂就不要合併。OWASP 的 LLM大型語言模型(Large Language Model)是什麼大型語言模型從大量資料學習語言與其他模式,依上下文處理文字、生成回答或提出工具請求。本文以失物招領紀錄為例,說明 token、參數、預訓練、提示詞與上下文如何配合,區分模型、聊天產品、搜尋與外部工具,並解釋為何流暢答案仍需查證。讀完能更精確描述任務,知道何時該補檔案、要求工具計算或保留無法確認的答案。閱讀全文 Top 10 把過度代理(Excessive Agency)列為 LLM06:2025,成因之一是系統拿到超出需要的功能與權限。
用 AI 寫程式前該懂的 Git:分支、提交與還原用 AI 寫程式前該懂的 Git:分支、提交與還原讓 AI 代理改你的專案之前,先有一個回得去的檢查點。這篇依 Git 與 GitHub 官方文件,只教「還原得回來」用得到的那一小套:安裝與第一次設定、init 到 commit 的最小循環、用 git diff 看代理改了什麼、開分支再放手,以及 restore、reset、revert 三種還原分別會不會丟掉東西,附 .gitignore 與推上 GitHub 的步驟。閱讀全文
你也可以請代理先審自己一次:不是把判斷交給它,而是逼它把做了什麼列成清單,你再拿這份自述對照 diff。
請先不要修改任何檔案,只做一次自我審查,並用這五點回答我:
1. 這次改動包含哪些檔案?其中哪些不在我一開始交代的範圍內?
2. 有沒有刪除或改寫我沒有要求更動的程式?逐項列出並說明理由。
3. 新增了哪些相依套件?每一個附上官方套件頁面網址、授權條款,以及為什麼非加不可。
4. 有沒有把金鑰、密碼、連線字串或測試帳號寫進程式碼或設定檔?
5. 使用者輸入在哪些地方進入資料庫查詢或系統命令?用的是參數化查詢嗎?
最後列出三個你自己最不確定、建議我人工確認的地方。如果它一次改十幾個檔案而你讀不動,那是任務給得太大,把需求拆小、先提計畫。
給程式代理的提示模式:先規劃、再實作、最後驗證給程式代理的提示模式:先規劃、再實作、最後驗證和程式代理合作,關鍵不是把需求丟出去,而是把一次任務拆成規劃、實作、驗證三段。這篇依 Anthropic、OpenAI 與 Google 三家官方文件,說明一則好提示詞的四個要素(目標、背景、限制、完成條件)、規劃階段的 Plan Mode 與 /plan、實作階段怎麼限制範圍並要它自己跑測試、驗證階段怎麼看 diff 與逐條核對,附五則可直接複製的範本、常見失敗的追問方式與一張三段式流程圖。閱讀全文
測試要看斷言,不是看有沒有綠燈
第二步是跑測試,並讓代理補測試。陷阱在於:測試也可能是 AI人工智慧(Artificial Intelligence)是什麼人工智慧是涵蓋多種技術與應用的總稱,不等於聊天機器人,也不必一定會產生文字。本文從 OECD 的系統定義出發,以照片分類和社區資源推薦為例,說明輸入、推導、輸出與人的目標如何連結,整理它與機器學習、深度學習和生成式 AI 的關係。讀完能用具體問題判斷一項 AI 功能在做什麼,並分辨能力、自治程度與可信度。閱讀全文 為了讓實作通過而寫的。它可能把斷言寫成「有回傳就好」,或把現在的輸出照抄進期望值,於是測試會過,卻是永遠亮綠燈的儀表板。
- 斷言驗的是回傳值等於具體結果,還是只驗沒拋出例外?
- 期望值是從需求推出來的,還是照抄現在的輸出?
- 錯誤輸入、空值、權限不足有沒有測到?
- 故意把實作改錯一行,測試會不會紅?
最後一項值得養成習慣:不必懂整個測試框架,只要把回傳值改錯、看測試會不會變紅。
Claude Code|除錯與補測試Claude Code|除錯與補測試從重現問題走到修正與回歸測試。這篇用一個刻意準備的待辦錯誤,示範如何把症狀轉成重現步驟、定位原因、補測試並驗證修正。材料中的問題是勾選一筆待辦時改到其他項目;你會先看到預期失敗,再確認修正後同一案例通過,避免只憑「看起來正常」就結束除錯。閱讀全文
相依套件:名字、授權與鎖定版本
AI 產出的程式常帶進新套件,這是最該停下來確認的一步。OWASP 的 LLM09:2025 Misinformation 直接點名:模型會建議不安全或不存在的程式庫,而攻擊者會找出常被幻覺出來的名字,搶先發佈同名的惡意套件。
這不是假想。發表在 USENIX Security 2025 的研究分析 16 個程式碼生成模型、576,000 筆樣本,商用模型的套件幻覺率至少 5.2%,開源模型 21.7%,共蒐集到 205,474 個不存在的套件名。
- 確認存在:到 npm 或 PyPI 官方頁面看發佈紀錄、維護者與更新時間,剛建立、下載量極低的別裝。
- 看授權:OWASP 的 LLM03:2025 Supply Chain 提醒,開源與專有授權的法律要求不同,沒管理就是風險。
- 鎖定版本:照鎖定檔安裝,否則審過的和實際跑的不是同一份。
npm ci
pip install --require-hashes -r requirements.txtnpm 官方文件說明 npm ci 必須有 package-lock.json、絕不寫回鎖定檔,和 package.json 對不上時直接報錯。pip 的安全安裝文件說明,雜湊檢查模式用 requirements.txt 裡的雜湊值防止遠端竄改,並要求所有相依用 == 鎖版。
AI 幻覺(Hallucination)是什麼?把流暢回答拆成可查主張AI 幻覺(Hallucination)是什麼?把流暢回答拆成可查主張AI 幻覺是模型產生看似合理、卻缺乏事實支持或違背提供資料的內容。本文用一段虛構展覽介紹,示範如何拆出可查主張、核對原始來源,區分支持、矛盾與尚未確認;也說明附上連結、再次提問或兩個模型答案相同,為何仍不足以證明正確,並整理使用引用與不確定回答時的實際界線。閱讀全文
金鑰、注入,與會讀網頁的代理
金鑰、資料庫密碼與 .env 檔不要進 repo,沒有例外。代理為了讓程式跑起來,很容易把金鑰寫進程式碼。把 .env 加進 .gitignore,程式改從環境變數讀值。
更可靠的是讓平台幫你擋。GitHub 的 secret scanning 會掃描所有分支的整個 Git 歷史,找出寫死的 API 金鑰、密碼與 token;push protection 在推送當下就擋,範圍包括命令列推送、網頁介面的 commit、檔案上傳與 REST API。公開 repo 免費就能用。
接著看輸入驗證。OWASP Top 10 的 2025 年版把注入列為 A05:2025,涵蓋 SQL、作業系統命令、ORM、LDAP 等,首選做法是使用不經過直譯器、或提供參數模型參數(Model Parameters)是什麼模型參數是訓練時調整、用來把輸入轉成輸出的數值,例如權重與偏差。本文用簡單算式示例說明參數如何影響預測,區分模型參數、訓練超參數、提示詞與生成設定,並解釋參數量、數值精度和啟用參數為何是不同指標。讀完能更準確閱讀模型規格,理解參數增加不等於知識逐條增加,也不代表每次聊天都在重新訓練模型。閱讀全文化介面的安全 API;SQL 注入防護速查表更直接:教人寫查詢就該教他用綁定變數的預備語句。看 AI 寫的查詢,重點是輸入有沒有被串進字串。
如果代理會讀網頁、讀 issue、讀別人傳來的檔案,還要多防一種注入。OWASP 的 LLM Top 10 把提示詞注入排在第一位 LLM01:2025。Anthropic 的 Claude Code 安全文件把它定義為攻擊者插入惡意文字、覆蓋或操縱 AI 助理的指令,說明 curl、wget 這類命令預設不自動核准,並建議:核准前先看命令、不把不可信內容直接餵給模型、用虛擬機器執行腳本。
提示詞注入(Prompt Injection)是什麼提示詞注入(Prompt Injection)是什麼提示詞注入是讓模型把不可信內容中的文字當成應遵循的指令,進而偏離原本任務。本文用閱讀活動報名郵件的原創案例,說明直接與間接注入、資料和權限的界線,以及為何檢索、引用格式或一句「忽略惡意指令」不能包辦防護,並整理外部內容分隔、工具授權與人工確認各自能阻止的失敗。閱讀全文
權限與沙盒:只給它需要的那個目錄
前面是看結果,這一項是事先設好邊界。OWASP 的 LLM06:2025 建議很直白:功能與權限限制在最小必要範圍,並用人工介入機制,讓高影響的動作先有人核准。
- Anthropic:Claude Code 手動模式以唯讀權限起步,要編輯檔案或執行命令都先問你,也只能寫入啟動時所在的資料夾與其子資料夾。
- OpenAI:Codex 預設關閉網路存取,本機用作業系統層級的沙盒把可觸及範圍限制在工作區;官方建議有版本控制的資料夾用 Auto,沒有的用唯讀。
- Google:Gemini CLI 的受信任資料夾在尚未信任時進入受限安全模式,不載入工作區的 settings.json 與 .env,也不能裝擴充套件。
原則一樣:先在唯讀模式讓它讀懂專案、提計畫,方向對了再放開寫入。
沙盒(Sandbox):讓 AI 執行工具時有明確邊界沙盒(Sandbox):讓 AI 執行工具時有明確邊界沙盒以系統層限制程式能接觸的檔案、網路和資源,常用來隔離 AI 代理執行的程式或工具。本文用整理活動報名資料的情境說明可讀範圍、輸出目錄、網路限制與驗證,區分沙盒、容器、虛擬機器和提示詞規則,也解釋為什麼放進沙盒仍不能任意提供機密或正式系統權限。讀完能看懂隔離保護的是哪一層,以及它沒有替你檢查哪些事情。閱讀全文
Claude Code|Plan Mode 與權限模式Claude Code|Plan Mode 與權限模式在規劃與實作之間控制操作權限。Plan Mode 用來先探索與提出方案,權限模式則決定工具操作如何獲准。本篇會在待辦專案先做一次規劃,再切到可審查的實作模式,並用一條精確測試規則理解 allow、ask、deny。你會知道「我說不要改」與工具層的授權控制有何差別。閱讀全文
Claude Code|專案資料與操作安全Claude Code|專案資料與操作安全辨識金鑰、私人資料與高影響操作。讓 Claude Code 接觸專案前,先知道哪些資料可以讀、哪些操作需要額外確認,以及產出會保存在哪裡。本篇以待辦網站建立一份可操作的安全基準,涵蓋秘密、私人資料、外部文字、工具授權與高影響操作,並提供可自行驗證的檢查方式。閱讀全文
把檢查做成流程,並知道什麼時候該找人審
上面每一項都能靠自律做到,但自律會在趕時間時失效,寫成檔案讓工具替你記住。
- PR 範本:放一個 .github/pull_request_template.md 寫成勾選清單;GitHub 說明也可放在根目錄或 docs,合併進預設分支後協作者都看得到。
- CI:GitHub Actions 的工作流程檔放在 .github/workflows,官方把「為每一個 pull request 建置與測試」列為典型用途。
- 相依更新:開啟 Dependabot alerts 與 security updates,套件有已知漏洞時自動開 PR 升到修補版本。
- 程式碼掃描:code scanning 用 CodeQL 找漏洞,可排程也可在推送時觸發;公開 repo 可直接用,私有 repo 要 GitHub Code Security 授權。
## 這個 PR 做了什麼
## 合併前檢查
- [ ] 我讀完整份 diff,沒有超出需求的檔案改動
- [ ] 測試的斷言在驗行為,故意改壞會變紅
- [ ] 新增的相依套件確認存在、授權可用,並照鎖定檔安裝
- [ ] 沒有金鑰、密碼或 .env 進入 repo
- [ ] 使用者輸入走參數化查詢,沒有字串拼接
- [ ] CI 全部通過
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
最後,有些改動不該由你加上 AI 就決定,下面幾種情況要找人看過再合併。
- 碰到身分驗證、授權、付款、個資或金鑰管理
- 涉及資料庫遷移、刪除等回不去的操作
- 你看不懂那段程式,代理的解釋也無法驗證
- 要上線給真實使用者,而你是第一次做
- 代理順手改了 CI 或部署設定
人工介入(Human-in-the-loop):讓人有資訊也有決定權人工介入(Human-in-the-loop):讓人有資訊也有決定權人工介入是在 AI 工作流程中設計人的判斷、修正或批准節點,不只是加一個確認按鈕。本文用活動公告發布示範草稿審閱、修改後重查、批准範圍與執行結果,說明即時介入和事後抽查的差別,也討論資訊不足、疲勞與權限不清如何讓人形同橡皮圖章。讀完能檢查人是否真正看得到證據、改得了結果,並能在必要時停止流程。閱讀全文
安全防護機制(Guardrails)是什麼安全防護機制(Guardrails)是什麼安全防護機制(Guardrails)是放在 AI 輸入、資料、回答與工具操作周圍的一組檢查和限制。本文用二手物品刊登助手的原創案例,說明哪些規則適合程式驗證、哪些需要模型判讀或人工確認,以及阻擋、修正與交回處理的差別,幫你理解防護如何維持正常工作,同時避免把單一篩選器當成完整安全保證。閱讀全文
閱讀完整文字說明
流程圖。起點是代理產出 diff,接著依序通過五道關卡:關卡一讀改動範圍,確認沒有你沒交代的檔案;關卡二跑測試並看斷言,故意改壞一行看測試會不會變紅;關卡三查套件與金鑰,確認套件存在、授權可用、版本鎖定,且 .env 沒有進入 repo;關卡四看注入與權限,使用者輸入走參數化查詢,代理的可寫目錄與網路存取限制在最小必要;關卡五是 CI 與 PR 範本,lint 與測試通過、勾選清單勾完才合併。任何一關沒過,就把改動退回代理重做,或找懂這塊的人審,回到最左邊重新走一次,不要往右推。
| 檢查項目 | 怎麼檢查 | 用什麼工具 |
|---|---|---|
| 改動範圍 | 逐行讀完,沒有你沒交代的改動 | git diff --stat |
| 測試斷言 | 驗行為還是有回傳就好;改壞會不會紅 | 專案的測試指令 |
| 套件真偽 | 官方頁面有發佈紀錄與維護者 | npm、PyPI 官網 |
| 版本鎖定 | 照鎖定檔安裝,不讓它自己升版 | npm ci、pip 的 --require-hashes |
| 已知漏洞 | 有修補版本時自動開 PR | Dependabot |
| 金鑰外洩 | .env 進 .gitignore,推送當下攔截 | secret scanning、push protection |
| 注入風險 | 輸入沒被直接串進 SQL 或命令 | 參數化查詢、code scanning |
| 代理權限 | 可寫目錄與網路是最小必要 | 權限模式與沙盒 |
同主題延伸閱讀
生活分享
Claude Code、Codex 搭本機模型:兩種接法怎麼選
Claude Code 與 Codex 搭配本機模型有兩種接法:代理照常連雲端、把大量雜務交給腳本或 MCP 工具去問本機模型,或是把代理的模型整個換成本機模型。這篇用資料能不能出門、上下文開得夠不夠長、工作的類型三個問題幫你選,並對照 Ollama、LM Studio、Anthropic 與 OpenAI 的官方文件,分清楚本機權重、Ollama 的 cloud 標籤與供應商端點是三種不同的東西。
生活分享
把本機模型包成 MCP 工具,Claude Code 與 Codex 共用一支伺服器
用官方 Python SDK 寫一支 stdio 的 MCP 伺服器,把本機的 Ollama 模型包成工具,Claude Code 與 Codex 就能共用:工具只收 inbox 底下的路徑,只回分類結果與結果檔路徑,不回信件原文。文中列出兩邊的登記指令、逾時與輸出上限的官方預設值,以及換成別家本機模型只改環境變數 LOCAL_MODEL 的做法,步驟都來自官方文件。
生活分享
把 Claude Code、Codex 整個換成本機模型:Ollama 與 LM Studio 設定與還原
Ollama、LM Studio 與 Codex 的文件寫了把 Claude Code、Codex 整個換成本機模型的接法:Ollama 用 ollama launch 一行指令或手動設定,LM Studio 先開本機伺服器再設環境變數或加 --oss。這篇把四種組合的指令、兩家文件建議的上下文長度、Claude Code 用 /status 確認連到誰的方法,以及用完怎麼還原整理在一起;需要先裝好 Ollama 或 LM Studio,並且已有 Claude Code 或 Codex。
生活分享
Claude Code、Codex 搭本機模型的注意事項:開工前的檢查清單
Claude Code 或 Codex 搭本機模型之前,先照一張表逐項核對:代理讀不讀得到原始檔、現在連的是誰、標籤是不是 :cloud、上下文實際開多長、逾時與輸出量、怎麼驗收。每一項寫怎麼檢查,並指出詳見同組哪一篇,另外收進供應商端點、條款與授權、繁體中文用字檢查;檢查方法取自 Anthropic、OpenAI、Ollama 與 DeepSeek 的官方文件。
引用本文的文章
最新旅遊情報攻略

情報
2026 韓國楓葉預測:雪嶽山 10 月 20 日、首爾近郊 10 月底、內藏山與漢拏山 11 月上旬
韓國山林廳 2026 年 9 月 22 日公布的楓紅高峰預測:雪嶽山 10 月 20 日,春川、國立樹木園到首爾植物園落在 10 月 28 日到 11 月 2 日,內藏山 11 月 4 日、漢拏山 11 月 6 日,整體比最近 5 年晚約 0.8 天。整理各地楓樹與銀杏的預測日、首爾出發怎麼排,以及出發前去哪裡看即時楓況。2026 年 10 月查證。
- 季節活動
- 自然
- 觀景

攻略胡志明市
胡志明市到頭頓一日遊:白藤碼頭搭高速船、船票與班次,下船就是胡梅纜車與耶穌基督像
人在胡志明市挪一天去頭頓看海:市中心的白藤高速船碼頭搭船,航程 120 分鐘到頭頓的胡梅碼頭,平日成人 320,000 越南盾、週末 350,000,回程末班平日 15:00。下船就是胡梅纜車站,同一條路上有白宮,小山頂上是耶穌基督像。平日一天只有兩班船,整天要從末班船倒推著排。
- 交通
- 行程範例
- 海灘

攻略沖繩
沖繩不開車攻略:單軌只到浦添,美麗海水族館要坐兩個多小時的巴士,回那霸的最後一班直達車 17:22 就開走
不租車的沖繩怎麼移動:那霸市區靠沖繩都市單軌電車(ゆいレール),那霸機場站到終點てだこ浦西 19 站、17 公里、37 分鐘,一日券 1,000 日圓;美麗海水族館有那霸機場直達的高速巴士,單程 2,000 日圓起、官方時刻表上 2 小時上下,下車後還要走 10 分鐘;古宇利島要在今帰仁村役場轉車,當天來回光坐車就六個半小時;回程的最後一班直達車 17:22 就從記念公園前開走(2026 年 9 月查證)。
- 交通
- 行程範例
- 預算
資料來源
- OWASP Top 10 for LLM Applications 2025(OWASP GenAI Security Project 官方清單) · 查證日期:
- OWASP LLM03:2025 Supply Chain(官方風險頁,含授權與過時元件風險) · 查證日期:
- OWASP LLM06:2025 Excessive Agency(官方風險頁,最小權限與人工核准建議) · 查證日期:
- OWASP LLM09:2025 Misinformation(官方風險頁,不存在程式庫與套件幻覺攻擊) · 查證日期:
- OWASP Top 10:2025 A05:2025 Injection(官方類別頁與防護建議) · 查證日期:
- OWASP SQL Injection Prevention Cheat Sheet(官方速查表,預備語句與參數化查詢) · 查證日期:
- GitHub Docs:About secret scanning(掃描範圍與公開 repo 免費適用) · 查證日期:
- GitHub Docs:About push protection(推送當下攔截密鑰的範圍) · 查證日期:
- GitHub Docs:Removing sensitive data from a repository(先撤銷或輪換密鑰) · 查證日期:
- GitHub Docs:About Dependabot security updates(自動開 PR 升到修補版本) · 查證日期:
- GitHub Docs:Dependabot options reference(dependabot.yml 的必填欄位與位置) · 查證日期:
- GitHub Docs:About code scanning(CodeQL、觸發時機與授權條件) · 查證日期:
- GitHub Docs:Creating a pull request template for your repository(範本檔案位置) · 查證日期:
- GitHub Docs:Understanding GitHub Actions(工作流程目錄與 pull request 測試) · 查證日期:
- npm Docs:npm ci(需要鎖定檔、不寫回鎖定檔、對不上就報錯) · 查證日期:
- pip Docs:Secure installs(雜湊檢查模式與版本鎖定要求) · 查證日期:
- Anthropic:Claude Code Security(權限架構、提示詞注入防護與使用建議) · 查證日期:
- OpenAI:Codex Agent approvals & security(沙盒模式、核准政策與網路預設) · 查證日期:
- Google:Gemini CLI Trusted Folders(未信任資料夾的受限安全模式) · 查證日期:
- We Have a Package for You!(USENIX Security 2025 套件幻覺研究論文) · 查證日期: