Grok 4.20 Multi-Agent 不是更聰明的 Grok,而是更可靠的那個——順便把它跟 4.3 的差別講清楚

先說一個我自己差點踩進去的坑:看到 xAI 同時有 grok-4.20grok-4.3,第一直覺一定是「4.3 比 4.20 新,那就無腦選 4.3」。版本號 4.3 > 4.20 嘛,這還用問?

結果完全搞錯方向。

xAI 的 Grok 家族不是一條「越新越強」的直線,而是一張依用途分岔的路線圖。更尷尬的是,那個看起來版本號比較小的 grok-4.20-multi-agent,反而握著 4.3 完全沒有的兩張王牌。如果你正準備接 xAI 的 API、或在 OpenRouter / Vercel AI Gateway 上挑模型,這篇就是要把這團亂帳算清楚——順便講明白一件最多人誤會的事:Multi-Agent 這個變體,賣的根本不是「更聰明」,而是「更可靠」。

這兩個字差很多,後面慢慢說。

一支由多個 AI 代理組成的委員會,彼此辯論交叉檢查,中央領隊代理綜整結論

Grok 4.20 Multi-Agent 到底是什麼:一支內建的 AI 委員會

xAI 官方文件 的講法,grok-4.20-multi-agent 不是一顆「更大顆」的模型,而是一套即時多代理研究(Realtime Multi-Agent Research)的編排機制。

白話講,你丟一個問題進去,它不是叫「一個 Grok」回答你,而是當場開一場小組會議:

  • 派出多個專職子代理同時開工,各自負責研究的不同面向——有的去搜網路、有的搜 X、有的分析資料、有的做綜整;
  • 這些代理會互相討論、交叉檢查、甚至辯論
  • 最後由一個 leader agent(領隊代理) 把所有人的意見收攏,產出你看到的那份最終答案。

媒體報導的四代理人設 蠻有畫面:Grok 當協調者、Harper 跑研究、Benjamin 顧邏輯數學、Lucas 專門唱反調。對,有一個代理的職責就是挑其他人的毛病。這套「對抗式辯論」結構不是 xAI 拍腦袋想的,源頭是 2023 年 Du、Li、Torralba、Tenenbaum、Mordatch 那篇論文,當年就證明了多個 LLM 實例彼此提案、跨輪辯論,能顯著壓低幻覺、把推理品質拉上去。

多代理協作流程圖:問題進入 Leader Agent,分派研究、邏輯、反方三個子代理交叉辯論後綜整答案

這裡有個很容易誤會的設計:預設只有 leader agent 的輸出會回傳給你。那些子代理的中間推理、工具呼叫、吵架過程,全部加密藏起來,除非你在 xAI SDK 裡把 use_encrypted_content 設成 True,否則看不到。好處是回應乾淨,壞處是你預設看不到它「怎麼吵出這個結論」的。

可靠勝過聰明:左側單一巨大腦節點代表原始智力,右側一群小節點組成驗證盾牌代表可靠性

特色:它不是讓每個代理變聰明,是讓答案變可靠

來到最關鍵、也最多人搞錯的地方。

多代理架構提升的是可靠性、覆蓋面、引用品質,而不是原始智力。這句話一定要刻在腦門上,因為它直接決定你該不該用它。

看數據就懂了。Artificial Analysis 的 Intelligence Index 上,Grok 4.20 base 拿 48 分,排到第 8,落後前段班一截——GPT-5.5、Gemini 3.1 Pro、Claude Opus 等旗艦的智力指數約落在 57 到 60 。編碼也補不上:一篇評測引用 xAI 自報數字 ,Grok 4.20 的 SWE-bench 約 75%(廠商自報,第三方獨立測試更低),對上 Claude Opus 4.6 的 80.8%,還是沒贏。

換句話說,多代理不會把每個子代理變成比 Claude 還強的腦袋——它們本質上還是同一個 backbone 分身出來的。它真正幫你的,是把「一次推理會漏掉的盲點」用一群代理互相補位、互相打臉的方式補起來。它換到的東西很實在:basenor 報導 的小標直接寫「幻覺率砍掉三分之二(Hallucination Rate Cut by Two-Thirds)」,而 Artificial Analysis 的測試中,Grok 4.20 的非幻覺率約 78% (此為 AA 測試指標,非通用定義)。

所以結論很簡單也很反直覺:

如果你的任務是「想得更深」或「寫出更好的 code」,多代理補不上那個智力差距,老實去找 Claude 或 GPT。
如果你的任務是「給我一份查過、吵過、附引用、不要亂講的可靠結論」——這才是它的主場。

另一個實用特色是深度可調。你能直接指定要幾個代理協作,官方就兩檔:

設定代理數適合代價
快查4 agents聚焦、單點的查詢token 較省、較快
徹底16 agents多面向、複雜的深度研究token 暴增、明顯變慢

16 代理基本上就是把那個委員會放大四倍,更多專職實例去翻邊角案例。但官方也直白警告:16 代理「顯著」比 4 代理更耗 token、更慢,別無腦開到底。

用途在哪:適合與不適合,講清楚

光講概念太虛,直接上 code。它原生吃 web_searchx_search,server 端會自動跑「搜尋 → 分析 → 綜整」的研究迴圈,你不用自己串 agent loop:

import os
from xai_sdk import Client
from xai_sdk.chat import user
from xai_sdk.tools import web_search, x_search

client = Client(api_key=os.getenv("XAI_API_KEY"))
chat = client.chat.create(
    model="grok-4.20-multi-agent",
    agent_count=16,                     # 4 = 快查,16 = 徹底
    tools=[web_search(), x_search()],   # 內建工具,server 端自動跑
)
chat.append(user(
    "比較前三大 EV 廠的電池技術、續航、充電基建與 2026 銷售預估,"
    "用表格呈現,並附上 2025-2026 的來源引用。"
))

for response, chunk in chat.stream():
    if chunk.content:
        print(chunk.content, end="", flush=True)

注意官方的 prompt 心法:別問太空泛。「跟我說說電動車」這種問法會浪費掉多代理的價值;明確指定「比較哪幾家、哪些維度、要什麼格式、引用哪個年份的來源」,它才會發揮。多代理在「你要求結構化輸出」時表現最好。

那到底什麼時候該掏出它?綜合多家評測(aitoolbriefingbuildfastwithaidatastudios )的共識,它的甜蜜點只有一種——任務夠大、夠難、證據夠多,需要多視角而不是一條單一推理路徑

  • 市場 / 競品研究:多代理分頭查不同來源,再綜整成一份有引用的報告
  • 決策分析:那個唱反調代理會幫你壓力測試,揪出單一觀點的盲點
  • 科學 / 技術寫作:需要跨領域比較、附證據引用
  • 多步驟深度研究:邊搜網邊修正,還支援多輪追問深挖(previous_response_id

反過來,這些情況請不要用它,會又貴又慢還不划算:

  • 純寫程式、大型重構 → 去找 Grok Code Fast 或 Claude
  • 單純「想更深」的難題 → Claude / GPT 的單模型推理更強
  • 日常聊天、簡單問答 → 殺雞用牛刀,token 燒到你心痛

講到燒 token,這是最大的雷,要特別拉出來講。官方計費規則 寫得很清楚:leader 跟所有子代理消耗的 token 全部都算錢,每個代理各自呼叫的工具也全部計費。再加上 Multi-Agent 變體的單價本身就比較貴——OpenRouter 上 是 $2 / 1M 輸入、$6 / 1M 輸出,而一般 Grok 路線才 $1.25 / $2.5。所以一次 16 代理的請求,token 帳單是普通單代理的好幾倍,不誇張。沒先想清楚就開 16 代理跑日常任務,月底帳單會讓你懷疑人生。

還有幾個 API 限制也得知道,免得寫到一半才發現踩雷:

  • 不支援 OpenAI Chat Completions API——只能用 xAI SDK 或 Responses API
  • 不支援 client-side / 自訂 function calling——只能用內建工具(web_search、x_search、code_execution、collections_search)跟遠端 MCP
  • 不支援 max_tokens 參數

4.20 vs 4.3:不是版本高低,是路線分工

好,回到開頭那個讓我差點選錯的問題。Grok 4.3 跟 Grok 4.20 到底誰才是「正解」?

答案是:看路線,不看版本號。

Grok 4.3 在 2026/04/30 全量上線 (先有約兩週、$300/月的 SuperGrok Heavy beta),定位是新一代旗艦推理模型,主打 agentic 行為跟指令遵循,而且推理「恆開」——每次回應都先走一遍 chain-of-thought,不用你手動切。它在 Intelligence Index 拿 53 分,比 4.20 的 48 高了 4 到 5 分,在 agentic 的 GDPval-AA 上更是大勝 4.20 三百多分 。價格還砍很兇,輸入輸出都壓到 $1.25 / $2.5。

聽起來 4.3 完勝?但魔鬼在細節。YingTu 的選型指南 講得很精準:4.3 確實取代了多數「第一方文字 API」的舊路線,但它沒有抹掉 4.20 的兩個獨門路線——

比較項Grok 4.20(含 Multi-Agent)Grok 4.3
定位超長上下文 / 多代理研究新旗艦推理(恆開 CoT)
上下文視窗2,000,000 tokens1,000,000 tokens
智力指數4853
Multi-Agent✅ 獨有
影片輸入✅ native,≤5 分鐘 1080p
檔案輸出有限✅ PDF / PPTX / XLSX
價格(輸入 / 輸出,每 1M)一般 $1.25 / $2.5;MA 變體 $2 / $6$1.25 / $2.5
知識截止較早2025/12

看到沒?4.20 守住的是 2M 超長上下文multi-agent 這兩塊,剛好都是 4.3 沒有的。而 4.3 獨佔的則是 native 影片輸入PDF/PPTX/XLSX 檔案輸出。這根本不是誰取代誰,是各守一塊地盤

模型選型如同一條分岔的高速公路,依任務需求通往不同路線

那到底怎麼選?一張決策樹收工

把上面那堆濃縮成一句可以直接照做的決策邏輯:

Grok 模型選型決策樹:依超大文件、深度研究、影片/檔案、純編碼等條件分流到不同 Grok 模型

簡單翻成白話:

  • 深度研究 / 市場調查 / 多視角決策,而且要引用、要交叉驗證 → Grok 4.20 Multi-Agent
  • 日常推理、聊天、多步編碼、agentic 工作流Grok 4.3(CP 值最高的新預設)
  • 餵超大文件(>1M token)Grok 4.20 的 2M 路線
  • 要分析影片、要直接產出檔案 → 只能 Grok 4.3
  • 純編碼大型重構Grok Code Fast;想更省 → Grok 4.1 Fast

所以別再用「哪個版本號比較大」來挑 Grok 了——grok-4.20-multi-agent 那個看似落伍的編號底下,是一台「深度研究 + 自我驗證」的專用引擎,它願意在你需要的時候,派一整支委員會幫你把結論吵過、查過、不亂講。下次站在 model 選單前,先別看版本號,問這個任務要的是更聰明還是更可靠,再選——這比較準。


參考資料

Claude Code 動態工作流程實戰:一個對話塞不下時,就讓上千個 subagent 一起上

環境與前置條件
- Claude Code v2.1.154 以上claude --version 先確認)
- 付費方案(Pro / Max / Team / Enterprise)或 API / Amazon Bedrock / Google Vertex AI / Microsoft Foundry
- Pro 方案要先到 /config 把「Dynamic workflows」那一列打開
- 功能狀態:research preview(2026-05-28 隨 Claude Opus 4.8 一起發布),行為可能還會變
- 預設知識:你已經用過 Claude Code、知道 subagent 跟 slash command 大概是什麼

我第一次認真用 /deep-research 是想查一個 Node.js 權限模型的版本差異。我按下 Enter,然後——畫面沒有一行一行慢慢吐字,而是冒出一個背景任務面板,裡面有十幾個 agent 各自跑去搜不同角度、互相打架、把站不住腳的論點砍掉,最後丟回一份標好引用的報告。我那條對話從頭到尾還是空的、隨時能繼續打字。

那一刻我才意識到,Claude Code 的玩法被改寫了。過去 subagent 是「Claude 一輪一輪決定要派誰」,現在 Dynamic Workflows(動態工作流程) 把整個編排計畫搬進一段 JavaScript 腳本,由一個獨立 runtime 在背景跑,規模直接拉到單次最多 1,000 個 subagent。這次更新(細節見 The New Stack 的報導 )給我的整體感覺就一句話:過去那種「一次小心翼翼的單一 pass」,不再是預設玩法了。

這篇文章我會把它從頭講到尾——它到底是什麼、怎麼觸發、腳本長怎樣、pipelineparallel 到底差在哪(這裡超多人寫錯),還有那些一不小心就會燒掉一堆 token 的雷。

中央編排節點向外輻射出大量 subagent 節點的示意圖

Workflow 到底是什麼?跟 subagent、skill 差在哪

先把名詞釐清,不然後面會一直打結。Claude Code 裡能跑「多步驟任務」的東西其實有三種:subagent、skill、workflow。它們最核心的差別,官方文件 講得很精準——差在「誰持有那個計畫(who holds the plan)」。

Subagents Skills Workflows
本質 Claude 生出來的 worker Claude 遵循的一組指示 runtime 執行的腳本
誰決定下一步 Claude,一輪一輪 Claude,照著 prompt 腳本本身
中間結果放哪 Claude 的 context Claude 的 context 腳本變數
可重複的是什麼 worker 定義 那組指示 編排邏輯本身
規模 每輪幾個 同 subagent 每次 run 數十到數百個 agent
中斷怎麼辦 重跑那一輪 重跑那一輪 同 session 內可 resume

用 subagent 跟 skill 的時候,Claude 自己是那個指揮官:它一輪一輪決定接下來生什麼,而且每個結果都會掉回它的 context 裡。問題是 context 是有限的,當你要掃 300 個檔案、每個都吐一份報告回來,Claude 的腦袋很快就塞爆了,夭壽。

Workflow 的解法是把那個指揮計畫——迴圈、分支、中間結果——全部寫進程式碼。腳本自己持有狀態,Claude 的 context 最後只拿到一份濃縮過的答案。這不只是「能跑更多 agent」而已,它還讓你能套用可重複的品質模式:讓幾個獨立 agent 互相對抗審查彼此的發現、或從好幾個角度各自起草一份方案再拿來比,最後得到的結果比單次 pass 可信得多。

