[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-spark-42-turns-ai-search-into-sql-zh":3,"article-related-spark-42-turns-ai-search-into-sql-zh":30,"series-tools-5c82774f-9220-475a-ba1d-ef35c8d180d5":75},{"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":23,"views":27,"created_at":28,"published_at":29,"topic_cluster_id":11},"5c82774f-9220-475a-ba1d-ef35c8d180d5","spark-42-turns-ai-search-into-sql-zh","Spark 4.2 把 AI 搜尋收進 SQL","\u003Cp data-speakable=\"summary\">以前 AI 搜尋要三套系統接線，現在 Spark 4.2 想把查詢、向量、串流收回同一個引擎。\u003C\u002Fp>\u003Cp>我用 Spark 很久了，老實說，平常升級說明我都只掃一眼：快一點、穩一點、Python 再順一點。看久了真的會麻木。但這次我停下來，因為我在公司和客戶那邊看到的 AI 架構，幾乎都長得一樣醜：一套管事件，一套管特徵，一套向量庫管檢索，外面再包一層 glue code，像把漏水管子用膠帶纏到看不見就算數。\u003C\u002Fp>\u003Cp>那種架構不是不能跑，是很會偷你的時間。延遲忽快忽慢，\u003Ca href=\"\u002Ftag\u002F資料治理\">資料治理\u003C\u002Fa>分散在不同工具，團隊一直吵 embedding 到底放哪裡、freshness 誰負責、為什麼一個「簡單」AI 功能最後要三個服務、兩份監控、還有一個沒人信的 dashboard。這篇我主要拆 \u003Ca href=\"https:\u002F\u002Fthenewstack.io\u002Fspark-4-2-ai-workloads\u002F\">The New Stack 對 Spark 4.2 的整理\u003C\u002Fa>，再對照 \u003Ca href=\"https:\u002F\u002Fspark.apache.org\u002F\">Apache Spark\u003C\u002Fa> 官方文件和專案頁面，因為這種東西不能只看標題。\u003C\u002Fp>\u003Cp>我先講結論：Spark 4.2 不是真的要把所有 \u003Ca href=\"\u002Ftag\u002Fai-工具\">AI 工具\u003C\u002Fa>都吃掉。它更像是在把 AI serving 的重心往自己身上拉，讓 ingestion、feature prep、vector search、streaming、metrics 都有機會待在同一個 SQL\u002Fengine 裡。這種改法不只是在加功能，是真的會改你怎麼畫架構圖。\u003C\u002Fp>\u003Cp>外部錨點很明確：觸發我寫這篇的就是 The New Stack 那篇文章，原文沒有提供觀看數或收藏數，我就不亂猜了。真正值得看的，是它把 Spark 4.2 說成 AI workloads 的基礎層，而不是另一個單點工具。\u003C\u002Fp>\u003Ch2>向量庫最容易先被懷疑，因為它本來就常是多餘的一層\u003C\u002Fh2>\u003Cblockquote>“Spark 4.2 has a feature that could retire your vector database.”\u003C\u002Fblockquote>\u003Cp>這句話如果直翻，不是叫你明天把 Pinecone 刪掉。它的意思比較務實：Spark 正在往很多團隊原本會丟給專門向量庫的那一段靠攏。也就是說，如果 Spark 已經能把 embedding 建好、存好、查好，而且延遲和吞吐對你的工作負載夠用，那獨立向量庫就\u003Ca href=\"\u002Fnews\u002Fgoogle-q2-2026-results-ai-spend-story-zh\">不再\u003C\u002Fa>是必需品，而是選項。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1785067404325-tkwt.png\" alt=\"Spark 4.2 把 AI 搜尋收進 SQL\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我以前看過兩種很典型的翻車。第一種是先買了向量庫，覺得架構很乾淨，結果後面每次資料更新都要從 Postgres、Kafka、Spark job 一路同步過去，最後變成同步系統比檢索系統還難維護。第二種更慘，硬把向量檢索塞進一般資料庫，結果查詢慢、調參痛苦、大家都只想假裝沒看到。\u003C\u002Fp>\u003Cp>所以我現在看向量庫，不會先問它酷不酷，我只問兩件事：source of truth 在哪裡，還有我到底想維護幾份同樣的資料。只要你開始多一份索引、多一份同步、多一份 drift，後面就是成本一路疊上去。\u003C\u002Fp>\u003Cp>實操上我會這樣判斷：如果 embeddings 本來就在 Spark pipeline 裡產生，或 feature pipeline 也已經在 Spark 裡，那就先畫 retrieval path。看向量庫除了 similarity search 之外，有沒有真的提供你非它不可的能力。如果沒有，先把「一定要獨立一套」這個預設拿掉。\u003C\u002Fp>\u003Cul>\u003Cli>保留專門向量庫：當你有硬性低延遲 SLA，Spark 真的扛不住。\u003C\u002Fli>\u003Cli>考慮 Spark-first retrieval：當 embeddings 與資料管線本來就綁在一起，freshness 比極致延遲更重要。\u003C\u002Fli>\u003Cli>先算 duplication tax：每多一個 store，就多一份同步、多一份 drift、多一份故障面。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>Spark 想變成 serving 層，這件事比加一個 API 重要\u003C\u002Fh2>\u003Cp>以前我對 Spark 的理解很簡單：它負責處理資料，真正對外服務的交給別的系統。這個切法在 batch 時代很合理，因為「serving」通常就是 app 去打資料庫，沒那麼多花樣。但 AI 工作負載把這條線弄模糊了，很多所謂 \u003Ca href=\"\u002Ftag\u002Finference\">inference\u003C\u002Fa>-adjacent 的東西，本質上就是資料工程加一個搜尋步驟。\u003C\u002Fp>\u003Cp>Spark 4.2 讓我在意的地方，是它開始像一個 serving 中樞：同一個引擎既能 ingest、也能算特徵、也能查相似項。這代表少掉很多 handoff。少 handoff 通常就少 stale copy、少 sync job、少那種半夜才發現索引已經落後六小時的事故。\u003C\u002Fp>\u003Cp>我之前做過一個推薦系統，特徵一套 pipeline、上線一套 pipeline、nearest-neighbor lookup 又是第三個 service。產品說要改一個小規則，我得先翻三個 codebase，再對兩個部署節奏。圖上看起來很整齊，實際上根本是 coordination tax 機器。\u003C\u002Fp>\u003Cp>所以我現在會把 Spark 這條路理解成：它不是再多一層工具，而是把「查詢」變成 engine 的原生能力。當 retrieval、table、stream、Python logic 都在同一個地方時，很多原本要靠 glue code 撐住的東西就會消失。\u003C\u002Fp>\u003Cp>實操寫法很直接：把你現在 AI request path 從 ingestion 畫到 response，逐段數系統切換次數。再把那些只是因為歷史包袱才存在的切換標出來。這些地方，就是 Spark 有機會吃掉的地方。\u003C\u002Fp>\u003Cul>\u003Cli>資料只 ingest 一次，不要三頭同步。\u003C\u002Fli>\u003Cli>Embeddings 和 feature derivation 盡量靠近。\u003C\u002Fli>\u003Cli>架構還在變動時，先選一個 operational control plane。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>治理過的 metrics 很無聊，但出事時最值錢\u003C\u002Fh2>\u003Cp>大家看到向量搜尋會興奮，我反而先盯住 governed metrics。來源文章提到 Spark 4.2 在 metrics 上也有治理能力，這種東西平常沒人想聊，等到第一次 audit、第一次 billing dispute、第一次模型事故，大家才開始追問：到底哪個數字是真的？\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1785067402128-j43i.png\" alt=\"Spark 4.2 把 AI 搜尋收進 SQL\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>白話一點，就是 Spark 4.2 想讓 metric definitions 更集中、更可重複。聽起來很 boring，沒錯，這就是我喜歡的地方。因為最常出事的，不是模型本身，而是 training、offline evaluation、production monitoring 三邊各算各的 accuracy，最後每個人都覺得自己沒有錯。\u003C\u002Fp>\u003Cp>我看過很多團隊把 metric 放在 notebook，之後搬到 BI tool，再後來又寫成一個沒人想接手的 custom service。只要 AI 系統開始影響產品行為，metric drift 就不是 data science 小事，而是治理問題。你沒辦法拿三個不同版本的「正確答案」去跟主管討論。\u003C\u002Fp>\u003Cp>如果 Spark 把 metric 定義和計算都留在同一個 engine 裡，chain of custody 會乾淨很多。這不只對受\u003Ca href=\"\u002Fnews\u002Fai-regulation-india-business-risk-2026-zh\">監管\u003C\u002Fa>產業有用，對一般團隊也有用，因為你終於不用一直吵誰的數字才算數。\u003C\u002Fp>\u003Cp>實操上，我會先列出團隊所有 KPI、模型 metric、retrieval quality metric。每一個都回答三題：定義在哪、計算在哪、誰負責。只要這三個答案分散在三套系統，你就已經有一個治理問題了。\u003C\u002Fp>\u003Ch2>串流升級不是配角，它決定這套東西能不能真的近即時\u003C\u002Fh2>\u003Cp>只有 vector search 不夠。資料一 stale，檢索就 stale；事件一 lag，特徵就 lag。這也是為什麼 Spark 4.2 的 streaming 改進，我看得跟搜尋一樣重。\u003C\u002Fp>\u003Cp>The New Stack 那篇提到 streaming upgrades，我覺得這是整個 AI-serving 敘事能不能成立的關鍵。真正的近即時系統，靠的不是某個酷炫 \u003Ca href=\"\u002Ftag\u002Fapi\">API\u003C\u002Fa>，而是資料流能不能持續往前推。如果 Spark 能同時處理 streams，還能把結果直接餵給 retrieval，那你的索引就不需要靠 cron job 和祈禱維持新鮮。\u003C\u002Fp>\u003Cp>我踩過太多這種坑：stream processor 看起來健康，indexer 看起來健康，產品卻還是錯。最後才發現問題不是單點壞掉，而是兩套系統之間的 handoff 慢到爆。使用者感受到的不是「系統很複雜」，而是「你這個 real-time 功能其實晚了快一小時」。\u003C\u002Fp>\u003Cp>串流也會直接影響 embedding pipeline。只要 source data 持續變動，embedding 就不能用一個慢吞吞的離線流程硬拖。Spark 的方向，是把這件事收回同一個引擎處理，不要再把協調工作丟給另一套 stack。\u003C\u002Fp>\u003Cp>實操寫法：先把所有依賴 freshness 的 AI 功能列出來，像推薦、fraud、search、ranking、support routing。接著問自己一句很殘酷的話：現在這套是不是 batch-first，外面再補一層 streaming？如果是，那這個設計多半已經老了。\u003C\u002Fp>\u003Ch2>Python 支援不是小事，因為 adoption 卡死通常卡在這裡\u003C\u002Fh2>\u003Cp>很多平台團隊會低估 Python 這件事，覺得反正底層 JVM 很穩，寫法漂亮一點就好。問題是，資料科學家和 ML 工程師大多活在 Python notebook 裡，你如果要他們為了平台切去另一種語言，阻力會很真實。\u003C\u002Fp>\u003Cp>我對 Spark 4.2 的 Python 支援比較有感，因為它其實在做一件很務實的事：去接大家已經在用的工作方式。技術上很漂亮的系統，如果沒人想碰，還是失敗。這句很難聽，但我看過太多次了，工具差一點但好用，最後就是贏。\u003C\u002Fp>\u003Cp>Python 也讓 AI prototype 到 production 的距離短一點。不是說會變簡單，而是少掉很多 runtime 邊界、wrapper、adapter、重寫邏輯。少掉這些，團隊才有機會把時間花在模型和資料，而不是花在「怎麼把同一段邏輯再包一次」。\u003C\u002Fp>\u003Cp>實操上，我會先算你現在的 split brain 成本：Python 實驗環境和 JVM 生產環境之間，有多少轉譯、多少重寫、多少工具只存在於語言邊界？如果答案\u003Ca href=\"\u002Fnews\u002Fopus-5-fewer-refusals-ship-faster-zh\">讓你\u003C\u002Fa>皺眉，Spark 4.2 的 Python 方向就值得你認真看。\u003C\u002Fp>\u003Cp>順手補兩個外部參考：\u003Ca href=\"https:\u002F\u002Fspark.apache.org\u002Fdocs\u002Flatest\u002F\">Apache Spark docs\u003C\u002Fa> 可以看官方能力邊界，\u003Ca href=\"https:\u002F\u002Fspark.apache.org\u002F\">專案首頁\u003C\u002Fa> 可以看版本節奏。這些東西比社群轉貼更可靠。\u003C\u002Fp>\u003Ch2>我真正想省下來的是 babysit 系統的時間\u003C\u002Fh2>\u003Cp>講到底，Spark 4.2 最有意思的地方，不是它又多了一個 shiny feature，而是它提供了一條減少系統數量的路。這件事很無聊，但很值錢。因為在真實世界裡，省下來的通常不是算力，是人力和注意力。\u003C\u002Fp>\u003Cp>每多一個 store、index、service，你就多一份 patch、多一份 monitor、多一份 backup、多一份 incident review 裡要解釋的東西。新同事來了還要教一次：這個為什麼存在？那個為什麼不能刪？如果 Spark 能吞掉 AI serving path 的一大段，架構就會比較好懂，也比較好養。\u003C\u002Fp>\u003Cp>但我不想把話講死。不是每個工作負載都該被 Spark 吃掉。某些場景就是需要專門向量基礎設施，某些團隊就是已經把 retrieval 系統做得很好，硬搬反而更糟。只是預設值正在變：現在輪到獨立系統去證明自己值得存在。\u003C\u002Fp>\u003Cp>實操上，我會做一次 stack audit。把一個 AI feature 相關的所有系統列出來，標成 source、transform、store、retrieve、serve。只要某個元件只是因為別人做不到才存在，就該被認真質疑。你要找的是能刪掉的地方，不是再多加一層。\u003C\u002Fp>\u003Cul>\u003Cli>先保留 rollback path，再談 cutover。\u003C\u002Fli>\u003Cli>把 freshness、recall、query latency 分開量。\u003C\u002Fli>\u003Cli>別把實驗 metric 和 production metric 混在一起。\u003C\u002Fli>\u003Cli>Python ergonomics 要當成正式需求，不是 bonus。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>可抄的模板\u003C\u002Fh2>\u003Cpre>\u003Ccode># Spark 4.2 AI serving 模板（可直接改成你自己的版本）\n\n## 目標\n把 ingestion、feature prep、embeddings、retrieval、governed metrics 收進同一條 Spark pipeline。\n\n## 適用情境\n- embeddings 已經在 Spark 或靠近 Spark 的 Python jobs 裡產生\n- 你想少掉同步 job，讓 retrieval 更新更快\n- 你想把 batch、streaming、AI serving 放進同一個操作面\n- 你想把 metric 定義和計算留在同一個地方\n\n## 先保留獨立向量庫，如果你有這些需求\n- 你有硬性低延遲 SLA，Spark 目前扛不住\n- 你需要 Spark 環境裡沒有的專門 ANN 能力\n- 你的 retrieval 工作負載已經很穩，沒必要重構\n\n## 架構長相\n1. 把來源資料 ingest 到 Spark\n2. 做清理、正規化、去重\n3. 產生 embeddings\n4. 存到 Spark 可存取的 tables 或 indexes\n5. 用 Spark 做相似項查詢\n6. 在 Spark 裡計算 governed metrics\n7. 把結果送到 app 或 model service\n\n## 決策清單\n- Spark 現在是不是資料 source of truth？\n- embeddings 是否跟來源資料同一條 pipeline 更新？\n- 是否已經有重複的 retrieval data copy？\n- retrieval 和 quality metrics 能不能用 code 一次定義？\n- freshness 是否比 sub-millisecond latency 更重要？\n\n## 遷移步驟\n### Phase 1：畫圖\n先把目前 AI request path 的每個系統畫出來。\n\n### Phase 2：收斂\n把 embedding generation 和 metric computation 拉近 Spark。\n\n### Phase 3：對照測試\n拿現有 vector store 做 side-by-side retrieval 比對。\n\n### Phase 4：切換\n只切 latency 和 quality 都達標的 workload。\n\n## 風險控管\n- 保留回退到舊向量庫的路\n- 分開量 freshness、recall、query latency\n- 不要把實驗 metric 混進 production metric\n- 把 Python ergonomics 當成正式需求\n\n## 可直接放進評估文件的一句話\n如果 Spark 4.2 能替這個工作負載承擔 ingestion、embeddings、retrieval 和 governed metrics，我們就能少一個專門系統和一條同步路徑。\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>這份模板我刻意寫得保守一點。我的經驗是，先少掉一個系統、少掉一條同步路徑，通常就已經很有感了；不要一開始就想玩平台純度競賽，最後把自己搞得更亂。\u003C\u002Fp>\u003Cp>來源致謝：這篇拆解主要來自 \u003Ca href=\"https:\u002F\u002Fthenewstack.io\u002Fspark-4-2-ai-workloads\u002F\">The New Stack\u003C\u002Fa> 的原文，以及 \u003Ca href=\"https:\u002F\u002Fspark.apache.org\u002F\">Apache Spark\u003C\u002Fa> 官方專案與 \u003Ca href=\"https:\u002F\u002Fspark.apache.org\u002Fdocs\u002Flatest\u002F\">文件\u003C\u002Fa>。我寫的判斷、案例和模板是衍生整理，不是原文逐字翻譯。\u003C\u002Fp>","我拆 Spark 4.2 怎麼把向量搜尋、串流和 Python 收進同一個 SQL 引擎，順手給你一份可直接抄的 AI serving 模板。","thenewstack.io","https:\u002F\u002Fthenewstack.io\u002Fspark-4-2-ai-workloads\u002F",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1785067404325-tkwt.png","tools","zh","4530354f-b1d6-40cd-9281-26bda8b7b836",[17,18,19,20,21,22],"Spark 4.2","vector search","AI serving","streaming","Python","SQL",[24,25,26],"Spark 4.2 的價值在於把 AI serving 收斂到同一個引擎，減少同步與治理成本。","向量庫不一定要刪，但要先證明自己比 Spark 更值得存在。","可直接複製的模板已附上，適合拿去做架構評估或遷移規劃。",0,"2026-07-26T12:02:55.376028+00:00","2026-07-26T12:02:55.362+00:00",{"tags":31,"relatedLang":34,"relatedPosts":38},[32],{"name":21,"slug":33},"python",{"id":15,"slug":35,"title":36,"language":37},"spark-42-turns-ai-search-into-sql-en","Spark 4.2 turns AI search into SQL","en",[39,45,51,57,63,69],{"id":40,"slug":41,"title":42,"cover_image":43,"image_url":43,"created_at":44,"category":13},"6f9cbc0e-712e-438e-9b75-96431bdcdf33","openai-incident-postmortem-security-template-zh","OpenAI 事故帖教你寫安全復盤","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1785024220921-qols.png","2026-07-26T00:03:15.743094+00:00",{"id":46,"slug":47,"title":48,"cover_image":49,"image_url":49,"created_at":50,"category":13},"08c27def-4f0f-4959-b7bd-e112d1dd8f8d","sap-design-system-ai-cross-platform-ui-kits-zh","SAP Design System 加入 AI 與跨平台 UI Kit","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1785009771871-nkf6.png","2026-07-25T20:02:25.288494+00:00",{"id":52,"slug":53,"title":54,"cover_image":55,"image_url":55,"created_at":56,"category":13},"60e3efb8-e6dd-4c31-9b56-d91cc2bd04d7","chatgpt-health-turns-chat-into-health-layer-zh","ChatGPT Health 直接進主對話","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1785002596802-9crh.png","2026-07-25T18:02:50.190152+00:00",{"id":58,"slug":59,"title":60,"cover_image":61,"image_url":61,"created_at":62,"category":13},"d1580f53-26f0-4bc7-8788-d8ba029bb096","microsoft-azure-amd-ai-hpc-2026-zh","Microsoft 把 AMD 晶片帶進 Azure AI","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1784964760772-c01a.png","2026-07-25T07:32:15.638692+00:00",{"id":64,"slug":65,"title":66,"cover_image":67,"image_url":67,"created_at":68,"category":13},"0461ca72-072e-40dd-a2b4-0521afd6c7a7","openai-compatible-model-comparison-script-zh","一套 OpenAI 兼容脚本測出差距","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1784918020667-jwkd.png","2026-07-24T18:33:10.378548+00:00",{"id":70,"slug":71,"title":72,"cover_image":73,"image_url":73,"created_at":74,"category":13},"d3a5b328-3573-404b-bd9d-807901e54dd3","gemini-live-camera-turns-seeing-into-help-zh","Gemini Live 用鏡頭把問題變答案","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1784851388356-f4dz.png","2026-07-24T00:02:41.656237+00:00",[76,81,86,91,96,101,106,111,116,121],{"id":77,"slug":78,"title":79,"created_at":80},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":82,"slug":83,"title":84,"created_at":85},"9b19ab54-edef-4dbd-9ce4-a51e4bae4ebb","mcp-in-2026-the-ai-tool-layer-teams-use-zh","2026 年 MCP：團隊真的在用的 AI 工具層","2026-03-26T08:01:46.589694+00:00",{"id":87,"slug":88,"title":89,"created_at":90},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":92,"slug":93,"title":94,"created_at":95},"05553086-6ed0-4758-81fd-6cab24b575e0","garry-tan-open-sources-claude-code-toolkit-zh","Garry Tan 開源 Claude Code 工具包","2026-03-26T08:26:20.068737+00:00",{"id":97,"slug":98,"title":99,"created_at":100},"042a73a2-18a2-433d-9e8f-9802b9559aac","github-ai-projects-to-watch-in-2026-zh","2026 必看 20 個 GitHub AI 專案","2026-03-26T08:28:09.619964+00:00",{"id":102,"slug":103,"title":104,"created_at":105},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":107,"slug":108,"title":109,"created_at":110},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":112,"slug":113,"title":114,"created_at":115},"bfdb467a-290f-4a80-b3a9-6f081afb6dff","aiml-2026-student-ai-ml-lab-repo-review-zh","AIML-2026：像課綱的學生實驗 Repo","2026-03-27T01:21:51.467798+00:00",{"id":117,"slug":118,"title":119,"created_at":120},"80cabc3e-09fc-4ff5-8f07-b8d68f5ae545","ai-trending-github-repos-and-research-feeds-zh","AI Trending：把 AI 資源收成一張表","2026-03-27T01:31:35.262183+00:00",{"id":122,"slug":123,"title":124,"created_at":125},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]