[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-zero-turns-compiler-errors-into-agent-ready-json-zh":3,"article-related-zero-turns-compiler-errors-into-agent-ready-json-zh":30,"series-ai-agent-16b899c7-3861-4030-bac6-e7bdefb93cf9":83},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":22,"views":26,"created_at":27,"published_at":28,"topic_cluster_id":29},"16b899c7-3861-4030-bac6-e7bdefb93cf9","zero-turns-compiler-errors-into-agent-ready-json-zh","Zero 把編譯錯誤變成 JSON","\u003Cp data-speakable=\"summary\">我拆 Vercel Zero 的 \u003Ca href=\"\u002Ftag\u002Fagent\">agent\u003C\u002Fa>-first 編譯器設計，順手給你一份可直接抄走的結構化診斷模板。\u003C\u002Fp>\u003Cp>我用一陣子編譯器，也看過一堆「AI 寫 code」demo，老實說，很多都卡在同一個爛點。模型寫完，工具跑完，編譯器吐一大串人類看得懂、機器看不懂的廢話，然後 agent 開始像熬夜第九小時的菜鳥一樣亂猜。不是模型笨，是我們一直拿給它一套給人類看的工具。人類可以掃一眼錯誤訊息、看 caret、自己腦補上下文；agent 不行，它只能硬把文字拆開再猜一次。我以前覺得這是模型問題，後來才發現，多半是介面設計太爛。\u003C\u002Fp>\u003Cp>所以我看到 \u003Ca href=\"https:\u002F\u002Faiautomationglobal.com\u002Fblog\u002Fvercel-zero-programming-language-ai-agents-2026\">Vercel Zero 的介紹\u003C\u002Fa>時，第一個反應不是「又一個語言」，而是「終於有人把底層假設講白了」。重點不是語法多漂亮，而是它把編譯器的第一個客戶改成 \u003Ca href=\"\u002Ftag\u002Fai-agent\">AI agent\u003C\u002Fa>，而不是我。這件事聽起來很小，但其實很臭很真實：今天很多 agent 失敗，不是因為不會寫 code，是因為它們被迫讀一套人類中心的輸出格式。\u003C\u002Fp>\u003Cp>這篇我不是在幫 Zero 做宣傳。它還很早期，資訊也很有限；我只是拿它當切入口，拆它背後的方法論。你如果在做 agent loop、CI bot、或任何需要自動修 code 的東西，這套想法其實很值得抄。\u003C\u002Fp>\u003Ch2>編譯器現在不是吐錯誤，是在跟 agent 送 API\u003C\u002Fh2>\u003Cblockquote>“The compiler does not print error messages — it emits structured JSON with stable error codes and typed repair IDs that an agent can act on without parsing English.”\u003C\u002Fblockquote>\u003Cp>翻譯一下就是：編譯器不再是對人類抱怨的公告欄，它變成 API 了。這個角度一換，很多以前看起來很怪的設計，瞬間就合理了。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779745044037-gkmf.png\" alt=\"Zero 把編譯錯誤變成 JSON\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>傳統流程是：模型寫 code，compiler 回一坨 prose，模型再去讀 prose、猜意思、決定修哪裡。這流程我自己手動看都嫌煩，何況是 agent。因為它要先判斷這是 syntax error、type error、依賴問題，還是剛剛那次修改造成的連鎖反應。只要 compiler 還在講人話，agent 就永遠得做翻譯\u003Ca href=\"\u002Fnews\u002Fmanus-ai-turns-workflows-into-agent-projects-zh\">工作\u003C\u002Fa>。\u003C\u002Fp>\u003Cp>我之前在 \u003Ca href=\"\u002Ftag\u002Ftypescript\">TypeScript\u003C\u002Fa> 跟 Rust 的自動修復 loop 裡真的踩過這種雷。模型看到一長串 compiler dump，會抓第一個「聽起來像答案」的建議去改，結果修錯地方還很有自信。那不是推理能力不夠，是輸入格式太吵。Zero 的核心主張就是：如果你想讓機器修 code，就別再丟給它一段 terminal 散文。\u003C\u002Fp>\u003Cp>實操上，我會這樣做：把 compiler output 當成合約，不是當成 log。能改 compiler 的話，就直接定義 JSON schema；不能改，就在外面包一層 adapter，先把文字轉成結構化診斷，再餵給 agent。不要讓 agent 直接讀 stderr，真的很蠢。\u003C\u002Fp>\u003Cul>\u003Cli>穩定的 code，比「看起來很像人話」的訊息有用太多。\u003C\u002Fli>\u003Cli>typed repair ID 比「你可以試試看」這種建議更適合機器。\u003C\u002Fli>\u003Cli>agent 能用欄位分支，就不要叫它讀段落。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>穩定錯誤碼，比漂亮訊息更值錢\u003C\u002Fh2>\u003Cp>Zero 這類設計真正重要的，不是它把錯誤訊息寫得多精緻，而是它把錯誤碼固定住了。像原文提到的 NAM003 這種 code，如果跨版本還是同一件事，我就能把修復邏輯綁上去，不會因為下一版 wording 改了，整個自動化就失靈。\u003C\u002Fp>\u003Cp>這點我一直覺得很多工具作者沒想清楚。人類可以容忍模糊語句，因為我們會自己補上下文；agent 不行。它不是「理解」文字，它是拿文字做分類、做決策、做 patch。只要輸出格式一飄，修復 loop 就很容易變脆。穩定 code 的價值就在這裡：它讓模型有固定錨點，不用每次都重新猜。\u003C\u002Fp>\u003Cp>我看過 CI bot 自動修 build failure，結果 warning 文案一改，heuristic 就抓錯。最後 bot 去改錯檔案，還以為自己很聰明。那根本不是 AI 問題，是介面問題。Zero 的意思其實很直白：如果你要機器幫你修 code，就不要讓它從寫給終端機看的文字裡猜意思。\u003C\u002Fp>\u003Cp>實操上我會建議你把 diagnostics 當 API version 來管。不要只印一句話，至少要有 code、severity、location、machine-actionable category。能穩定就穩定，因為 agent 需要的是可預期，不是文案美感。\u003C\u002Fp>\u003Cul>\u003Cli>用 code 當 key，不要用 message 當 key。\u003C\u002Fli>\u003Cli>diagnostic schema 要版本化，也要文件化。\u003C\u002Fli>\u003Cli>修復邏輯先查 code，再看 text。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>typed repair ID 才是真正的修復語彙\u003C\u002Fh2>\u003Cp>原文提到 Zero 會附像 \u003Ccode>declare-missing-symbol\u003C\u002Fcode>、\u003Ccode>add-capability\u003C\u002Fcode> 這種 typed repair ID。這個東西很關鍵，因為它把 compiler help 從一段描述，變成一個 enum。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779744978421-ftdb.png\" alt=\"Zero 把編譯錯誤變成 JSON\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>白話講，就是 compiler 不只是說「有問題」，它還告訴 agent「問題屬於哪一類修法」。這會大幅縮小搜尋空間。你不用叫模型從零發明修法，而是先把它丟進一個受限的動作集合裡。對 agent loop 來說，這差很多，因為每多一次瞎猜，就多燒 token、多花時間、還可能把 branch 弄壞。\u003C\u002Fp>\u003Cp>我在 Rust 跟 TypeScript 的 agent 修復裡也看過類似狀況。像「consider adding a type annotation」這種話，對人類還行，對機器太鬆了，因為它可能代表三種不同改法。typed repair ID 不會消滅推理，但它會把起點縮小到一個可控範圍。模型還是要看 code，但它先知道自己是在修哪一類錯。\u003C\u002Fp>\u003Cp>實操上，我會自己定一套 repair taxonomy，而且不要貪多。先做小而可執行的類別：missing import、wrong arity、capability absent、type mismatch、invalid config key。然後讓 agent 先根據類別分流，再決定要不要開檔。這種東西很 boring，但通常很有效。\u003C\u002Fp>\u003Cp>如果你覺得這很像 lint rule，你沒看錯。差別在於 Zero 把這套修復語彙直接塞進 compiler contract 裡，不是事後補一層工具。這就是我在意的地方。\u003C\u002Fp>\u003Ch2>capability 讓副作用變得看得見\u003C\u002Fh2>\u003Cp>Zero 的 capability-based I\u002FO model 也很有意思。函式如果沒拿到 capability，就不能做那個 effect。沒有隱藏 global，沒有 helper 背後偷跑副作用。\u003C\u002Fp>\u003Cp>也就是說，signature 本身就在講實話。作為 agent，我不用猜這個函式會不會碰網路、改狀態、寫檔案。capability 直接寫在那裡。這能少掉一個很煩的失敗\u003Ca href=\"\u002Fnews\u002Fai-agent-business-models-four-ways-zh\">模式\u003C\u002Fa>：模型以為某個 helper 是 pure 的，結果它其實會開 socket、寫磁碟、或打外部服務。\u003C\u002Fp>\u003Cp>我自己在 \u003Ca href=\"\u002Ftag\u002Fcode-review\">code review\u003C\u002Fa> 被這種事陰過，agent 也一樣。它看到一個很乾淨的 helper，就會假設它安全。結果下一秒它把資料寫進檔案、打到 service、或者偷偷改了狀態。人類靠經驗能抓到，agent 最好靠 compiler 直接提醒。\u003C\u002Fp>\u003Cp>實操上，如果你在設計內部 API，最好把 side effect 明確化。可以放進 type system，也可以放進 function signature metadata。就算做不到那麼硬，也至少用 convention 把 I\u002FO、network、mutation 包起來，別讓它們藏在一般 helper 裡。\u003C\u002Fp>\u003Cp>這也是我覺得 Zero 不是單純語言新奇，而是設計壓力的展示。Rust、Go、TypeScript 都有一點這種味道，但 Zero 把話講得更直接：對機器來說，顯式 effect 不是加分題，是基本題。\u003C\u002Fp>\u003Ch2>結構化輸出，才是 agent loop 的正解\u003C\u002Fh2>\u003Cp>原文一直在對比現在這套 stack：agent 呼叫 rustc 或 tsc，然後再去 parse terminal text。這就是我最常看到的隱形稅。\u003C\u002Fp>\u003Cp>翻譯一下就是，agent loop 每一步都在做轉譯：讀 source、跑 compiler、\u003Ca href=\"\u002Fnews\u002Fopenai-us-privacy-policy-explained-zh\">解析\u003C\u002Fa> prose、推理修法、改 source、再跑一次。每多一層轉譯，就多一個 drift 的機會。Zero 的做法，是先把 compiler output 變成 machine-readable，直接砍掉最大那層噪音。\u003C\u002Fp>\u003Cp>我不會把這件事講得像魔法。結構化 diagnostic 不會幫你解邏輯 bug、不會補測試、也不會救爛架構。它只是讓 agent 不要被 compiler 的文案絆倒。老實說，光這樣就很值了。我寧可要一個無聊但可預期的修復 loop，也不要一個很聰明但常常瞎修的系統。\u003C\u002Fp>\u003Cp>實操上，我會建議你把整條工具鏈都往 machine-readable 推。能吐 JSON 就吐 JSON，log 先 normalize，free-form suggestion 轉成欄位。如果你自己能控制 compiler 或 linter，就先把 machine interface 做好，再考慮 terminal 美化。順序真的有差。\u003C\u002Fp>\u003Cul>\u003Cli>machine-readable output 會直接降低修復歧義。\u003C\u002Fli>\u003Cli>漂亮的 terminal output 可以有，但只能當 view，不該是 source of truth。\u003C\u002Fli>\u003Cli>你少掉一個 parse step，agent 就少一個幻覺修法的機會。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>Zero 不是重點，壓力才是重點\u003C\u002Fh2>\u003Cp>我不覺得 Zero 會取代 Rust、Go 或 TypeScript。原文也講得很清楚，它還是 experimental、版本也還在 0.1.2，現在拿去做 payments、auth、核心 infra，基本上是在賭命。我不會這樣幹。\u003C\u002Fp>\u003Cp>但它厲害的地方在於，它把設計壓力直接攤出來。當一個語言把 structured diagnostics、stable repair IDs、explicit capabilities 當預設，舊工具鏈就會開始顯得有點鈍。不是爛，是舊。Rust 已經有 \u003Ca href=\"https:\u002F\u002Fdoc.rust-lang.org\u002Frustc\u002Fjson.html\">JSON error output\u003C\u002Fa>，但還是 opt-in；TypeScript 有 \u003Ca href=\"https:\u002F\u002Fwww.typescriptlang.org\u002Fdocs\u002Fhandbook\u002Fcompiler-options.html\">compiler options 跟 error codes\u003C\u002Fa>，但沒有 typed repair IDs；Go 的工具鏈在某些地方很結構化，可是它不是先把 agent 當第一使用者。Zero 其實是在提醒大家：現在要先問，這套東西是給誰看的？\u003C\u002Fp>\u003Cp>實操上，我不會等新語言來救我。我會先把同樣的原則補進現有 stack：structured diagnostics、stable codes、explicit effects、repair categories。你如果在跑 \u003Ca href=\"https:\u002F\u002Fwww.anthropic.com\u002Fclaude-code\">Claude Code\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fcursor.com\u002F\">Cursor\u003C\u002Fa>，或自己寫 agent loop，就盡量讓 compiler output 對模型來說比對人類更好吃。\u003C\u002Fp>\u003Cp>這才是我從 Zero 拆出來最有用的地方：編譯器現在已經是 agent API 的一部分了。你一旦接受這件事，很多以前看起來很怪的工具選擇，就突然不怪了。\u003C\u002Fp>\u003Ch2>可抄的模板\u003C\u002Fh2>\u003Cpre>\u003Ccode># Agent-first compiler contract template\n\n## 1) Diagnostic schema\n{\n  \"ok\": false,\n  \"diagnostics\": [\n    {\n      \"code\": \"NAM003\",\n      \"severity\": \"error\",\n      \"message\": \"unknown identifier\",\n      \"line\": 3,\n      \"column\": 12,\n      \"repair\": {\n        \"id\": \"declare-missing-symbol\",\n        \"confidence\": 0.94,\n        \"candidates\": [\"import-symbol\", \"declare-local\", \"rename-reference\"]\n      }\n    }\n  ]\n}\n\n## 2) Stable repair taxonomy\n- declare-missing-symbol\n- import-symbol\n- add-capability\n- narrow-type\n- fix-arity\n- remove-invalid-effect\n- update-config-key\n\n## 3) Agent loop rules\n1. Call compiler with machine-readable output only.\n2. Branch on diagnostic.code first.\n3. Use diagnostic.repair.id as the primary fix class.\n4. Never infer a repair from free-form prose if a structured field exists.\n5. Re-run compile after each edit and stop on the first clean pass.\n\n## 4) Capability-style API pattern\n\u002F\u002F bad: hidden side effect\nfn write_report(data) {\n  save_to_disk(data)\n}\n\n\u002F\u002F better: explicit capability\nfn write_report(data, io: FileIO) {\n  io.save_to_disk(data)\n}\n\n## 5) Wrapper for existing tools\n# Example: normalize human compiler output into JSON\ncompiler --format json 2>\u002Fdev\u002Fnull | agent-normalizer\n\n## 6) What to store in your playbook\n- compiler version\n- stable error codes\n- repair categories\n- known false positives\n- safe auto-fix rules\n- human escalation rules\n\n## 7) Copy-paste policy for teams\nIf the tool can emit structured output, the agent must consume structured output.\nIf the tool cannot emit structured output, add a parser layer before the agent sees it.\nIf the repair is not backed by a code or typed category, do not auto-apply it.\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>這段不是 Zero 本身，也不是照抄原文；是我把它背後的方法論整理成你真的能拿去用的版本。你如果在做 \u003Ca href=\"\u002Ftag\u002Fagentic-coding\">agentic coding\u003C\u002Fa>、CI 自動修、或內部工具鏈，這份模板可以直接開工。\u003C\u002Fp>\u003Cp>來源我放在這裡：\u003Ca href=\"https:\u002F\u002Faiautomationglobal.com\u002Fblog\u002Fvercel-zero-programming-language-ai-agents-2026\">AI Automation Global 的 Vercel Zero 文章\u003C\u002Fa>，以及參考對照的 \u003Ca href=\"https:\u002F\u002Fvercel.com\u002F\">Vercel\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fvercel\">Vercel GitHub org\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fdoc.rust-lang.org\u002Frustc\u002Fjson.html\">Rust JSON diagnostics\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fwww.typescriptlang.org\u002Fdocs\u002F\">TypeScript docs\u003C\u002Fa>。前面拆解是我自己的整理，模板是我根據這個方向重寫的實作版。","我拆 Vercel Zero 的 agent-first 編譯器設計，順手給你一份可直接抄走的結構化診斷模板。","aiautomationglobal.com","https:\u002F\u002Faiautomationglobal.com\u002Fblog\u002Fvercel-zero-programming-language-ai-agents-2026",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779745044037-gkmf.png","ai-agent","zh","198b2c7e-50d9-4805-a586-a77401d6de3d",[17,18,19,20,21],"compiler diagnostics","structured JSON","agentic coding","repair IDs","capability-based I\u002FO",[23,24,25],"編譯器輸出要先給機器看，不要先討好人類。","穩定錯誤碼和 typed repair ID，能讓 agent 修復更穩。","把副作用寫進能力或型別，agent 才不會亂猜。",5,"2026-05-25T21:35:55.593391+00:00","2026-05-25T21:35:55.565+00:00","e3b68196-9e64-4c18-a3b6-a73e73bfb367",{"tags":31,"relatedLang":42,"relatedPosts":46},[32,34,36,38,40],{"name":18,"slug":33},"structured-json",{"name":21,"slug":35},"capability-based-io",{"name":19,"slug":37},"agentic-coding",{"name":17,"slug":39},"compiler-diagnostics",{"name":20,"slug":41},"repair-ids",{"id":15,"slug":43,"title":44,"language":45},"zero-turns-compiler-errors-into-agent-ready-json-en","Zero turns compiler errors into agent-ready JSON","en",[47,53,59,65,71,77],{"id":48,"slug":49,"title":50,"cover_image":51,"image_url":51,"created_at":52,"category":13},"ef96a410-24bd-4e35-8536-439f21f820e6","claude-code-dynamic-workflow-ai-harness-zh","Claude Code 動態工作流：AI 自寫 Harness","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781035378200-qkm9.png","2026-06-09T20:02:21.942031+00:00",{"id":54,"slug":55,"title":56,"cover_image":57,"image_url":57,"created_at":58,"category":13},"9fb91fbe-64cd-4732-aba7-5b20daacf962","agent-orchestration-enterprise-ai-layer-zh","企業 AI 缺的是編排層","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780984981291-rodj.png","2026-06-09T06:02:30.929215+00:00",{"id":60,"slug":61,"title":62,"cover_image":63,"image_url":63,"created_at":64,"category":13},"2e389faa-a4ab-4f7a-b6da-c2ba69d5f14b","ai-agents-use-blockchain-trust-layer-zh","AI 代理用區塊鏈當信任層","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780980509390-6s0i.png","2026-06-09T04:48:01.259033+00:00",{"id":66,"slug":67,"title":68,"cover_image":69,"image_url":69,"created_at":70,"category":13},"1c433948-634b-47e4-a119-dd567203a712","8-rag-patterns-demos-into-prod-zh","8 種 RAG 模式把 Demo 變上線","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780971552397-h12o.png","2026-06-09T02:18:36.130013+00:00",{"id":72,"slug":73,"title":74,"cover_image":75,"image_url":75,"created_at":76,"category":13},"7d860405-aca6-486b-8de0-1c5193a3b06d","fine-tuning-beats-rag-style-not-facts-zh","當目標是文風不是事實時，微調比 RAG 更有效","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780924689232-5elu.png","2026-06-08T13:17:25.235242+00:00",{"id":78,"slug":79,"title":80,"cover_image":81,"image_url":81,"created_at":82,"category":13},"3d1e5ef7-8f31-4e57-b286-306825d7f38e","openclaw-small-business-ai-staff-zh","OpenClaw把AI變成夜班員工","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780904888882-6w0v.png","2026-06-08T07:47:27.229503+00:00",[84,89,94,99,104,109,114,119,124,129],{"id":85,"slug":86,"title":87,"created_at":88},"4ae1e197-1d3d-4233-8733-eafe9cb6438b","claude-now-uses-your-pc-to-finish-tasks-zh","Claude 開始幫你操作電腦","2026-03-26T07:20:48.457387+00:00",{"id":90,"slug":91,"title":92,"created_at":93},"5bede67f-e21c-413d-9ab8-54a3c3d26227","googles-2026-ai-agent-report-decoded-zh","Google 2026 AI Agent 報告解讀","2026-03-26T11:15:22.651956+00:00",{"id":95,"slug":96,"title":97,"created_at":98},"2987d097-563f-46c7-b76f-b558d8ef7c2b","kimi-k25-review-stronger-still-not-legend-zh","Kimi K2.5 評測：更強，但還不是神作","2026-03-27T07:15:55.277513+00:00",{"id":100,"slug":101,"title":102,"created_at":103},"95c9053b-e3f4-4cb5-aace-5c54f4c9e044","claude-code-controls-mac-desktop-zh","Claude Code 也能操控 Mac 了","2026-03-28T03:01:58.58121+00:00",{"id":105,"slug":106,"title":107,"created_at":108},"dc58e153-e3a8-4c06-9b96-1aa64eabbf5f","cloudflare-100x-faster-ai-agent-sandbox-zh","Cloudflare 的 AI 沙箱跑超快","2026-03-28T03:09:44.142236+00:00",{"id":110,"slug":111,"title":112,"created_at":113},"1c8afc56-253f-47a2-979f-1065ff072f2a","openai-backs-isara-agent-swarm-bet-zh","OpenAI 挺 Isara 的 agent swarm …","2026-03-28T03:15:27.513155+00:00",{"id":115,"slug":116,"title":117,"created_at":118},"7379b422-576e-45df-ad5a-d57a0d9dd467","openai-plan-automated-ai-researcher-zh","OpenAI 想做自動化 AI 研究員","2026-03-28T03:17:42.090548+00:00",{"id":120,"slug":121,"title":122,"created_at":123},"48c9889e-86df-450b-a356-e4a4b7c83c5b","harness-engineering-ai-agent-reliability-2026-zh","駕馭工程：從「馬具」到「作業系統」，AI Agent 可靠性的終極密碼","2026-03-31T06:42:53.556721+00:00",{"id":125,"slug":126,"title":127,"created_at":128},"96d8e8c8-1edd-475d-9145-b1e7a1b02b65","mcp-explained-from-prompts-to-production-zh","MCP 怎麼把提示詞變工作流","2026-04-01T09:24:39.321274+00:00",{"id":130,"slug":131,"title":132,"created_at":133},"f2ca7720-b471-4ce5-9336-2a9ac2a876fd","amazon-bedrock-agents-multi-agent-workflows-zh","Amazon Bedrock Agents 進入多代理工作流","2026-04-01T09:30:29.945429+00:00"]