一句話記法,幫你以後不會選錯工具:

一兩個獨立調查     → 用 subagent
know-how 要重用    → 用 skill
編排本身要重複     → 用 workflow(fan out、比較發現、重啟失敗的 agent、存起來當命令)

workflow 與 subagent 編排架構對比流程圖

到底有多大規模?開發者社群流傳過一個會嚇到的個案:有人用動態工作流程把 Bun 從 Zig 移植到 Rust,據說原測試套件 99.8% 通過、約 75 萬行 Rust、十一天就 merge。這類數字我沒辦法逐一查證、純粹當茶餘飯後看,但那個量級感受得到。比較踏實、官方自己列出來的標準場景是:全庫 bug sweep、500 個檔案的大遷移、需要跨來源交叉驗證的研究、以及「值得從好幾個角度各自起草再擇一」的困難計畫。

三種觸發方式:關鍵字、deep-research、ultracode

要讓 Claude 幫你寫並跑一個 workflow,總共三條路。

第一條:prompt 裡丟 workflow 這個字。 最直接,單次觸發、不改 session 的設定。

Run a workflow to audit every API endpoint under src/routes/ for missing auth checks

Claude Code 會把那個字反白,然後改成「幫你寫一段 workflow 腳本」而不是一輪一輪手動做。如果你只是剛好打到 workflow 這個字、根本沒想觸發,按 alt+w 就能忽略這一輪。

第二條:內建的 /deep-research 這是目前唯一的 bundled workflow,也是最好的入門體驗:

/deep-research What changed in the Node.js permission model between v20 and v22?

它會對問題從好幾個角度 fan out 網路搜尋、抓回來源互相 cross-check、對每個論點投票,最後給你一份引用完整、而且已經把站不住腳的論點濾掉的報告。

第三條:ultracode 模式。 這是把油門踩到底的玩法:

/effort ultracode

Ultracode = xhigh 推理強度 + 自動 workflow 編排。開了之後,Claude 每個實質任務都會自己判斷要不要編成 workflow,一個請求甚至會拆成好幾個連續的 workflow(一個負責理解程式碼、一個負責改、一個負責驗證)。代價就是每個任務都更燒 token、更慢,而且只在當前 session 有效,回到例行工作記得用 /effort high 降回來,不然帳單會讓你傻眼。

順帶一提,啟動時會不會跳權限確認,取決於你的 permission mode:Default / acceptEdits 每次都問(除非你選過「不再詢問這個 workflow」);Auto 只問第一次;Bypass、claude -p、Agent SDK 則直接開跑不問。有個細節很重要——workflow 生出來的 subagent 一律以 acceptEdits 模式跑、檔案編輯自動核准,但不在你 allowlist 裡的 shell / web / MCP 工具還是會在執行中跳提示。所以長 run 之前,先把 agent 會用到的指令加進 allowlist,不然跑到一半被一個權限框卡住,超雷。

腳本長怎樣:meta 加五個 API(順便校正坊間的簽名錯誤)

這一段是整篇的重點。我看過好幾篇教學把 API 簽名寫錯,照著抄一定跑不起來,所以這裡用 Claude Code 實際工具規格來校正。

先講清楚:官方那份 workflows 文件 主要描述「使用者怎麼操作」(觸發、權限、resume、成本),腳本層的 API 細節(agent / parallel / pipeline / budget / 程式化 resume 等)目前較少公開。下面這些簽名取自 Claude Code 的 workflow 執行環境(也就是 Claude 寫腳本時實際看到的規格),會隨版本演進——照抄前請以你自己 Claude Code 版本的實際行為為準。

每個 workflow 腳本必須export const meta = {...} 開頭,而且 meta 必須是純字面量——不能用變數、函式呼叫、展開運算子或樣板字串插值,runtime 會在你還沒跑之前就要讀它:

export const meta = {
  name: 'review-changes',                              // 必填
  description: 'Review changed files and verify findings', // 必填,權限對話會顯示這句
  whenToUse: 'after a large diff',                     // 選填,列在 workflow 清單裡
  phases: [                                            // 選填但建議,每個 phase() 對應一筆
    { title: 'Review' },
    { title: 'Verify' },
  ],
}

// 腳本本體從這裡開始,是 async context,可以直接 await
phase('Review')
const result = await agent('review src/auth.ts for bugs', { schema: FINDINGS_SCHEMA })

接著是五個核心 API,請務必看清楚參數型別:

API 簽名 重點
agent agent(prompt, opts?) 啟一個 subagent。沒給 schema 回傳純文字字串;給了 schema 回傳驗證過的物件optslabelphaseschemamodelisolation:'worktree'agentType。使用者中途略過會回傳 null
pipeline pipeline(items, stage1, stage2, ...) 每個 item 獨立流過所有 stage,stage 之間沒有 barrier。stage callback 收到 (prevResult, originalItem, index)。某個 item 在某 stage 拋錯就變 null、跳過後續。
parallel parallel(thunks) thunks函式陣列 Array<() => Promise<any>>不是直接傳 agent。這是個 barrier,等全部完成才回傳。某個 thunk 拋錯那一格變 null(呼叫本身不會 reject),用之前先 .filter(Boolean)
phase phase(title) 開一個新階段,之後的 agent() 在進度面板會歸到這個標題下。
log log(message) 對使用者吐一行進度訊息。

最容易寫錯的就是 parallel 我看過不少文章寫成 parallel(agent(...), agent(...)),直接把 agent 的回傳值丟進去——這樣等於在呼叫 parallel 之前就已經把 agent 啟動了,整個並行的意義就沒了。正確寫法是傳還沒被呼叫的函式(thunk):

// ❌ 錯:直接傳 agent 的結果(簽名也錯)
const r = await parallel(agent('check a'), agent('check b'))

// ✅ 對:傳一個函式陣列,每個函式回傳一個 Promise
const r = await parallel([
  () => agent('check a'),
  () => agent('check b'),
])
const usable = r.filter(Boolean)  // 拋錯的會是 null,先濾掉

還有一個我大力推薦的東西:schema 結構化輸出。給 agent() 傳一個 JSON Schema,subagent 會被強制呼叫 StructuredOutput 工具回傳已驗證的物件,不符合還會自動重試。從此不用自己解析一坨文字、不用祈禱它格式對:

const FINDINGS = {
  type: 'object',
  properties: {
    findings: {
      type: 'array',
      items: {
        type: 'object',
        properties: {
          title:    { type: 'string' },
          file:     { type: 'string' },
          severity: { type: 'string' },
        },
        required: ['title', 'file'],
      },
    },
  },
  required: ['findings'],
}

const r = await agent('find bugs in src/auth.ts', { schema: FINDINGS })
// r.findings 直接是陣列,拿了就用

最後幾個會踩到的環境限制,先講免得你撞牆:

  • 腳本是純 JavaScript,不是 TypeScript。型別註記 : string[]、interface、generics 一律解析失敗。
  • Date.now()Math.random()、無參數的 new Date() 會直接丟錯(因為它們會破壞 resume 機制)。要時間戳就從 args 傳進去,要亂數就靠 index 去變化 prompt。
  • 腳本本身沒有檔案系統跟 shell 存取權。讀檔、寫檔、跑指令都是 agent 在做,腳本只負責調度。

左側同步並行撞上 barrier、右側獨立交錯流動的資料流對比圖

pipeline 還是 parallel?這是最常踩的雷

這題我特別拉一段出來講,因為選錯的代價是白白浪費牆鐘時間

原則一句話:預設用 pipeline,只有當「下一階段真的需要上一階段的全部結果」時才用 parallel 的 barrier。

pipeline 沒有 barrier。item A 可以已經在第三 stage,同時 item B 還卡在第一 stage。整段的牆鐘時間 = 最慢的那一條單一 item 的鏈,而不是「每個階段最慢的那個」加總。這個差異在 agent 速度落差大的時候非常明顯:

const DIMENSIONS = [
  { key: 'bugs', prompt: 'review for correctness bugs' },
  { key: 'perf', prompt: 'review for performance issues' },
]

const results = await pipeline(
  DIMENSIONS,
  // stage 1:審查
  d => agent(d.prompt, { label: `review:${d.key}`, phase: 'Review', schema: FINDINGS }),
  // stage 2:每個發現派人對抗驗證(不用等別的維度審完)
  review => parallel(
    review.findings.map(f => () =>
      agent(`Adversarially verify: ${f.title}`, { phase: 'Verify', schema: VERDICT })
        .then(v => ({ ...f, verdict: v }))
    )
  ),
)
// 'bugs' 的發現在驗證的同時,'perf' 還在審——牆鐘時間不浪費

那什麼時候才真的該用 parallel 的 barrier?只有這幾種:下一階段要拿到全集合才能動——例如在昂貴的下游工作前先去重 / 合併全部結果、或是要提早退出(「0 個 bug 就整段跳過驗證」)、或是下一階段的 prompt 要「跟其他所有發現比較」。

// barrier 真正合理的場景:去重後才驗證
const all = await parallel(DIMENSIONS.map(d => () => agent(d.prompt, { schema: FINDINGS })))
const deduped = dedupe(all.filter(Boolean).flatMap(r => r.findings))  // 真的需要全集合
const verified = await parallel(deduped.map(f => () => agent(verifyPrompt(f), { schema: VERDICT })))

有個嗅探測試很好用:如果你寫出來的是「parallel → 一段純資料轉換(flatten / map / filter,沒有跨 item 依賴)→ parallel」,那中間那個 barrier 根本不需要,把轉換塞進 pipeline 的 stage 裡就好。猶豫的時候,選 pipeline 準沒錯。

進階品質模式:讓 agent 互相打臉

Workflow 真正比「叫一個 agent 做事」強的地方,是它能套用結構化的品質模式。這也是 Anthropic 官方部落格 一直強調的賣點。

對抗驗證(Adversarial Verify) 是其中最實用的。發現一個問題後,不是直接信它,而是派 N 個獨立的懷疑者、prompt 明確要他們反駁,多數反駁就否決。據 MarkTechPost 的報導 ,這個「其他 agent 專門去反駁前面發現」的機制是內建在 run 裡的,只有撐過反駁的論點才會送到你面前。舉個我自己常遇到的情境:當一個 subagent 宣稱某函式有 race condition,你就讓另一個 subagent 的唯一任務是想辦法推翻它——推不翻,這個 bug 才算數。

const votes = await parallel(
  Array.from({ length: 3 }, () => () =>
    agent(`Try to refute this claim: ${claim}. Default to refuted=true if uncertain.`,
          { schema: VERDICT }))
)
const survives = votes.filter(Boolean).filter(v => !v.refuted).length >= 2

兩個霓虹綠 agent 對峙、綠色箭頭互相碰撞如辯論的示意圖

Judge panel(法官小組) 適合解空間很寬的問題:從不同角度(MVP 優先、風險優先、使用者優先)各生一份獨立方案,並行 judge 評分,最後從贏家綜合、再把亞軍的好點子嫁接進來。比「單一方案反覆迭代」常常好得多。

Loop-until-dry(跑到枯竭) 用在未知規模的發現任務(bug、edge case):持續派 finder 直到連續 K 輪沒有新東西。這裡有個經典的坑——去重要對著 seen 集合,不是對著 confirmed,否則被否決掉的發現每一輪都會重新冒出來,永遠收斂不了:

const seen = new Set(), confirmed = []
let dry = 0
while (dry < 2) {                                  // 連續兩輪沒新東西才停
  const found = (await parallel(FINDERS.map(f => () =>
    agent(f.prompt, { phase: 'Find', schema: BUGS })))).filter(Boolean).flatMap(r => r.bugs)
  const fresh = found.filter(b => !seen.has(key(b)))
  if (!fresh.length) { dry++; continue }
  dry = 0
  fresh.forEach(b => seen.add(key(b)))             // 對 seen 去重,不是 confirmed
  // ……對 fresh 做多 lens 評審後,把通過的 push 進 confirmed
}

還有 multi-modal sweep(多個 agent 各用不同方式搜:by-container、by-content、by-entity、by-time,補單一角度的盲區)跟 completeness critic(最後派一個 agent 專門問「漏了什麼?哪個模態沒跑、哪個論點沒驗證」)。這些模式可以自由組合,不是互斥的。

並發、budget、resume:跑大 run 之前要懂的事

規模拉大之後,有三件事一定要搞清楚,不然不是燒錢就是白做。

並發上限。 官方文件講的是「最多 16 個並行 agent,CPU 核心少的機器會更少」(確切公式官方沒講明,大致隨可用核心數遞減),超過的會排隊等空位。單次 run 的總量上限是 1,000 個 agent——這是防失控迴圈的後盾,遠高於正常用量。你還是可以丟 100 個 item 給 parallel / pipeline,它們全部都會完成,只是同一時間大概只有十個左右在跑。

Token budget。 一次 workflow run 可能比用對話做同一件事燒多很多 token,而且照樣計入你方案的用量跟速率限制。每個 agent 預設用你 session 的模型,除非腳本用 opts.model 把某個 stage 導去別的模型。所以大 run 之前先 /model 確認一下、把不需要最強腦的 stage 換成小模型。腳本裡還有個 budget 物件可以拿來動態縮放深度:

const bugs = []
while (budget.total && budget.remaining() > 50_000) {
  const r = await agent('Find bugs in this codebase.', { schema: BUGS })
  bugs.push(...r.bugs)
  log(`${bugs.length} found, ${Math.round(budget.remaining() / 1000)}k remaining`)
}

注意那個 budget.total && 的 guard 不能省——沒設預算時 remaining() 會回 Infinity,這個迴圈會一路跑到 1,000 agent 上限才停,爆肝燒錢就是這樣來的。

Resume(暫停與恢復)。/workflows 裡選中一個 run 按 p 就能暫停 / 恢復,已完成的 agent 會回傳快取結果、其餘的繼續跑。據 digitalapplied 的整理 ,workflow 可以從先前的 runId 恢復,所以你改了腳本之後,沒被動到的 agent 不會重跑——最長未變動的呼叫前綴會秒回快取,從第一個被改或新增的呼叫起才實跑。對應的程式化重跑形式(帶 scriptPathresumeFromRunId)屬於前面提過的腳本層 API,官方公開文件還沒完整載明,以你的版本實際行為為準。

