2026.06.20 —— 今日 10 則
TODAY'S THREAD 今天的線索是「往引擎蓋底下看」——把 AI agent 的不確定性框進確定性的結構(抽取與推論分家、A2A 立協定邊界),再把 CPU 瓶頸、TypeScript 的新編譯器與 DuckDB 引擎的內部機制一一攤開。
把確定性抽取和 AI 推論拆開——schema 合規率從 0 拉到 100
Microsoft 工程團隊把一條工業級摘要流水線拆開:原本讓 LLM 在同一次推論裡又抽欄位又生成,輸出的 JSON 幾乎沒一次完全合 schema。他們改成多階段管線,把確定性的抽取和 AI 推論分到不同 pass、再加上驗證,schema 合規率從 0% 拉到 100%。核心教訓很樸素——別把確定性的工作丟進機率模型,模型該做的事愈窄、愈可驗證愈好。
A2A——替「agent 之間怎麼溝通」立一條協定邊界
Google 談 A2A(Agent-to-Agent)協定怎麼讓自主 agent 之間安全地協作與委派任務。重點不在又一個 agent 框架,而在它替「跨 agent 溝通」立了邊界:用協定約束彼此能看到什麼,避免 context 互相污染、也讓資料邊界可控。對在拼多 agent 系統的人,這是一個把臨時膠水換成標準介面的方向。
在系統裡抓殭屍——一場 CPU 瓶頸的追查
Pinterest 的 staff 工程師講了一段真實除錯:一個 CPU 瓶頸的元兇不在明顯的熱點,而是一批悄悄佔著 CPU 的「殭屍」工作。文章值得讀的不是結論,而是過程——哪些指標誤導了他們、哪一個量測才把真因照出來。這是一份可以照抄的效能追查方法論。
TypeScript 7.0 RC——原生重寫的編譯器進場
TypeScript 7.0 進入 RC,最大的改動是編譯器整個換了底——歷時約一年的原生重寫。對大型 codebase,這代表型別檢查與建置時間有機會大幅縮短,但也意味著要重新驗證既有 build 工具鏈與邊角行為。要不要早點切過去,是接下來幾個月每個 TS 專案都要面對的選擇。
Project Valhalla——醞釀十年的 value types 進 JDK 28
Project Valhalla 把醞釀十年的 value types 帶進 JDK 28。對 JVM 來說這是底層的大改:value class 讓物件可以沒有身分、被攤平進記憶體,省掉大量指標追逐與 boxing 開銷。對寫高效能 Java 的人,這是一個值得提早理解的記憶體模型轉變。
Uber 把 CPU 從超額分配改成可靠的核心共享
Uber 談他們怎麼把 CPU 資源配置從「超額分配」改成可靠的核心共享。過去靠 overallocation 換取彈性,代價是資源浪費與互相干擾;新做法在共享核心的同時守住可靠性。對在做容量規劃與多租戶調度的人,這是一份關於如何在利用率和隔離之間拿捏的實作筆記。
ATProto 裡其實沒有「instance」這回事
Dan Abramov 寫了一篇澄清:AT Protocol 裡其實沒有「instance」這回事。很多人拿 Mastodon/ActivityPub 的聯邦想像套到 atproto 上,但兩者的去中心化模型根本不同——atproto 把身分、資料與託管拆開,而不是綁在某台伺服器。想搞懂 Bluesky 為什麼能搬家不掉粉,得先丟掉 instance 這個錯誤心智模型。
A2UI + MCP Apps——調和 agent UI 的兩種路線
Google 提出把 A2UI 與 MCP Apps 結合的做法,來調和 agent 介面的兩種路線:宣告式的原生渲染,與塞進 iframe 的自訂環境。前者一致、可控,後者自由、能做複雜互動;文章談的是怎麼讓兩者各取所長。對在做 agent 前端的人,這是一個關於「該讓 agent 畫 UI 到什麼程度」的設計參考。
DuckDB 引擎內部——in-process 分析庫為什麼快
這篇拆開 DuckDB 的引擎內部,講一個 in-process 的分析型資料庫為什麼能跑得快。它假設你會 SQL,但帶你重新認識「嵌入式、欄式、向量化執行」這幾件事怎麼疊起來——和 SQLite、Postgres 這種 row-store 差在哪。對在選分析資料庫、或想搞懂 OLAP 引擎的人,這是很好的第一課。
Slack 重寫通知系統——讓桌面與行動端收斂成一套模型
Slack 重寫了通知系統,目標是讓桌面與行動端的通知行為收斂成同一套模型。過去兩端各自演化,導致同一則訊息在不同裝置上的「該不該通知」常常不一致;重構後它們共用一致的判定邏輯。對在維護跨平台通知的人,這是一份關於如何把分裂的行為統一回單一事實來源的架構筆記。