但有一個硬限制要記住:resume 只在同一個 Claude Code session 內有效。你只要退出 Claude Code,下次啟動時 workflow 就從頭來過。所以多日的大工程,盡量別關。

霓虹綠進度環與暫停/恢復控制、周圍漂浮快取資料塊的示意圖

最佳實踐與踩坑清單

把前面散落的雷集中起來,這張表存著,下次寫 workflow 前掃一遍:

你做的事 後果 正確做法
parallel(agent(), agent()) 簽名錯、根本沒並行 parallel函式陣列 [() => agent(...)]
動不動就用 barrier 快的 agent 空等慢的,浪費牆鐘 預設 pipeline,barrier 要有正當理由
loop 去重對 confirmed 被否決的發現每輪重現,永不收斂 seen 去重
budget 迴圈沒 guard budget.total 沒設預算時 Infinity,跑到 1,000 上限 while (budget.total && remaining() > X)
腳本裡用 Date.now() / Math.random() 直接丟錯、破壞 resume 時間從 args 傳、亂數靠 index
期待 subagent 自己整合彼此的工作 重複跟衝突一堆 整合交給最後的綜合階段或你自己
退出 session 後想 resume 從頭跑、白燒一輪 resume 僅限同 session;或用 scriptPath + resumeFromRunId
沒設明確終止條件的迴圈 逼近 1,000 agent 上限 設品質閾值或 dry-count 退出

幾個正面的習慣也一起列:任務邊界要講清楚(「audit src/routes/ 每個 endpoint 缺漏的 auth check,附 severity」遠勝於「improve the codebase」);用 schema 拿結構化輸出免解析;subagent 任務要可獨立驗證、輸入輸出明確、只碰有界的檔案集;規模化之前先小跑(/deep-research 或先掃 5~10 個檔)確認成本;成功的 run 記得在 /workflows 裡按 s 存成 /<name> 命令重複用——專案級存 .claude/workflows/(可進 git、整隊共用),個人級存 ~/.claude/workflows/

至於底層模型,這次 Claude Opus 4.8 的數字 也撐得起這套玩法——據報導 SWE-bench Pro 拿到 69.2%、長上下文檢索(GraphWalks long-context F1,1M tokens)達 68.1%,誠實度也明顯提升(官方主打未回報的程式碼瑕疵大幅減少)。對於要派上百個 agent 互相審查的場景來說,底層模型誠不誠實、看不看得懂長 context,直接決定了最後那份報告能不能信。

什麼時候該用、什麼時候別用

最後給個明確的判斷,免得你拿大砲打蚊子。

該用 workflow 的場景:全庫 bug sweep 或安全審計(100+ 檔)、大規模遷移(500+ 檔)、需要多來源交叉驗證的研究、值得從多角度起草再擇一的困難計畫。據 explainx.ai 的整理 ,這類「過去要一季、現在幾天」的大工程正是它的主場。

別用的場景:單檔編輯、快速 bug 修復、簡單問答——這些用對話或一兩個 subagent 就好,動 workflow 純粹是浪費 token。know-how 想重用就寫成 skill。token 預算緊張的時候也先忍著。

說穿了,動態工作流程不是要取代你跟 Claude 的對話,而是給你一個「當任務大到一個 context 裝不下」時的逃生艙。先從 /deep-research 玩起,習慣那個背景任務面板的節奏,再試著在 prompt 裡丟一個 workflow 讓 Claude 幫你寫第一支腳本。跑順了、覺得這流程每條 branch 都會重複,就按 s 存起來——下次它就是你自己的 / 命令了。

要不要現在就開一個小的試?挑你手邊一個「想掃但一直懶得掃」的資料夾,丟一句 Run a workflow to ...,看看十幾個 agent 同時上工是什麼感覺。跑完不妨在留言區分享你燒了多少 token、值不值得。


參考資料

當全世界都在漲價,DeepSeek 卻把旗艦模型砍到地板:一場關於「反向定價權」的硬仗

大家都在問錯問題。

從 V4-Pro 宣布永久降價那天起,我看到的討論幾乎清一色是「這麼便宜,DeepSeek 會不會虧死」「梁文鋒是不是 AI 圈的賽博菩薩」。這些問題聽起來很合理,但它們其實預設了一個錯誤前提——以為這是一場補貼大戰,是用錢換流量。

真正反常識的點不在「便宜」。DeepSeek 一直都便宜,全世界都習慣了。真正反常識的是時機:2026 年的這個當下,整個 AI 行業正在集體漲價。HBM 半年內價格暴漲超過 500%,高端 GPU 缺貨缺到下單要等一季,亞馬遜、微軟跟國內主流雲廠商紛紛上調 API 定價,部分漲幅甚至高達 463% 。連 OpenAI、Anthropic、Google 御三家都在過去半年「悄悄」把同樣輸出的實際價格往上抬。

行業共識已經變成「AI 服務理應越來越貴」。就在這個時候,DeepSeek 反手一刀,把旗艦模型砍到地板,還宣布永久

這不是賠本賺吆喝。這是一家公司在告訴整個市場:我能這麼便宜、還能正常運轉、品質還不掉線——你們的高價,是時候被重新定義了。

價格暴跌概念圖

一個月砍三刀,最後一刀砍進「永久」

先把事實擺清楚,因為這波降價的節奏本身就很有戲。

DeepSeek V4 在 2026 年 4 月 24 日發布預覽版並同步開源 ,分成性能更強的 V4-Pro(1.6 兆參數、49B 激活)跟輕量的 V4-Flash(284B、13B 激活),兩者都原生支援 100 萬 token 的超長上下文。剛發布時 Pro 版輸出定價是每百萬 token 24 元人民幣,當下被不少人嫌貴。

然後就是教科書級的「連環刀」:

日期V4-Pro 輸入(緩存未命中)V4-Pro 輸出動作
4/24¥12¥24首發定價
4/25¥3¥6限時 2.5 折,直降 75%
4/26–28¥0.025(緩存命中)¥6全系輸入緩存命中砍到首發價 1/10
5/22官宣:5/31 優惠到期後,2.5 折永久化

發布隔天就砍 75%,三天後再砍一刀緩存命中價,然後在所有人都以為「6 月優惠結束就會恢復原價」的時候,5 月 22 日晚上一紙公告把臨時優惠寫死成永久定價

最終 V4-Pro 的永久價格長這樣:輸出每百萬 token 6 元(約 0.87 美元)、輸入緩存未命中 3 元、輸入緩存命中低到 0.025 元(約 0.0036 美元)——這個數字被稱為「全球大模型價格新低」。

對比一下你就知道有多誇張(以下美元數字按 1 美元約兌 7.2 人民幣換算)。GPT-5.5 標準版輸出價每百萬 token 30 美元、折人民幣約 216 元,是 V4-Pro 的 36 倍 ;同模型的 Pro 版定價更貴(180 美元、約 1,296 元),落差直接拉到 200 倍。換成 Claude Opus 4.7(輸出約 25 美元/百萬 token、折人民幣約 180 元)也有大約 19 倍。有開發者實測,用 V4 跑一天處理 278 億 token,帳單只有 160 美元——同樣的量用同等級美國模型要超過 1 萬美元。

夭壽喔,這價差已經不是「比較便宜」,是兩個物種了。

別人漲價它降價,憑什麼?

這才是整篇文章我最想聊的部分,也是開發者最該關心的部分:這個低價到底是補貼撐出來的,還是成本真的下來了?

如果是補貼,那就是不可持續的,窗口期一過就會打回原形(DeepSeek 自己在 2025 年就幹過這種事,V3.1 發布後取消夜間優惠、變相讓最低 API 價格上漲 50% )。但這次不一樣,三層底氣讓這個價格站得住。

稀疏注意力機制概念圖

第一層,是架構效率的結構性下降。 V4 用了 DSA 稀疏注意力,再加上混合注意力機制(CSA 與 HCA),核心就是解決一件事:傳統注意力在長文本場景下,算力跟顯存需求會飆到天上去。根據高盛的研究報告 ,V4 在處理百萬級上下文時,推理所需的 FLOPs 跟 KV Cache 佔用,比上一代 V3.2 直接降低了 73% 到 93%。

KV Cache 這個東西值得展開講,因為它是整場成本革命的關鍵。模型每生成一個 token,都要把前面的上下文存進 KV Cache,而這部分吃的是最貴、最緊張的 HBM 顯存。一篇在業界廣為流傳、由雲端架構從業者 Girish Patil 撰寫的測算指出:在 100 萬 token 上下文、8bit KV 精度的設定下,DeepSeek V4 的 KV Cache 估計只佔 5.48GB HBM ——對照組 GLM-5 要 60GB、Qwen3-235B 要 89GB(這組數字屬第三方測算,非官方公布,但量級差距與 DeepSeek 技術報告揭露的架構優化方向一致)。

差了超過十倍。這意味著什麼?意味著推理可以更多地放到 SSD、NAND 閃存、LPDDR 這些「平民級」存儲介質上,你不需要囤那麼多 HBM,也不需要那麼多英偉達 GPU。整個成本曲線的形狀都被改寫了。

第二層,是國產算力綁定。 V4 系列完全跑在華為昇騰 950PR 上,脫離了英偉達 CUDA 生態。為了這個遷移,DeepSeek 團隊耗時約 5 個月、重寫了 40 萬行算子 ,把兆級參數模型在昇騰的 CANN 架構上全棧跑通,優化後昇騰推理速度比初版提升 35 倍。更關鍵的是,DeepSeek 罕見地把「未來降價」明確跟昇騰 950 超節點下半年量產的節奏掛鉤——這在行業裡幾乎沒人這麼幹。它等於在說:我的低價不靠演算法玄學,是綁在國產算力的規模化部署上的。

第三層,是真實的緩存命中率。 前面那個一天 278 億 token、帳單 160 美元的案例,其中 273 億 token 來自緩存,命中率高達 98.2% 。配合單次推理算力降到前代的 27%,這個價格才不是「虧本賺吆喝」,而是「我成本就到這個位置了」。

三層疊起來,高盛直接把這定調為「AI 普惠元年」。這詞用得是有點大,但邏輯上站得住。

反向定價權:當「最強」不再是唯一賣點

理解了成本,再來看市場結構,你會發現全球 AI 的定價體系正在裂成兩條路。

全球定價權對峙概念圖

一條是海外路線,守高價、博高毛利。Anthropic 在 5 月以 965 億美元估值完成新一輪融資(約 96.5 billion 美元) ,年化營收衝向約 450–470 億美元、逼近 500 億大關,毛利率接近 77%,約 85% 收入來自企業跟開發者客戶。OpenAI 估值 852 億美元、也在籌備 IPO。它們的打法很清楚:靠高端企業客戶覆蓋巨額算力成本,維持高 ARPU。

另一條是中國路線,壓利潤、搶生態。瘋狂壓縮利潤甚至虧本補貼,目標是在短暫窗口期內死死咬住 Agent 生態跟開發者市場。港媒乾脆用「全球 AI 定價體系面臨崩塌 」當標題——V4-Pro 的緩存輸入價只有 GPT-5.5 的約 1/32,使用成本低到只有 OpenAI 同類的 3%。

這裡有個很多人沒想透的點:DeepSeek 拿到的不是「降價能力」,而是「反向定價權」。

過去定價權在誰手上?在能做出最強模型的人手上。OpenAI、Anthropic 靠性能壁壘維持高價,因為你想要最好的,就得付最貴的。但 V4 把開源與閉源的性能差距縮小到歷史最小——它在 Agentic Coding 體驗上甚至優於閉源的 Claude Sonnet 4.5 ,SWE-bench 拿到 80.6%(Claude Opus 4.7 是 80.8%,幾乎打平),LiveCodeBench 更以 93.5% 領先。

當能力差距縮到「大部分場景感受不到」的時候,定價差距就直接決定了開發者選誰。而結果已經寫在數據上:根據 OpenRouter 的調用量統計 ,DeepSeek 系模型的周調用量一度達 4.23 兆 token,超越 Anthropic、超越 Google,位居全球第一。最刺眼的是,這個調用量不是國內補貼堆出來的——平台上美國開發者占 47.17%,中國開發者只占 6.01%。

全球近半數開發者,正在用真金白銀投票。

巨鯨主導市場概念圖

為什麼這次英偉達沒崩?

說到這裡,老股民應該會想起 2025 年 1 月那場慘案。

DeepSeek R1 發布那天,英偉達單日市值蒸發約 5,890 億美元(約 589 billion 美元) ,創下史上最大單日市值損失,全球都在重新評估「AI 一定要靠美國頂級算力」這個敘事。所以這次 V4 發布、而且降價降得更狠,照理說英偉達應該又要血流成河才對。

結果呢?英偉達不但沒崩,當天股價甚至小漲。國產晶片股反而集體狂歡——中芯國際一度漲 12%、華虹半導體飆超 19%。

為什麼這次不一樣?我整理出三個原因:

第一,雙平台策略拆掉了引信。R1 當年雖然便宜,但訓練還是用英偉達 GPU,市場是被「低成本」這件事本身嚇到。V4 雖然優先適配昇騰,但技術報告顯示它同時在英偉達 GPU 和華為昇騰 NPU 兩個平台都驗證了方案 。黃仁勳最擔心的「中國模型在華為晶片上首發」雖然部分成真,但 V4 保留了雙平台,讓最壞的劇本沒有上演。

第二,市場被 R1 教育過了。投資者經過一輪「教訓」,開始理性看待——DeepSeek 的創新反而可能增加整體 AI 需求。

第三,也是最反直覺的一點:Jevons 悖論

Jevons 悖論飛輪概念圖

降本理論上應該降低對硬體跟電力的需求,但實際情況恰恰相反。當 API 價格從每百萬 token 幾美元降到幾毛錢人民幣,大量過去嫌貴、不敢多用的場景會開始瘋狂調用模型。使用量的增長速度,遠遠超過單次推理成本的下降速度。最後總推理負載不是減少,而是大幅增加。

數據是這樣的:主流模型 API 單價普跌 80% 到 99%,但同期 H100 一年期租賃價從 2025 年 10 月的 1.70 美元/小時漲到 2026 年 3 月的 2.35 美元/小時 ,漲幅近 40%,Blackwell 更高達 4.08 美元/小時,按需容量全面售罄。市場測算 V4 將新增 AI 加速卡需求 11 萬到 47 萬張。

這個正向飛輪可以畫成這樣:

降價正向飛輪: API 價格砍到地板 → 試錯成本趨近於零 → 開發者與企業大量湧入 → 推理調用量暴增 → 總算力負載不降反升 → 數據中心 / 存儲 / 電力需求爆炸 → 國產硬體廠商被拉進牌局 → (回到起點,形成正向飛輪)

DeepSeek 站在這個飛輪的起點。它把模型做得更省顯存、更容易拆到不同硬體上跑,等於給國產 GPU、存儲廠商、服務器廠商全都留出了接口——AI 基礎設施的競爭,從「誰的 GPU 最強」變成了「推理、緩存、存儲、調度」每個環節都能參與的多人遊戲。

那誰在流血?

有人吃肉,就有人挨刀。這波降價的衝擊面很值得梳理一遍。

最直接受傷的是獨立模型廠。智譜跟 MiniMax 這兩家都已經在港交所掛牌上市,V4 發布後股價連續兩天大跌超過 9% 。瑞銀(UBP)講得很直白:作為獨立模型供應商,它們永遠容易受到互聯網平台跟雲服務商的競爭威脅,因為到最後模型性能差距對大多數用戶來說微乎其微。

第二類是算力租賃商。靠「囤英偉達卡、轉租賺差價」這套模式吃飯的公司(像協創數據、利通電子),在 API 端價格被擊穿後,議價權同步崩塌。客戶想:我幹嘛高價租你的 H100 做推理?直接用 DeepSeek API 不香嗎?更慘的是國產替代讓「英偉達卡稀缺性」這個核心溢價直接消失。

但這裡要講句公道話,不是所有算力公司都挨刀。走「Token 分成」「AIDC 機櫃上架」模式的反而受益——像潤澤科技為 DeepSeek 提供超過 3,000 個液冷機櫃,API 降價刺激調用量增長,直接轉化成它的機櫃上架率提升 ,2026 年 Q1 AIDC 收入占比已突破 54%、毛利率達 48.5%。

至於存儲廠商,前面講的 KV Cache 下沉邏輯,反而是利多。當推理可以更多依賴 NAND、LPDDR 而不是清一色堆 HBM,存儲鏈的故事就被打開了。

對國內同業而言,最尷尬的是用戶遷移成本低到可怕。在中國市場,字節跳動的豆包試水收費那陣子,「豆包笨還收費」之類的吐槽詞條一度衝上社群熱搜。當地有人調侃:「豆包沒了還有千問,千問沒了還有元寶,元寶沒了還有 DeepSeek。」這句玩笑話精準說明了問題——在這個市場,沒有護城河的便宜,撐不了多久。

對你這個開發者,意味著什麼

聊了一堆產業格局,最後落到實處:這事對寫程式、做產品的你,到底該怎麼用?

模型路由架構概念圖

我的核心建議是一句話:別把所有 token 押在同一個模型上,用混合架構 + 模型路由把成本槓桿用滿。

實務上的路由策略大概長這樣:

任務類型推薦模型理由
背景/輕量任務(docstring、變數重命名、格式轉換)DeepSeek V4-Flash輸入緩存命中極低,適合當編碼 agent(如 Claude Code、Cursor)背景任務的低成本模型槽位
一般商業場景(客服、摘要、翻譯、文件處理、程式輔助)DeepSeek V4-Pro性能夠用、價格只有 GPT-5.5 約 1/12 到 1/36
關鍵任務(複雜推理、多模態、極致品質)Claude Opus 4.7 / GPT-5.5頂尖閉源仍有護城河,V4 暫不支援多模態生成

這個策略的精髓在於:大部分真實商業場景,要的不是「世界最強智力」,而是「勉強夠用 + 足夠便宜 + 足夠穩定」。當 V4 的推理成本只有 GPT-5.5 的約 1%(Flash)到 11%(Pro),同樣的預算你可以多調用幾十倍 token、試更多 prompt 鏈、迭代更多 agent 工作流——AI 本來就是個機率遊戲,只要夠便宜,多跑幾次反而更容易出好結果。

幾個踩坑提醒:

第一,緩存命中是最大的成本槓桿,但你得會用。 V4 的恐怖低價建立在高緩存命中率上。如果你的 prompt 設計每次都讓前綴大幅變動,緩存命中率上不去,實際成本會比你看到的標價高不少。把穩定的系統 prompt、知識庫前綴放在最前面,是壓成本的關鍵。

第二,吞吐量是 V4-Pro 的軟肋。 DeepSeek 自己承認,由於高端算力供給受限,V4-Pro 系列的服務吞吐極為有限 。要等下半年昇騰 950 超節點批量上市才會緩解。生產環境如果對延遲敏感,務必先壓測,別直接 all in。

第三,資料主權要留心。 DeepSeek 是開源模型,這其實是優勢——台灣有些單位禁用 DeepSeek 雲端服務,但開源權重的私有化部署不在禁令範圍。對資料合規敏感的企業,自建部署反而是一條兼顧成本與主權的路。

便宜,才是這個時代的入場券

回到開頭那個問題。「DeepSeek 這麼便宜會不會虧死」——這問題之所以問錯,是因為它還停留在「賣模型」的思維。

梁文鋒想做的根本不是模型生意。低價 API 本質上是一種生態策略,是在向整個產業鏈發信號:圍繞我這套技術體系做適配、做投入吧,反正試錯成本低到幾十塊人民幣就能搞定。當生態形成,DeepSeek 就不再是一家基座模型公司,而是 AI 基礎設施公司——負責制定標準、定義產業。就像當年 Linux 不靠賣作業系統授權賺錢,卻撬動了整個開源軟體生態。

所以這場降價的真正戰場,從來不是「誰的模型跑分高」。是 token 經濟——誰能讓 AI 像水電煤一樣便宜到可以隨手用,誰就掌握了下一個時代的入場券。

當然,這條路也不是穩贏。V4 跟頂尖閉源還有 3 到 6 個月的客觀差距、不支援多模態生成、人才在流失、服務器三不五時崩、燒著巨額融資養昂貴的國產算力研發。梁文鋒選的是一條冒著「淪為二流」風險、為國產算力趟路的硬仗。

但至少有一件事他證明了:中國 AI 不一定要永遠跟在英偉達後面跑,靠自己的算力基座也能站起來。而對我們這些每天跟 API 帳單搏鬥的開發者來說,能用同樣的錢跑十倍、幾十倍的 token——這波,我們是真的賺到了。


如果你正在做 AI 應用,不妨趁這個「白菜價窗口期」重新算一次你的成本結構,把模型路由跟緩存策略好好設計一遍。有踩到什麼坑或省下多少成本,歡迎留言聊聊。

參考資料

Claude Opus 4.8 發布後,社群與 GitHub 上到底在吵什麼?

2026-05-28 Anthropic 丟出 Opus 4.8,隔天我把 Hacker News、Reddit、GitHub Issues 翻了一輪。這篇不是官方 changelog 的複述,而是把社群真正在意的東西——包含那些官方不會放在頭版的退步——攤開來講。

Anthropic 這次的節奏很有意思。Opus 4.7 當初端出來的時候,社群反應只能說是冷淡(chilly reception),開發者罵註解太囉嗦、工具呼叫不穩。結果不到幾個月,4.8 就來了,定價一塊錢都沒漲,benchmark 一片飄紅,連 Cognition(Devin 的母公司)這種重度 agentic 用戶都公開表態,說 4.8 修好了他們在 4.7 看到的 comment-verbosity(註解過度冗長)跟 tool-calling 問題(TechCrunch 有引述)。

聽起來很香對吧?但如果你只看官方的 Introducing Claude Opus 4.8,你會錯過一半的故事。社群跟 GitHub 上吵的,是另外一半。

先說清楚:這篇是發布隔天(2026-05-29)整理的,各家評測站對「競品對照數字」版本不一、有些還在浮動。下文凡是有具體數字的,我盡量標來源;對於只有單一來源、無法交叉驗證的,我會明講,請你自己保留判斷。寧可承認不確定,也不要餵你假精確。

先講結論:這是一次「修 bug 為主」的點版本更新

Opus 4.8 在 2026-05-28 發布,定價維持 $5 / $25(每百萬 input / output token),跟 4.7 完全一樣。根據 Anthropic 官方數據 與多家評測站,幾個關鍵 benchmark 確實有進步:

BenchmarkOpus 4.7Opus 4.8變化
SWE-bench Verified87.6%88.6%
SWE-bench Pro69.2%官方稱 +4.9 點
USAMO 2026(數學)69.3%96.7%↑ 爆炸性
GDPval-AA(知識工作)1890↑(Elo 制)
GPQA Diamond94.2%93.6%↓ 退步

數學那欄不是打錯,USAMO 2026 從 69.3% 跳到 96.7%,是 Opus 系列單一週期最大的數學躍進,這個真的猛。SWE-bench Pro 官方主打的是「+4.9 點」的提升幅度(到 69.2%),至於 4.7 的精確基準各家寫法不一,我就不硬填。但你有沒有注意到 GPQA Diamond 那行——它退步了。這只是開胃菜,後面輸的還更多。

一、最該知道的退步:prompt injection 韌性變差了

這是整份觀察裡我認為最重要、但最容易被淹沒的一條。

根據 Gray Swan 的 red-teaming 數據,Opus 4.8 在 agentic 情境下的 prompt-injection 攻擊成功率是 9.6%,而 4.7 只有 6.0%。換句話說,這一代在面對不可信輸入時,反而更容易被騙。

這對誰是問題?如果你的 pipeline 會處理外部不可信內容——web 瀏覽 agent、讀使用者上傳的檔案、執行使用者可控的程式碼——那這個退步就是實打實的安全風險。digitalapplied 的分析 直接建議:高 agentic-injection 風險的環境,在遷移到 4.8 之前,先把這個 9.6% 對照你自己的威脅模型評估一遍。

這就是那種官方 system card 角落會寫、但行銷頁絕對不會放大的東西。乾,這種才是工程師最該知道的。

二、dynamic workflows 很猛,但有幾個讓人傻眼的怪癖

dynamic workflows 是這次的旗艦功能:一個 orchestrator agent 可以開出一堆並行 subagent,去打大型分支任務——跨幾十個檔案的重構、跑超寬的測試矩陣、同時探索好幾條解法。上限是 16 個並行、單次最多 1,000 個 subagent(MarkTechPost 有報導這個 cap)。

但 Anthropic 自己的 system card 老實記了幾個已知 artifact,我看到的時候笑出來:

  • 偶發早停(occasional early stopping)——做到一半就收工
  • 過度積極刪檔(over-eager file deletion)——在某些 agentic 情境下手太快,這個就不好笑了
  • 偶爾叫使用者去睡覺(the model occasionally telling the user to go to bed)——對,模型會關心你的作息

前兩個是真的要小心。並行 agent 自己決定刪檔,在沒沙箱的環境裡是會出事的。該不該開 dynamic workflows,其實一句話就能判斷:

任務可並行(大型分支任務) → 派發 subagents(最多 16 並行 / 1000 總量)→ token 消耗顯著上升 → 小任務上的 worker 反而在浪費 token。
任務窄、或嚴格順序依賴 → 別用 dynamic workflows,一般 session 就夠。

更現實的問題是 tokendigitalapplied 直說 dynamic workflows「用的 token 比一般 Claude Code session 多很多」,因為並行 subagent 要等比例的算力。重點是:窄任務或嚴格順序的任務不要用——每步都依賴上一步的時候,並行根本沒意義,純粹是把 token 灑出去玩。要上生產前,先把預算抓好。

三、它沒有全面領先,這幾項輸了

官方很愛講「贏 GPT-5.5 至少 12 項 benchmark」,這沒錯。但社群很快就把輸的部分挖出來:

項目Opus 4.8 表現對手
Terminal-Bench 2.1(Terminus-2 公開 harness)74.6%GPT-5.5 78.2%(輸)
GPQA Diamond93.6%自己 4.7 的 94.2%(退步)
多語言(非英文)相對落後Gemini 3.1 Pro / GPT-5.5

Terminal-Bench 這條要特別講 harness 的眉角:在 Terminus-2 公開 harness 上同場比,是 GPT-5.5 的 78.2% 對 Opus 4.8 的 74.6%,GPT-5.5 贏;但換成 GPT-5.5 自家的 Codex CLI harness,它能拉到 83.4%。換句話說,benchmark 數字跟你用什麼 harness 跑高度相關,採購決策時別只看單一數字(這點 TokenMix 的評測 講得很清楚)。

所以如果你的工作是 terminal-heavy 的 agentic,或是大量非英文內容,4.8 不見得是最佳解。這跟官方那張「全綠」的對比圖,是兩個世界。

四、社群真正在抱怨的:額度、版本疲勞、跟那個老梗

技術退步是一回事,社群的情緒又是另一回事。Hacker News 那串(討論串在這)跟 GitHub Issues 上,反覆出現三種聲音。

第一是版本疲勞。 有 HN 用戶直白講,他根本搞不清楚從 4.5 一路到 4.8 到底進步在哪,是一種「churn-without-payoff」——一直改版但感受不到回報。小版號的邊際效益遞減,這種情緒在 4.6、4.7、4.8 連發之後特別濃。

第二是額度。 這個是 Opus 系列的老問題了。早在 4.6 時代,就爆發過大規模的「額度異常快速耗盡」抗議——MacRumors 在 2026-03 報導,Max 訂閱者的 5 小時窗口,一兩個小時就燒完,同樣的工作量以前完全沒事。Anthropic 後來調整了尖峰時段的 5 小時限制,但每週限制原封不動。現在再疊上 dynamic workflows 這個吃 token 怪獸,重度使用者的荷包只會更緊。

第三是那個每次改版都會出現的老梗——「你又把 Opus 搞笨了」。 GitHub 上有個經典 issue 標題就叫 You made Opus dumb again and I'm officially moving to codex。用戶說模型在 24-48 小時內明顯變笨,開始犯以前不會犯的邏輯錯誤、回應變短。這類 issue 幾乎都因為拿不出可復現的範例,被標 needs-repro 然後關成 not planned。

我的看法是:這種「變笨」抱怨多半是主觀感知,難以驗證——但它每次改版前後都準時湧現,本身就說明了一件事:社群對 Anthropic 的信任其實很脆弱。 一有風吹草動就有人喊著要跳槽 codex、DeepSeek 4 Pro,或是 Qwen 3.6 這種逼近前沿的開源模型。

五、那到底該選誰?一張表講完

撇開情緒,回到工程選型。綜合社群與評測站(BenchLM 、各家比較)的共識:

你的需求推薦原因
高風險、重正確性與可審查性的程式碼Opus 4.8依 BenchLM 聚合,coding 分類平均 76.4 大幅領先 GPT-5.5 的 58.6,edge case 處理保守
速度優先的 agentic、terminal 任務GPT-5.5Terminal-Bench 贏,agentic 速度快
多模態 / 多語言Gemini 3.1 Pro多語言與抽象推理強,定價還更便宜($2 / $12)

要破除一個迷思:長 context 已經不是 Opus 的獨佔優勢了。 GPT-5.5 的 API 版同樣支援 1M context(Codex 版是 400K),Gemini 3.1 Pro 也是 1M。三家都到 1M 的時代,真正要拼的是「同樣塞滿 context 之後,誰的正確性與可審查性撐得住」——這一點 Opus 4.8 的保守風格還是有它的擁護者。價格上 GPT-5.5($5 / $30)比 Opus 貴,Gemini 3.1 Pro($2 / $12)則明顯便宜。

遷移前,先跑這份 checklist

Opus 4.8 是一次紮實的點版本更新,核心價值是「把 4.7 的痛點修好 + dynamic workflows + fast mode 降價三倍」。如果你之前被 4.7 的囉嗦註解跟工具呼叫氣到,這版值得回來試。但在你把生產 pipeline 切過去之前,建議先過這四關:

  1. agentic 安全:你的 pipeline 會不會吃外部不可信輸入?會的話,拿 9.6% 這個 prompt-injection 數字對照你的威脅模型,沙箱該補就補。
  2. token 預算:要不要開 dynamic workflows?開了就先估好預算,窄任務跟順序任務直接別開。
  3. 刪檔風險:跑 agentic 自動化前,確認破壞性操作有 git 保護或 dry-run,別讓 over-eager file deletion 真的咬到你。
  4. benchmark 對焦:你的主場是 terminal、多語言還是長 context?這幾項 4.8 不一定贏,先用你自己的任務跑一輪 A/B 再決定。

至於最該長期觀察的,其實不是技術,是社群信任。額度抱怨跟「變笨」老梗每次改版都準時報到,Anthropic 如果不在透明度上下功夫,再多的 benchmark 也補不了那道裂縫。

這份觀察是發布隔天(5/29)整理的,社群的長尾問題還沒沉澱。過一兩週再回來看 GitHub Issues,dynamic workflows 的穩定性跟 subagent 成本失控的回報,大概才會是真正的好戲。到時我再寫一篇追蹤。


參考資料

Codex vs Claude Code:用了大半年,我把這兩個 AI coding agent 的「個性」摸透了

兩個 AI coding agent 在賽博機房裡對峙,一藍一綠

有件事我一直覺得很妙。

某次我把 Claude Code 寫好、自己看過覺得沒問題的一段程式碼,丟給 Codex 做 review。結果 Codex 一口氣抓出一堆我跟 Claude 都沒注意到的問題——race condition、漏掉的 edge case、一個會在高併發下爆掉的鎖。我心想好吧那反過來呢?把 Codex 寫的程式碼丟給 Claude Code 看。Claude 看了半天,給我一句客客氣氣的「這段寫得很完整,沒有發現明顯問題」。

這個不對稱的現象,在 Hacker News 的討論串 跟一堆 Reddit 貼文裡反覆出現,不是只有我遇到。它其實濃縮了一件事:Codex 跟 Claude Code 不是「誰比較強」的問題,而是它們根本是兩種不同性格的生物。 你拿 benchmark 分數去比,會發現兩邊幾乎打平;但真正決定你每天用起來爽不爽的,是它們的「脾氣」。

這篇就來聊聊我用了大半年下來,對這兩個工具最真實的使用體感——不是比規格表,是比那種「跟它共事久了才會懂」的細節。


它們根本不是同一種生物

先把最容易搞混的東西講清楚。雖然大家都叫它們「終端 AI coding agent」,但這兩個工具從骨子裡的設計哲學就分岔了。

Claude Code 是 Anthropic 的終端原生工具 ,預設跑在你自己的機器上,邊做邊跟你報告每一步、動到危險的東西會先問你。它的整個互動模型是「developer-in-the-loop」——你跟它並肩坐著,隨時可以打斷、可以導正。

Codex 則是 OpenAI 從雲端優先(cloud-first)出發 設計的,預設把任務丟進一個隔離的雲端 sandbox 裡跑。它的模型是「委派」——你描述任務、走開、回來看結果(通常是一個 PR)。它在 macOS app、CLI、IDE 擴充、ChatGPT 網頁、甚至 Slack 裡 @Codex 都能用。

左邊本地終端發綠光,右邊雲端 sandbox 容器發藍光,光束相連

把規格攤開來看會更清楚:

維度Claude CodeCodex
主力模型(2026-05)Opus 4.7、Sonnet 4.6GPT-5.4、GPT-5.5、GPT-5.3-Codex
預設執行環境本地終端(你的機器)雲端 sandbox + 本地 CLI
互動風格逐步敘述、要你批准丟出去自己跑、回來看 PR
開源是(Apache 2.0、Rust binary)
沙箱安全應用層(26 種可程式化 hook)OS kernel 層(Seatbelt / Landlock / seccomp)
設定檔CLAUDE.md(專有)AGENTS.md(開放標準)
Context window1M tokens(Max/Team 標準定價)272–400K,GPT-5.4 實驗性 1.05M

這張表你不用背,只要記住一句話:Claude Code 從「本地、敘述、要你批准」長出來,Codex 從「雲端、自主、給你成品」長出來。 後面所有體感差異,都是從這個分岔點延伸出來的。

順帶一提,Codex 的桌面 app 在 2026 年 2 月推出時是 macOS only ,Windows/Linux 用戶當時只能用 CLI——這對一些跨平台團隊來說是個 dealbreaker,要留意。


真正的差異,是它們的「個性」

規格表看完你大概無感,因為兩邊看起來都很能打。但用久了你會發現,最有感的差異 benchmark 永遠測不出來——是它們的講話方式跟做事節奏

onevcat 那篇用了一個半月的深度心得 把這件事講得超精準,跟我的體感幾乎一模一樣:

Claude 相對啰嗦但細緻。 它喜歡把每個決策的前因後果、自己正在做什麼,都解釋給你聽,偶爾還會附贈一句「You're absolutely right」的情緒價值。這種個性在「理解專案、做簡單測試、邊探索邊調整」的時候超好用——你看得到它在想什麼,走錯方向馬上喊停。但處理困難任務時,它有時會顯得效率不高,而且很容易被你帶偏:你一句「會不會是這裡的問題?」它可能就真的順著你那個錯誤方向一路跑下去。

Codex 則是人狠話不多,直達要害。 它幾乎不解釋為什麼這麼做,往往就自己悶頭苦幹個十來分鐘,然後直接甩給你一個簡潔有效的解法。onevcat 那個比喻我超愛——「就彷彿在跟一個掃地僧對話,一個眼神勝過千言萬語」。但這種含蓄也有代價:碰到架構設計或需要研究的任務,除非你明確要求它解釋,否則那種「沉默是金」會讓你完全摸不透它的思路。

左邊話多的綠機器人被一堆對話框包圍,右邊像掃地僧一樣安靜的藍機器人

這裡有個很多人會踩的坑:話多不等於比較好。 我以前也以為 Claude 解釋得多就是比較聰明,後來才想通——這只是「適不適合當下這個任務」的問題。需要對齊需求、邊做邊釐清的活,Claude 的啰嗦是優點;目標明確、規格寫死的活,Codex 的沉默高效反而更省心。

還有一個實務上的雷:Codex 很常用 Python 腳本去改檔案,產出的 diff 不是那種一行一行清楚的修改,而是一坨腳本執行結果,review 起來很痛苦 。所以你基本上只能等它跑完、看最後結果,沒辦法像 Claude 那樣盯著過程即時介入。這也是為什麼——

Claude Code 適合 pair programming,Codex 不適合。 Claude 那種快速迭代、approve 每個 edit、走偏就打斷的節奏,就是結對編程的精髓。Codex 太慢了,它的正確用法是「丟出去,十分鐘後回來收貨」。HN 上一個資深開發者的配比我覺得很有代表性:Claude Code 用 80%、Codex 用 20%,但 Codex 當 PR reviewer 是所有工具裡最強的。


Benchmark?早就打平了

如果你還在用 SWE-bench 分數來決定要用哪個,我勸你省點力。2026 上半年這兩邊的數字已經咬得超緊,而且每次有新模型就翻盤一次。

Benchmark(2026 上半年)Codex(GPT-5.x)Claude Code(Opus 4.x)
SWE-bench VerifiedGPT-5.5 88.7%(5 月反超)Opus 4.7 87.6%
Terminal-Bench 2.0GPT-5.3-Codex 77.3%Opus 4.7 69.4%
OSWorld-Verified(電腦操作)較低72.7%(領先)
Token 效率省 2–4×吃 token 較凶

SWE-bench Verified 上,GPT-5.5 在 5 月以 88.7% 微幅反超了 Opus 4.7 的 87.6% ——差距只有 1.1 分,根本是測量誤差等級。但你換個 benchmark 結論就變:Terminal-Bench 2.0 上 Codex 把 Claude 拉開一截(GPT-5.3-Codex 77.3%、GPT-5.4 75.1% vs Opus 4.7 69.4%,不同評測機構數字略有出入),終端/debug 類任務它是真的強。

所以與其問「誰分數高」,不如問「它們各自擅長哪條軸線」。這個結論反而很穩定:

  • Codex 擅長:terminal 操作、debug、抓 race condition 跟 edge case、PR review。Composio 的實測 裡,Codex 持續抓出 Claude 漏掉的邏輯錯誤。
  • Claude 擅長:大型 codebase 推理、跨檔重構、前端設計保真。同一份 Figma 設計克隆測試 裡,Claude 保留了排版結構跟原始設計的圖片,Codex 給的版本功能正常但視覺有出入。

一個我覺得最該記住的數字是 token 效率:Codex 完成同樣的任務通常省得多,各家評測落在 2–3 倍約 4 倍 之間,依任務型態而定。這件事看起來不起眼,但它直接連到下一個——也是會真正讓你崩潰的——問題。


會讓你崩潰的,其實是額度

能量油表快見底、亮起紅色警示燈

講真的,benchmark、個性那些都還好,rate limit 才是會讓你當場想砸鍵盤的東西。 這也是 Reddit 上最高頻、而且方向超一致的抱怨。

Claude Code 這邊,Opus 吃 token 的速度快到誇張。5 小時額度、每週額度動不動就撞牆,一堆重度用戶被迫只能拿 Claude Code 來「規劃」 ,或是中途降級去用 Sonnet 才不會超限。onevcat 甚至算過,他以 API 計價的方式,一個半月燒掉了價值三千多美金的 token——後來 Anthropic 推出 weekly limit,他自嘲「大概就是針對我這種重度用戶吧」。

Codex 這邊就寬鬆很多。同樣 $20 的 Plus 方案,一個 Reddit 用戶說他「狂刷 GPT-5.4 xhigh 都還碰不到 5 小時限制」 ,auto-compact 也很平順、長 session 不太掉 context。這就是大量人從 Claude Code 跳去 Codex 的頭號原因——不是模型比較強,是同樣的錢能做更多事。前面講的 token 效率 2–4×,到這裡就直接兌現成「更不容易撞額度」。

不過這裡要踩個煞車,講兩個反面訊號,免得你以為 Codex 是萬靈丹:

第一,Codex 也有週期性「變笨」的抱怨 。每隔一陣子就會冒出一波「Codex 失去魔力了」「最近在複雜問題上越來越笨、自主性下降」的貼文,通常是 OpenAI 默默調整模型導致的。這種事 Claude 也會發生,兩邊都不能免疫。

第二,Codex 雖然額度寬鬆,但它很 verbose,話多會吃掉額度優勢。有用戶就吐槽「Codex 很囉嗦,考慮到它的 limit 這點滿煩的」。所以省不省,還是要看你的任務型態。


我的混合工作流(也是業界主流)

繞了一圈,結論其實很無聊但很實在:能同時用就同時用。 這不是和稀泥,是 2026 年絕大多數資深開發者收斂出來的共識。它們的強項剛好互補,硬要二選一反而虧。

綠機器人畫架構藍圖、藍機器人拿放大鏡檢查程式碼,協作工作流

我自己是做硬體/韌體的,BLE、儀器、各種工具鏈一大堆,分享一下我的配法:

工作流程: 需求/任務 → 判斷類型 →(規劃/重構/理解 codebase)走 Claude Code 主力;(規格明確/可無人值守)丟 Codex 外包執行 → 兩者寫完、commit 前 → 交給 Codex 當 PR reviewer → 合併。

拆開講:

Claude Code 當主力,負責規劃、跨檔重構、理解既有 codebase、以及那些需要邊做邊對齊的活。對我來說最關鍵的是——它的 MCP 生態超成熟 ,我那一堆串接硬體、BLE 抓包、邏輯分析儀的 MCP server 接上去就能用,這是 Claude Code 的主場。

Codex 當 reviewer 兼執行外包。寫完、commit 之前,固定丟給 Codex 做一輪 PR review(前面說過,它是公認最強的 reviewer)。另外那些規格寫死、可以無人值守的任務——批次腳本、CI、DevOps、純粹的 debug——直接丟給它在雲端 sandbox 跑,我去做別的事。

還有個進階玩法:兩者都能當對方的 MCP server,互相呼叫。不少 power user 就靠這個做自動化的交叉 code review,讓 Claude 寫的東西自動過一遍 Codex 的法眼。

如果你真的預算有限只能挑一個,我的建議是:

  • 主要做韌體 debug、terminal 操作、規格清楚的活,而且很在意每月帳單 → 選 Codex
  • 主要做大型重構、需要深度推理跟互動、重度依賴 MCP 工具鏈,或公司幫你出錢 → 選 Claude Code(搭 Max 方案解額度焦慮)。

最後,講點掃興的真話

用了這麼久,我反而對「選哪個工具」這件事越來越無所謂了。

onevcat 那句話 我很認同:「當代 LLM 用戶的忠誠度接近於零,新模型吊打舊模型是業界常態,於是用戶也像候鳥一樣來回遷移。」廠商想用應用層那些 commands、subagent 配置來綁住你,但說真的——換工具的時候,那些精心設計的設定檔,幾分鐘複製貼上就能在新工具上重建。真正留得住人的,從來不是 lock-in,是模型本身的能力跟性價比。

所以與其糾結「Codex 還是 Claude Code」,不如把力氣花在一個更值得練的技能上:把需求講清楚。模糊的需求產生模糊的程式碼,清晰的需求才能逼出高品質的輸出。這個能力不管你用哪個工具、不管明年又冒出什麼新模型,都不會過期。

工具會一直換,候鳥年年遷徙。你的判斷力跟表達力,才是那個不會被 deprecated 的東西。

你現在主力是哪一個?有沒有什麼任務是某一邊特別頂、另一邊怎麼調都不行的?歡迎留言聊聊你的配方,我很想知道別人都怎麼搭。


參考資料

延伸閱讀

Wireshark常用搜尋命令與滲透分析指南

Wireshark常用搜尋命令與滲透分析指南 🔍 🛡️

Wireshark是一款功能強大的網絡封包分析工具,在網絡安全領域被廣泛應用於滲透測試、攻擊分析和事件響應。本文將詳細介紹Wireshark中的常用搜尋命令,特別是在分析可能的網絡入侵和惡意流量時的應用場景。

目錄

  1. 基本操作與界面介紹
  2. 常用顯示過濾器命令
  3. 網絡滲透分析場景
  4. 惡意流量識別技巧
  5. 隱蔽通道與C2通信檢測
  6. 常見攻擊模式分析
  7. 實戰案例
  8. 進階技巧與自動化分析

基本操作與界面介紹 🖥️

Wireshark的界面主要分為以下幾個部分:

  1. 顯示過濾器(Display Filter) - 用於設置過濾條件進行數據包列表過濾,位於工具欄下方。
  2. 數據包列表(Packet List Pane) - 顯示捕獲的所有數據包,每行代表一個數據包。
  3. 數據包詳細信息(Packet Details Pane) - 顯示當前選定數據包的詳細協議信息。
  4. 數據包字節視圖(Packet Bytes Pane) - 以十六進制和ASCII格式顯示數據包的原始內容。

💡 小提示: Wireshark 介面可以透過 View 選單自定義,根據分析需求調整各面板大小或顯示/隱藏特定面板。

Wireshark界面

搜尋功能 🔑

Wireshark具備強大的搜尋功能,可以通過以下方式快速定位重要信息:

  • 快捷鍵 Ctrl+F - 彈出搜尋對話框,支持多種搜尋模式:
    • Display Filter - 使用顯示過濾器語法搜尋
    • Hex Value - 搜尋十六進制字節值
    • String - 字符串搜尋
    • Packet list - 搜尋數據包列表中的內容
    • Packet details - 搜尋數據包詳細信息
    • Packet bytes - 搜尋數據包原始字節

注意: 搜尋大型捕獲文件時可能需要較長時間,建議先使用顯示過濾器縮小搜尋範圍,再進行具體搜尋。

常用顯示過濾器命令 🔧

在分析疑似網絡滲透的流量時,以下過濾器命令將非常有用:

IP地址過濾

# 過濾特定IP
ip.addr == x.x.x.x      # 源或目標IP為指定地址
ip.src == x.x.x.x       # 源IP為指定地址
ip.dst == x.x.x.x       # 目標IP為指定地址

# 排除特定IP
!(ip.addr == x.x.x.x)   # 排除指定IP

# 過濾IP範圍
ip.addr >= 192.168.1.1 and ip.addr <= 192.168.1.10

協議過濾

# 基本協議過濾
http                     # HTTP協議
https                    # HTTPS協議
dns                      # DNS協議
tcp                      # TCP協議
udp                      # UDP協議
icmp                     # ICMP協議
arp                      # ARP協議
ssl                      # SSL/TLS協議

# 協議組合
http or dns              # HTTP或DNS流量

端口過濾

# 端口過濾
tcp.port == 80           # TCP端口80(HTTP)
tcp.port == 443          # TCP端口443(HTTPS)
tcp.port == 22           # TCP端口22(SSH)
tcp.port == 21           # TCP端口21(FTP)
udp.port == 53           # UDP端口53(DNS)
tcp.port == 4444         # 常見的反向shell端口

# 非標準端口(可能是後門)
!(tcp.port in {80 443 20 21 22 25 110 143 993 995 3389}) and tcp.flags.syn == 1

組合過濾

# IP與端口組合
ip.addr == x.x.x.x && tcp.port == 80
tcp.port == 80 || udp.port == 53

# 複雜邏輯
(ip.src == x.x.x.x and tcp.dstport == 80) or (ip.dst == x.x.x.x and tcp.srcport == 80)

🎉 技巧: 在 Wireshark 顯示過濾器欄位中輸入時,語法正確的過濾條件背景會變成綠色,有語法錯誤則會變成紅色。

網絡滲透分析場景

在分析可能的網絡滲透案例時,以下場景與過濾器命令組合尤為重要:

1. 掃描活動檢測

# 端口掃描(大量SYN包)
tcp.flags.syn == 1 and tcp.flags.ack == 0

# 主機發送大量SYN包(可能是掃描器)
tcp.flags.syn == 1 and tcp.flags.ack == 0 and ip.src == x.x.x.x

# ICMP掃描
icmp.type == 8            # ICMP Echo請求(Ping掃描)

掃描活動檢測示意圖

攻擊者->目標主機A: SYN (端口 80)
攻擊者->目標主機A: SYN (端口 443)
攻擊者->目標主機A: SYN (端口 22)
攻擊者->目標主機B: SYN (端口 80)
攻擊者->目標主機B: SYN (端口 443)
Note right of 目標主機B: 典型端口掃描模式

2. 暴力破解檢測

# SSH暴力破解
tcp.port == 22 and tcp.flags.syn == 1

# HTTP基本認證(登錄嘗試)
http.authbasic

# HTTP POST登錄嘗試
http.request.method == "POST" and http.request.uri contains "login"

🔥 重要警示: 在實際環境中,暴力破解攻擊常常會在短時間內產生大量失敗的認證嘗試,應設置閾值監控異常認證行為。

3. 漏洞利用檢測

# SQL注入嘗試
http.request.uri contains "'" or http.request.uri contains "%27"
http.request.uri contains "union select" or http.request.uri contains "UNION SELECT"

# 命令注入嘗試
http.request.uri contains ";" or http.request.uri contains "|" or http.request.uri contains "`"

# XSS嘗試
http.request.uri contains "<script>" or http.request.uri contains "%3Cscript%3E"

惡意流量識別技巧 🔍

當系統已經被滲透時,以下過濾技巧可幫助識別惡意流量:

1. 數據外洩檢測

# 敏感數據檢測(例如信用卡號)
frame contains "4[0-9]{15}" or frame contains "5[1-5][0-9]{14}"  # 信用卡號格式

# 大量數據傳輸(可能是數據外洩)
tcp.len > 1000 and ip.dst == x.x.x.x

2. 異常連接檢測

# 非標準或罕見端口通信
tcp.port not in {80 443 22 25 110 143 53 123 20 21} and tcp.flags.syn == 1

# 持續時間異常長的連接
tcp.time_delta > 300      # 持續超過5分鐘的TCP連接

3. 流量統計與分析

Wireshark提供多種統計工具,有助於識別異常流量:

  • Conversations - 統計所有通信IP地址對,分析路徑:Statistics → Conversations
  • Protocol Hierarchy - 檢查協議分布,分析路徑:Statistics → Protocol Hierarchy
  • I/O Graph - 流量時間分布圖,可識別異常流量峰值,分析路徑:Statistics → I/O Graph

📈 分析提示: 在 I/O Graph 中,可以添加多個過濾條件並以不同顏色顯示,以便比較不同類型流量的時間分布特徵。

隱蔽通道與C2通信檢測 👁️

攻擊者通常使用隱蔽通道維持對被入侵系統的控制,以下過濾器命令可幫助發現這些隱蔽通道:

1. DNS隧道檢測

DNS隧道是最常見的隱蔽通道之一,攻擊者利用DNS請求和響應傳輸數據。

# 長度異常的DNS查詢
dns.qry.name.len > 50

# 高熵(隨機性)的DNS查詢名
dns.qry.name contains "base64" or dns.qry.name contains "enc"

# 子域名過多或異常的DNS查詢
dns.qry.name matches ".*\..*\..*\..*\..*\..*\..*"

# TXT記錄請求(常用於數據外洩)
dns.qry.type == 16       # TXT記錄類型

DNS隧道檢測流程圖

st=>start: 捕獲DNS流量
op1=>operation: 過濾長度超過50的查詢
op2=>operation: 檢查高熵值或隨機性域名
cond=>condition: 是否有異常?
op3=>operation: 深入分析可疑DNS流量
e=>end: 完成分析

st->op1->op2->cond
cond(yes)->op3->e
cond(no)->e

2. ICMP隧道檢測

# 異常大小的ICMP數據包
icmp.type == 8 and frame.len > 100

# ICMP Echo請求中包含異常數據
icmp.type == 8 and data.data contains "cmd"

3. HTTP/HTTPS隱蔽通道

# 異常的User-Agent
http.user_agent contains "Python" or http.user_agent contains "curl" or http.user_agent contains "wget"

# 非標準HTTP請求頻率
http.request and !(http.request.uri contains ".jpg" or http.request.uri contains ".png" or http.request.uri contains ".css" or http.request.uri contains ".js")

# 檢測可疑Beaconing行為(規律性請求)
http.request.method == "GET" and http.request.uri matches ".*\?id=.*"

C2檢測要點: 命令與控制(C2)通信通常具有定期的通信模式(beaconing),監控具有規律時間間隔的網絡請求尤為重要。

常見攻擊模式分析 📑

1. 橫向移動檢測

當攻擊者在網絡中橫向移動時,可能會留下以下痕跡:

# SMB連接(常用於內網橫向移動)
smb or smb2

# RDP連接
tcp.port == 3389

# PowerShell遠程執行
http.request.uri contains "powershell"

2. 數據抹除與反取證操作

# 大量刪除操作
smb2.cmd == 16           # SMB删除文件命令

3. Webshell活動

# 可疑文件上傳
http.request.method == "POST" and (http.request.uri contains ".php" or http.request.uri contains ".jsp" or http.request.uri contains ".asp")

# 可疑命令執行
http.request.uri contains "cmd" or http.request.uri contains "exec" or http.request.uri contains "system"

實戰案例 💻

案例1: 檢測網絡掃描和初始入侵

在一個實際案例中,安全團隊使用Wireshark分析流量,發現了以下可疑活動:

  1. 首先使用以下過濾器發現掃描活動:

    tcp.flags.syn == 1 and tcp.flags.ack == 0 and ip.src == 10.10.10.15
    
  2. 然後發現對Web伺服器的漏洞利用嘗試:

    http.request.method == "GET" and http.request.uri contains "wp-content/plugins"
    
  3. 最後檢測到成功的漏洞利用和Webshell上傳:

    http.request.method == "POST" and http.request.uri contains "upload.php"
    

案例1分析詳情
在這個案例中,攻擊者首先進行了網絡掃描尋找目標系統,利用WordPress插件漏洞進行了初始入侵,最終上傳了Webshell獲取持久訪問權限。這是典型的攻擊鏈模式,從掃描、漏洞利用到權限維持。

通過 Follow TCP Stream 功能,分析師可以看到完整的攻擊過程,包括漏洞利用代碼和上傳的Webshell內容。

案例2: 檢測數據外洩

在另一個案例中,分析師使用以下過濾器檢測可能的數據外洩:

  1. 首先查看與可疑外部IP的所有通信:

    ip.addr == 203.0.113.25
    
  2. 檢查是否存在大量數據傳輸:

    ip.dst == 203.0.113.25 and tcp.len > 1000
    
  3. 使用Follow TCP Stream功能分析通信內容,發現加密的敏感數據正被傳輸到外部服務器。

進階技巧與自動化分析 ⚙️

1. 使用tshark進行大規模分析

Wireshark的命令行版本tshark能夠處理大型PCAP文件,並支持脚本化分析:

# 提取所有HTTP請求
tshark -r capture.pcap -Y "http.request" -T fields -e http.host -e http.request.uri

# 提取所有DNS查詢
tshark -r capture.pcap -Y "dns.qry.name" -T fields -e dns.qry.name

# 檢測SSH暴力破解
tshark -r capture.pcap -Y "tcp.port==22 and tcp.flags.syn==1" -T fields -e ip.src | sort | uniq -c | sort -nr

2. 使用Display Filter Expression按鈕

Wireshark提供了一個顯示過濾器表達式按鈕,可以幫助構建複雜的過濾條件:

  • 點擊過濾欄位旁邊的Expression按鈕
  • 選擇相應的協議和欄位
  • 設置匹配條件和值

3. 使用顏色規則標記可疑流量

Wireshark允許設置顏色規則來突出顯示特定流量:

  • 選擇View → Coloring Rules
  • 添加新規則,例如:
    • 名稱:"可疑DNS隧道"
    • 過濾器:"dns.qry.name.len > 50"
    • 顏色:鮮紅色

💡 自動化分析提示: 使用 Wireshark 的 Lua 腳本功能可以編寫自定義檢測規則。專業安全團隊可開發專用腳本進行自動化威脅檢測。

4. 常用分析清單

在進行安全事件調查時,此清單可作為參考步驟:

  • 過濾異常協議流量
  • 檢查非標準端口通信
  • 分析可疑域名和IP連接
  • 檢測異常大小的數據包
  • 尋找規律性通信模式(beaconing)
  • 使用Follow Stream分析完整會話內容
  • 檢查敏感數據傳輸模式
  • 生成流量統計報告
  • 提取可疑樣本進行深入分析

結論 🏁

Wireshark是網絡安全分析的必備工具,特別是在對疑似被滲透系統進行調查時。掌握本文介紹的常用搜尋命令和過濾技巧,將大大提高您分析網絡流量和檢測惡意活動的能力。在實際應用中,建議將這些命令與其他安全工具結合使用,形成完整的安全監控和分析體系。

🎉 重要結語: 網絡流量分析是一項需要持續學習和實踐的技能。建議安全分析師定期更新知識,了解最新的攻擊技術和對應的檢測方法。

參考資源 📚

  1. Wireshark官方文檔: https://www.wireshark.org/docs/
  2. Wireshark顯示過濾器參考: https://www.wireshark.org/docs/dfref/
  3. 網絡安全流量分析最佳實踐: https://www.sans.org/reading-room/whitepapers/detection/
  4. MITRE ATT&CK 框架: https://attack.mitre.org/

tags: wireshark 網絡安全 滲透測試 封包分析 資安 網絡分析

本文最初發布於 HackMD @BASHCAT

Ἡράκλειτος:萬物皆流 - 生命與宇宙的永恆變動之舞

Ἡράκλειτος:萬物皆流 - 生命與宇宙的永恆變動之舞

2025年4月27日

赫拉克利特肖像 - 「雅典學院」壁畫中的哲學家形象 拉斐爾「雅典學院」壁畫中的赫拉克利特形象,他被描繪為沉思的哲學家

「你不能兩次踏入同一條河流,因為新的水總在流向你。」 —— 赫拉克利特

赫拉克利特其人其思

赫拉克利特(Heraclitus,約公元前535年-前475年),古希臘哲學家,生於以弗所(現今土耳其)的一個貴族家庭。他被後人稱作「晦澀哲人」,因為他的表達方式常使用隱喻、悖論,讓人難以理解。相傳他性格憂鬱,被稱為「泣之哲人」(Weeping Philosopher)。

赫拉克利特是古希臘哲學史上最具原創性的思想家之一,他創立了以弗所學派,並提出了「萬物皆流」這一著名哲學思想,對後世哲學產生了深遠影響。

「萬物皆流」的核心思想

「萬物皆流」(Panta Rhei,希臘語:πάντα ῥεῖ)是赫拉克利特哲學中最著名的概念。這句話完整的表述是「萬物皆流,無物常駐」,意味著世界的本質是永恆的變化,沒有任何事物是靜止不變的。

河流比喻:變化的生動隱喻

4D0AC8FF-1E08-4287-B3C0-C6A3341AFA9E

河流不斷流動,象徵萬物皆流的核心思想

赫拉克利特用河流作比喻來闡述這一思想:「人不能兩次踏入同一條河流」。這是因為當你第二次踏入時,河水已經流走,不再是之前那條河了;同時,踏入河流的你也已經發生了變化,不再是之前的那個你。

思考實驗:河流的啟示
想像一下:當你站在河邊,看著流水從你腳邊經過,每一秒鐘,你所見的已不再是同一條河。就像我們生活中的每一刻——當你讀完這個句子時,你已經與開始閱讀時的自己不同了。這個比喻生動地表達了萬物處於永恆變化中的哲學觀點。

火的哲學與宇宙觀

在赫拉克利特的宇宙觀中,火是最基本的元素和原理,他稱宇宙為「永恆的活火」。火象徵著永不停息的變化與運動,是世界的本質。

「這個宇宙,對所有人都是一樣的,不是神也不是人創造的,而是過去、現在和將來永恆燃燒的活火,按照一定的規律熄滅,又按照一定的規律點燃。」- 赫拉克利特

火的不斷變化成為赫拉克利特解釋世界的核心隱喻 - 一切皆在轉變中,沒有什麼是永恆不變的。就像燭火不斷消耗蠟燭卻持續發光,變化本身就是宇宙的常態。

哲學對決:赫拉克利特 vs 巴門尼德

哲學對立的視覺化

赫拉克利特與巴門尼德思想的對立:變化 vs 恆常

在古希臘哲學史上,赫拉克利特的「萬物皆流」與巴門尼德的「存在恆常」形成了鮮明對比,展開了西方哲學史上著名的辯論:

赫拉克利特 巴門尼德
主張「萬物皆流」 主張「存在恆常」
認為變化是唯一的真實 認為真實是不變的、永恆的、統一的
「一個人不可能兩次踏入同一條河流」 「思維與存在是同一回事」
強調感官經驗和現象世界 強調理性思考和本質世界
影響後來的辯證法思想 影響後來的形而上學思想

這一對立影響了整個西方哲學史的發展。後來,柏拉圖嘗試調和這兩種觀點,提出了「理念論」:變化的是現象世界,而恆常的是理念世界。這種辯論至今仍在哲學討論中延續。

對立統一與邏各斯

另一個赫拉克利特重要的思想是對立統一。他認為世界由相互對立的事物組成,而這些對立面又在更高層次上統一起來。例如:

「向下的路和向上的路是同一條路。」

「海水對魚是可飲用的和有益的,對人則是不可飲用的和有害的。」

日常生活中,我們也能發現這種對立統一的例子:沒有黑暗,我們就無法體會光明;沒有痛苦,我們就無法真正理解快樂。對立面相互依存,共同構成了世界的完整性。

赫拉克利特還提出了「邏各斯」(Logos)的概念,指宇宙中存在的普遍理性法則。雖然世界在不斷變化,但變化本身遵循著某種規律和秩序,這就是邏各斯。

萬物皆流的現代實例

在我們的現代生活中,「萬物皆流」的思想無處不在:

科技變革的加速

想想十年前你使用的手機、電腦和軟體,再看看現在 - 人工智能、元宇宙、區塊鏈技術不斷湧現。科技的變化速度越來越快,提醒我們赫拉克利特的洞見:適應變化是生存的關鍵。

個人身份的流動性

社交媒體上,我們不斷更新狀態、照片和想法,展現不同的自我形象。我們的身份認同不再固定,而是流動的、多層次的。正如心理學家威廉·詹姆斯所說:「自我是流動的」,這與赫拉克利特的思想不謀而合。

全球化與文化融合

不同文化之間的碰撞與融合產生新的文化形態,沒有任何文化能夠保持純粹不變。語言、飲食、音樂不斷演變,呈現出萬物皆流的特性。

生活實例練習:觀察日常變化

嘗試這個小練習:花一天時間記錄下你注意到的各種變化 - 從早晨的陽光角度、你的情緒波動、到周圍人的言行舉止。你會發現,變化確實是存在的唯一常態。

萬物皆流的現代意義

在當今快速變化的世界中,赫拉克利特的「萬物皆流」思想依然具有深刻的現代意義:

  1. 擁抱變化:提醒我們接受生活中的變化,而不是徒勞地抗拒它。
  2. 身份認同:如果我們不斷變化,那麼「我是誰」這個問題就變得更加複雜和有趣。
  3. 持續學習:在知識和技術快速更新的時代,持續學習和適應變化是必要的。
  4. 系統思考:理解世界是相互連接的系統,一切都在流動和影響中。

跨學科視角:古老智慧與現代科學

量子力學中的「萬物皆流」

現代物理學,特別是量子力學,在某種程度上印證了赫拉克利特的洞見。量子力學告訴我們,微觀世界中的粒子處於持續的運動和不確定性中,它們是波動和粒子的雙重性質。

[mermaid 圖表 — 原始 HackMD 版本可正常渲染]

graph LR A[量子不確定性] --> B[粒子波動性] B --> C[測不準原理] C --> D[萬物皆流] B --> D A --> D

海森堡的「測不準原理」顯示,我們無法同時精確測量粒子的位置和動量,這似乎呼應了赫拉克利特關於萬物流變的直覺。正如物理學家費曼所說:「一切皆為可能性的疊加,直到被觀測。」

東方哲學的共鳴

赫拉克利特的思想與東方哲學有驚人的相似之處:

  • 道家思想的「道法自然」強調順應變化的智慧。老子在《道德經》中說:「道生一,一生二,二生三,三生萬物」,描述了世界的生成與變化。

  • **佛教的「諸行無常」**也表達了相似的洞見,認為世間一切事物都在不斷變化,沒有恆常不變的實體。佛陀教導我們,執著於不變只會帶來痛苦。

心理學視角:接受變化的藝術

現代心理學研究表明,那些能夠接受變化、適應新環境的人,往往具有更強的心理彈性和幸福感。正念(Mindfulness)練習教導我們觀察思想和情緒的流動,而不執著於它們,這與赫拉克利特的思想不謀而合。

赫拉克利特對後世的影響

赫拉克利特的思想對後來的許多哲學家產生了重要影響:

  • 柏拉圖借用了他的流變思想來構建自己的理念論。
  • 黑格爾認為赫拉克利特的辯證法是西方哲學的起點。
  • 尼采對赫拉克利特推崇備至,認為他是「哲學中的閃電」。
  • 現代科學中的量子力學和相對論某種程度上呼應了赫拉克利特的變化哲學。

反思與互動:變化中的你

在我們這個變化速度前所未有的時代,赫拉克利特的智慧提醒我們:變化不是我們應該恐懼的,而是生命本身的本質。

就如同我們不能兩次踏入同一條河流,我們也不能兩次經歷同樣的生命瞬間。認識到這一點,能讓我們更加珍視每一個當下,並以更開放的心態面對不斷變化的世界。

正如赫拉克利特所言:「唯一不變的,就是變化本身。」

思考問題

  1. 你生活中哪些方面體現了「萬物皆流」的特性?
  2. 你是擁抱變化,還是抗拒變化?這種態度如何影響你的生活?
  3. 如果一切都在變化,我們為什麼仍然尋求穩定和確定性?
  4. 在永恆變化的世界中,什麼才是真正重要的?

分享你對「萬物皆流」的體悟,以及它如何影響你看待生活和世界的方式。你的視角可能會成為他人的啟發!


本文最初發布於 HackMD @BASHCAT

KiCad 設計DRC規則

KiCad DRC設計規則

截圖 2025-04-22 下午1.39.08 截圖 2025-04-22 下午1.41.41 截圖 2025-04-22 下午1.41.56

頂層語句 (Top-level Clauses)

在 KiCad 中,設計規則檔案的語法由頂層語句開始,以下是常見的頂層語句:

(version <版本號>)
(rule <規則名稱> <規則語句> ...)
  • version:指定語法版本,應設為 1
  • rule:定義一個規則,包含規則名稱與規則語句。

範例:

(version 1)
(rule "HV"
   (constraint clearance (min 1.5mm))
   (condition "A.hasNetclass('HV')"))

規則語句 (Rule Clauses)

規則語句用於描述設計規則的細節,以下是常見的語句:

  • constraint:定義約束條件。
  • condition:指定規則的條件。
  • layer:指定規則適用的層。
  • severity:設定違規的嚴重程度。

範例:

(rule "HV"
   (layer "outer")
   (constraint clearance (min 1.5mm))
   (condition "A.hasNetclass('HV')"))

常見約束類型 (Constraints)

以下列出一些常見的約束類型及其用途:

約束類型 變數類型 描述
clearance min 定義不同網路銅箔對象的電氣間隙。
track_width min/opt/max 檢查走線的寬度。
hole_size min/max 檢查焊盤或貫孔的鑽孔大小。
edge_clearance min/opt/max 檢查對象與板邊的間隙。
thermal_relief_gap min 指定熱焊盤與敷銅區域的最小間隙。
annular_width min/opt/max 檢查貫孔的孔環寬度。
assertion "<expression>" 檢查給定的表達式。
courtyard_clearance min 檢查封裝 Courtyard 之間的間隙。
diff_pair_gap min/opt/max 檢查差分對中耦合走線之間的間隙。
diff_pair_uncoupled max 檢查差分對正負走線非耦合部分的間隙。
disallow 項目類型列表 指定一個或多個對象類型不被允許。
hole_clearance min 檢查焊盤或貫孔中的鑽孔與不同網路的銅箔對象之間的間隙。
hole_to_hole min 檢查焊盤和貫孔中機械鑽孔之間的間隙。
physical_clearance min 檢查給定層上兩個對象之間的間隙,包括非銅層。
length min/max 檢查符合規則條件的網路的總走線長度。
silk_clearance min/opt/max 檢查絲印層上的對象與其他對象之間的間隙。
skew max 檢查符合規則條件的網路的偏斜值。
via_count max 計算每個與規則條件匹配的網路的貫孔數量。
zone_connection solid/thermal_reliefs/none 指定焊盤與敷銅區域之間的連接方式。

範例:

(rule "Pad to Track Clearance"
   (constraint clearance (min 0.2mm))
   (condition "A.Type == 'Pad' && B.Type == 'Track'"))

表達式函數 (Expression Functions)

表達式函數用於檢查對象的屬性或關係,以下是一些常見的函數:

  • A.hasNetclass('<netclass_name>'):檢查 A 是否屬於指定的網路類別。
  • A.intersectsArea('<zone_name>'):檢查 A 是否與指定區域相交。
  • A.isPlated():檢查 A 是否有鍍敷孔。
  • A.memberOfFootprint('<footprint_reference>'):檢查 A 是否屬於指定的封裝。
  • A.enclosedByArea('<zone_name>'):檢查 A 是否完全位於指定區域內。
  • A.existsOnLayer('<layer_name>'):檢查 A 是否存在於指定層。
  • A.fromTo('x', 'y'):檢查對象是否存在於兩個指定焊盤之間的銅路徑上。
  • A.getField('<field_name>'):獲取指定欄位的值(僅適用於封裝)。
  • A.hasComponentClass('<component_class_name>'):檢查 A 是否屬於指定的元件類別。
  • A.isMicroVia():檢查 A 是否為微型貫孔。
  • A.isBlindBuriedVia():檢查 A 是否為盲埋貫孔。
  • AB.isCoupledDiffPair():檢查 A 和 B 是否為同一差分對的成員。

範例:

(rule "copper keepout"
   (constraint disallow track via zone)
   (condition "A.intersectsArea('zone3')"))

違規等級 (Severity Names)

違規等級用於設定規則違反時的嚴重程度:

  • warning:警告。
  • error:錯誤。
  • exclusion:排除在外。
  • ignore:忽略。

範例:

(rule "silk_board_edge_clearance"
   (constraint silk_clearance)
   (severity ignore)
   (condition "A.memberOfFootprint('J*') && B.Layer=='Edge.Cuts'"))

更多範例

定義差分對間隙

(rule "dp clock gap"
   (constraint diff_pair_gap (opt "0.8mm"))
   (condition "A.inDiffPair('/CLK')"))

防止焊料從 SMD 焊盤吸走

(rule "holes_in_pads"
   (constraint physical_hole_clearance (min 0.2mm))
   (condition "B.Pad_Type == 'SMD'"))

確保元件與電路板邊緣的機械間隙

(rule "front_mechanical_board_edge_clearance"
   (layer "F.Courtyard")
   (constraint physical_clearance (min 3mm))
   (condition "B.Layer == 'Edge.Cuts'"))

禁止貫孔蓋油處有絲印

(rule "silk_over_via"
   (constraint silk_clearance (min 0.2mm))
   (condition "A.Type == '*Text' && B.Type == 'Via'"))

不同網路的貫孔間距

(rule "Distance between Vias of Different Nets"
   (constraint hole_to_hole (min 0.254mm))
   (condition "A.Type == 'Via' && B.Type == 'Via' && A.Net != B.Net"))

不同網路焊盤之間的間隙

(rule "Clearance between Pads of Different Nets"
   (constraint clearance (min 3.0mm))
   (condition "A.Type == 'Pad' && B.Type == 'Pad' && A.Net != B.Net"))

貫孔孔洞到走線的間隙

(rule "Via Hole to Track Clearance"
   (constraint hole_clearance (min 0.254mm))
   (condition "A.Type == 'Via' && B.Type == 'Track'"))

對差分對指定較大的間隙

(rule "dp clearance"
   (constraint clearance (min "1.5mm"))
   (condition "A.inDiffPair('*') && !AB.isCoupledDiffPair()"))

散熱焊盤使用實心連接(不使用熱焊盤)

(rule "heat_sink_pad"
   (constraint zone_connection solid)
   (condition "A.Fabrication_Property == 'Heatsink pad'"))

要求熱焊盤連接完整四個輻條

(rule "fully_spoked_pads"
   (constraint min_resolved_spokes 4))

設定所有區域的熱焊盤間隙和輻條寬度

(rule "defined_relief"
   (constraint thermal_relief_gap (min 10mil))
   (constraint thermal_spoke_width (min 12mil)))

電容器下方禁止銅填充

(rule "no_copper_under_caps"
   (constraint physical_clearance (min 0mm))
   (condition "A.Type == 'Zone' && B.Reference == 'C*'"))

禁止焊盤使用自定義阻焊開窗

(rule "disallow solder mask margin overrides"
   (constraint assertion "A.Soldermask_Margin_Override == null")
   (condition "A.Type == 'Pad'"))

允許連接器的絲印與板邊相交

(rule "silk_board_edge_clearance"
   (constraint silk_clearance)
   (severity ignore)
   (condition "A.memberOfFootprint('J*') && B.Layer=='Edge.Cuts'"))

高電流網路的走線寬度檢查

(rule "high-current"
   (constraint track_width (min 1.0mm))
   (constraint connection_width (min 0.8mm))
   (condition "A.hasNetclass('Power')"))

分別設定鑽孔和槽孔的尺寸限制

(rule "Plated through-hole size"
   (constraint hole_size (min 0.2mm) (max 6.35mm))
   (condition "A.isPlated() && A.Hole_Size_X == A.Hole_Size_Y"))

(rule "Plated slot size"
   (constraint hole_size (min 0.5mm))
   (condition "A.isPlated() && A.Hole_Size_X != A.Hole_Size_Y"))

忽略特定貫孔之間的間隙違規

(rule "hole_to_hole_uvia_exclusion"
   (condition "A.Via_Type == 'Blind/buried' && B.Via_Type == 'Micro'")
   (constraint hole_to_hole)
   (severity ignore))

基於製造標準的 PCB 設計規則

在實際的 PCB 設計過程中,遵循業界標準的設計規則非常重要,這可以確保您的設計能夠被可靠地製造出來。以下介紹一些基於 IPC 標準和常見製造能力的設計規則。

IPC 標準規則

IPC (Institute for Printed Circuits) 是電子行業協會,提供了廣泛採用的 PCB 設計和製造標準。以下是一些基於 IPC-2221 和 IPC-7351 標準的設計規則。

導線寬度與電流關係

根據 IPC-2221 標準,銅箔走線所能承載的電流與其寬度和厚度有關:

電流 (A) 外層走線寬度 (1oz 銅箔) 內層走線寬度 (1oz 銅箔)
0.5 0.15mm (6mil) 0.25mm (10mil)
1.0 0.25mm (10mil) 0.36mm (14mil)
2.0 0.5mm (20mil) 0.7mm (28mil)
3.0 0.75mm (30mil) 1.0mm (40mil)
4.0 1.0mm (40mil) 1.3mm (52mil)
5.0 1.25mm (50mil) 1.6mm (64mil)

在 KiCad 中實現此規則的例子:

(rule "High Current 2A"
   (constraint track_width (min 0.5mm))
   (condition "A.hasNetclass('Power2A')"))

(rule "High Current 5A"
   (constraint track_width (min 1.25mm))
   (condition "A.hasNetclass('Power5A')"))

爬電距離和電氣間隙

爬電距離 (Creepage) 是沿表面測量的兩個導體之間的最短路徑,而電氣間隙 (Clearance) 是兩個導體間的最短直線距離。這些值根據工作電壓、污染程度和絕緣材料來確定:

工作電壓 基本間隙 (無污染) 中度污染間隙 爬電距離 (標準 FR4)
0-50V 0.1mm (4mil) 0.2mm (8mil) 0.25mm (10mil)
51-150V 0.5mm (20mil) 0.8mm (32mil) 1.3mm (50mil)
151-300V 1.5mm (60mil) 2.0mm (80mil) 2.5mm (100mil)
301-500V 2.5mm (100mil) 3.0mm (120mil) 5.0mm (200mil)

KiCad 9 新增加了爬電距離設計規則檢查功能,可以這樣設定:

(rule "Creepage 150V"
   (constraint creepage (min 1.3mm))
   (condition "A.hasNetclass('HV') && B.hasNetclass('GND')"))

常見製造能力限制

不同的 PCB 製造商有不同的製造能力限制,以下是一些通用的限制:

標準製造能力

參數 標準能力 高級能力 超高能力
最小走線寬度 0.15mm (6mil) 0.1mm (4mil) 0.075mm (3mil)
最小間距 0.15mm (6mil) 0.1mm (4mil) 0.075mm (3mil)
最小鑽孔直徑 0.3mm (12mil) 0.2mm (8mil) 0.15mm (6mil)
最小環寬(環徑) 0.2mm (8mil) 0.125mm (5mil) 0.1mm (4mil)
最小絲印寬度 0.15mm (6mil) 0.1mm (4mil) 0.08mm (3mil)
最小阻焊開窗 0.25mm (10mil) 0.2mm (8mil) 0.15mm (6mil)

在 KiCad 中實現這些規則:

# 標準製造能力規則
(rule "Min Track Width"
   (constraint track_width (min 0.15mm)))

(rule "Min Clearance"
   (constraint clearance (min 0.15mm)))

(rule "Min Hole Size"
   (constraint hole_size (min 0.3mm)))

(rule "Min Annular Ring"
   (constraint annular_width (min 0.2mm)))

多層板設計規則

多層板設計時,需要考慮更多的設計規則:

層間對位

層間對位錯誤可能導致貫孔無法正確連接各層。通常的設計規則是:

(rule "Via Annular Ring"
   (constraint annular_width (min 0.125mm))
   (condition "A.Type == 'Via'"))

阻抗控制走線

高速信號需要阻抗控制,需要根據板層堆疊和材料特性計算走線寬度。常用的阻抗值有:

  • 單端信號:50Ω
  • 差分信號:90Ω-100Ω 差分阻抗 (每條走線約 45Ω-50Ω)

對於 FR4 材料,1.6mm 厚的板子,外層 1oz 銅箔,典型的走線寬度為:

  • 50Ω 單端走線:約 0.3mm (12mil)
  • 100Ω 差分走線:約 0.2mm (8mil) 寬,間距 0.2mm (8mil)
(rule "50ohm Impedance"
   (constraint track_width (opt 0.3mm))
   (condition "A.hasNetclass('50ohm')"))

(rule "100ohm Differential"
   (constraint track_width (opt 0.2mm))
   (constraint diff_pair_gap (opt 0.2mm))
   (condition "A.inDiffPair('*')"))

特殊應用設計規則

高頻設計

高頻設計需要特別注意信號完整性和電磁干擾:

# 高頻走線彎曲
(rule "RF Traces"
   (constraint track_width (min 0.2mm) (opt 0.3mm))
   (condition "A.hasNetclass('RF')"))

# 隔離高頻區域
(rule "RF Isolation"
   (constraint clearance (min 0.5mm))
   (condition "A.hasNetclass('RF') && !B.hasNetclass('RF')"))

高壓設計

高壓設計需要更大的間隙,通常基於 IPC-2221 標準:

(rule "High Voltage Isolation"
   (constraint clearance (min 3mm))
   (constraint physical_clearance (min 4mm))
   (condition "A.hasNetclass('HV') && !B.hasNetclass('HV')"))

低電流感測

對於電流感測電路,走線間的對稱性和阻抗匹配很重要:

(rule "Current Sense"
   (constraint track_width (opt 0.5mm))
   (constraint length (max 10mm))
   (condition "A.hasNetclass('I_SENSE')"))

常見設計檢查點

除了設計規則外,還應當檢查以下幾點,以確保 PCB 設計的可製造性:

  1. 熱焊盤設計:確保大型焊盤採用適當的熱焊盤連接,以避免焊接問題
  2. 銅平衡:確保各層銅箔分佈均勻,避免板子彎曲
  3. 鑽孔堆疊:避免鑽孔過於密集,可能導致板子強度下降
  4. 過孔覆蓋:確定是否需要覆蓋過孔,以防止焊料流入
  5. 元件間距:確保元件間有足夠間距,便於組裝和維修
  6. 測試點:添加足夠的測試點,便於製造後測試

設計規則檢查 (DRC) 最佳實踐

使用 KiCad 的 DRC 功能時,建議採用以下最佳實踐:

  1. 循序漸進檢查:先修復嚴重錯誤,再處理警告
  2. 定期運行 DRC:設計過程中定期運行 DRC,避免錯誤積累
  3. 建立規則庫:為不同類型的設計建立特定的規則檔案
  4. 分層檢查:分別檢查各個層的問題
  5. 記錄例外:對於有意忽略的設計規則違規,做好文檔記錄
# 設定例外規則,但加上說明,便於追蹤
(rule "Specific Via Exception"
   (constraint clearance (min 0.1mm))
   (severity warning)
   (condition "A.Type == 'Via' && A.Net == 'GND' && B.Net == 'GND'"))

進階表達式用法

在條件表達式中,您可以使用以下項目來表示測試對象:

  • A: 第一個(或唯一)測試項目
  • B: 第二個測試項目(對於需要兩個項目的規則)
  • L: 當前測試的層

您可以使用邏輯運算符組合多個條件:

  • &&: 邏輯與
  • ||: 邏輯或
  • !: 邏輯非

範例:

(condition "A.hasNetclass('HV') && !A.enclosedByArea('Shield*')")

您還可以使用條件表達式中的算術運算:

(constraint clearance (min "1.5mm + 2.0mm"))

規則優先順序

規則應按照具體到一般的順序排列。後面的規則優先於前面的規則;一旦找到匹配的規則,就不再檢查前面的規則。

範例:

# 一般規則
(rule "General Clearance"
   (constraint clearance (min 0.2mm)))

# 特定規則(優先於一般規則)
(rule "HV Clearance"
   (constraint clearance (min 0.5mm))
   (condition "A.hasNetclass('HV')"))

使用萬用字元

在表達式函數的參數中,支持簡單的萬用字元:

  • *: 匹配任意數量的字符
  • ?: 匹配任意單個字符

範例:

(condition "A.memberOfFootprint('R*')")  # 匹配所有以 R 開頭的封裝
(condition "A.memberOfFootprint('U?')")  # 匹配 U1, U2, U3 等

注意事項

  1. 版本語句必須是第一個語句,表示檔案的語法版本。
  2. 規則順序應按具體情況排序,後面的規則優先於前面的規則。
  3. 使用 Cmd+/ 可對選中的行添加或取消註釋。
  4. KiCad 9 中,設計規則檢查(DRC)的性能得到顯著改進,大型設計的檢查速度更快。
  5. 對於複雜條件,可將相關規則分成多個單獨的規則,以提高可維護性。

實際應用場景

高速信號設計

# 差分對規則
(rule "diff_pair_general"
   (constraint diff_pair_gap (min 0.1mm) (opt 0.2mm))
   (condition "A.inDiffPair('*')"))

# USB差分對特定規則
(rule "diff_pair_usb"
   (constraint diff_pair_gap (min 0.15mm) (opt 0.25mm))
   (constraint clearance (min 0.3mm))
   (condition "A.inDiffPair('/USB*')"))

# 控制差分對走線長度
(rule "diff_pair_length"
   (constraint length (max 50mm))
   (condition "A.inDiffPair('/USB*')"))

電源設計

# 主電源走線規則
(rule "main_power"
   (constraint track_width (min 1.0mm))
   (constraint clearance (min 0.3mm))
   (condition "A.hasNetclass('Power')"))

# 敏感模擬電源規則
(rule "analog_power"
   (constraint track_width (min 0.5mm))
   (constraint clearance (min 0.25mm))
   (condition "A.hasNetclass('Analog') && A.Name == '*VCC'"))

射頻設計

# RF相關區域的走線控制
(rule "rf_area"
   (constraint track_width (min 0.25mm) (opt 0.3mm))
   (constraint via_count (max 3))
   (condition "A.intersectsArea('RF_Zone')"))

# 阻抗控制
(rule "50ohm_traces"
   (constraint track_width (opt 0.35mm))
   (condition "A.hasNetclass('RF')"))

文件

更完整的文件請參考 KiCad 官方文件

KiCad 9 版本中的設計規則檢查功能已有顯著改進,包括增強的爬電距離設計規則檢查和更完整的設計規則表達式支援。使用 KiCad 9 版本的用戶可以利用這些新功能創建更強大和靈活的設計規則。


本文最初發布於 HackMD @BASHCAT

TTS 文字轉語音完全指南:技術原理、聲音克隆與 2026 選型實戰

前陣子我在測 Qwen3-TTS,官方技術報告寫著首包延遲 97ms,聽起來就是為即時對話而生的。結果我照官方範例跑起來,按下生成、等了整整 10 秒才聽到第一個字。乾,差了一百倍。 這不是我環境爛,而是 TTS 這個領域的日常:論文數字、行銷頁數字、你實際跑出來的數字,是三個...