[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-bentoml-turns-model-serving-into-python-apis-zh":3,"article-related-bentoml-turns-model-serving-into-python-apis-zh":31,"series-tools-d5af1522-28aa-4cfb-8779-1ecf168bc0b5":84},{"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":30},"d5af1522-28aa-4cfb-8779-1ecf168bc0b5","bentoml-turns-model-serving-into-python-apis-zh","BentoML 把模型服務變成 Python API","\u003Cp data-speakable=\"summary\">我拆 BentoML 的 serving 思路，順手給你一份可直接複製的 \u003Ca href=\"\u002Ftag\u002Fopenai\">OpenAI\u003C\u002Fa> 相容模型 API 模板。\u003C\u002Fp>\u003Cp>我用過一堆 model serving stack，最煩的不是它們不能跑，是它們一副「我很簡單」的樣子，結果一接到真實需求就開始露餡。BentoML 也一度讓我有這種感覺：看起來像一個 Python library，實際摸下去卻發現它想處理的不只是模型推論，還有 batching、queue、multi-model chain、甚至 OpenAI-compatible API。問題是，這些東西如果沒有一開始就攤開講，後面就只會變成你在半夜補膠水。\u003C\u002Fp>\u003Cp>我真正想要的很無聊：一個地方定義服務、一個方式對外暴露、再加上一些夠用的 primitives，讓我不用自己手刻 orchestration glue。BentoML 的 \u003Ca href=\"\u002Ftag\u002Fgithub\">GitHub\u003C\u002Fa> 組織和 repo 讓這件事變得很清楚。它不是在賣「把模型丟上去就好」的幻覺，它是在講一整套 serving 的做法。這篇我就拆這套方法論，最後給你一份可以直接抄的模板。\u003C\u002Fp>\u003Cp>我這次主要看的來源是 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbentoml\">BentoML GitHub organization\u003C\u002Fa>，尤其是主 repo \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbentoml\u002FBentoML\">BentoML\u003C\u002Fa>，還有延伸出去的 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbentoml\u002FOpenLLM\">OpenLLM\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbentoml\u002FYatai\">Yatai\u003C\u002Fa>，以及 examples。這些 repo 比起行銷文案，更像是把整個系統的輪廓直接攤給你看；我沒有硬掰 star 或觀看數，因為原始來源沒有提供我能放心引用的固定數字。\u003C\u002Fp>\u003Ch2>BentoML 不是模型包裝器，它是 API 工廠\u003C\u002Fh2>\u003Cblockquote>BentoML is a Python library for building online serving systems optimized for AI apps and model inference.\u003C\u002Fblockquote>\u003Cp>翻譯一下就是：BentoML 不把自己定位成「模型外殼」，它想當的是你把模型變成可對外服務的那台機器。這差很多。前者只是在模型外面包一層，後者是在處理整個服務邊界。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781054310299-c1gm.png\" alt=\"BentoML 把模型服務變成 Python API\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我以前也很愛把 serving framework 想得太小，覺得只要能把 model load 起來，剩下都好說。結果一碰到 request validation、輸入格式轉換、權限、路由、錯誤處理，整個故事就開始歪。BentoML 的\u003Ca href=\"\u002Fnews\u002Fopenai-europe-privacy-policy-zh\">重點\u003C\u002Fa>是：service 才是單位，不是 model file。這個觀念一旦錯了，後面你會一直在補洞。\u003C\u002Fp>\u003Cp>這也是我覺得它比較實際的地方。真實 AI app 很少只有一個模型、一個 endpoint。你可能有 classifier、reranker、generator，外加一些純 Python 的前處理或後處理。BentoML 允許你把這些東西放在同一個服務邊界裡，不用硬塞進模型 runtime。這點我很買單，因為很多 serving tool 都假裝「模型自己會把事情做完」，那根本不是真的。\u003C\u002Fp>\u003Cp>實操上，我會先問自己：這個服務邊界到底包什麼？如果你需要 preprocessing、routing、queueing、甚至多個模型互相串接，那就不要從「怎麼 serve 模型」開始想，直接從「怎麼定義 service」開始。模型只是 service 裡的一個零件，不是整台車。\u003C\u002Fp>\u003Cp>你可以把 BentoML 想成一個 API factory：它把 Python code、模型 runtime、輸入輸出格式，整理成一個可以被呼叫的介面。這樣做的好處是，你不用每次都重寫一套 serving 腳手架。壞處也很明顯：如果你一開始沒想清楚服務邊界，這個 factory 只會幫你更快把混亂生產出來。\u003C\u002Fp>\u003Ch2>原生 primitives 才是 BentoML 的重點，不是 demo\u003C\u002Fh2>\u003Cblockquote>It offers the key primitives for serving optimizations, task queues, batching, multi-model chains, distributed orchestration, and multi-GPU serving.\u003C\u002Fblockquote>\u003Cp>也就是說，BentoML 想給你的不是一個「看起來很順」的 demo，而是一組能拼出真實服務的積木。這很重要，因為很多框架在 demo 階段都很漂亮，一進 production 就開始裝死。\u003C\u002Fp>\u003Cp>我最在意的是 batching。做過 \u003Ca href=\"\u002Ftag\u002Finference\">inference\u003C\u002Fa> 的人都知道，GPU 最討厭那種一筆一筆慢慢餵的請求。吞吐量要上來，batching 幾乎是基本功。task queue 也一樣，當你的 request 已經不是 request，而是「幫我跑完這個工作」，那就不該硬把它塞在同步請求裡。multi-model chain 則是另一個現實：一個模型通常不夠，尤其是 RAG、rerank、tool use、資料清洗這些流程，一定會碰到多步驟。\u003C\u002Fp>\u003Cp>我之前做過一個 retrieval app，流程很直白：先 embed query，再 retrieve docs，再 rerank，再生成回答，最後還要 log 跟 retry。這種東西如果硬塞進單一 model server，後面維護起來會很難看。BentoML 的 primitives 讓我可以把 orchestration 保持可見，不用假裝「反正都是推論，丟給模型就好」。\u003C\u002Fp>\u003Cp>實操寫法很簡單：先畫 request lifecycle。哪一步是同步、哪一步可 batch、哪一步要 queue、哪一步是獨立模型呼叫，先分清楚再寫 code。不要一開始就把所有邏輯塞進一個 endpoint function，因為那種 code 最後通常只有寫的人敢碰。\u003C\u002Fp>\u003Cul>\u003Cli>吞吐量比單筆延遲重要時，先想 batching。\u003C\u002Fli>\u003Cli>使用者可以等結果時，先想 queue。\u003C\u002Fli>\u003Cli>一個模型輸出會餵給另一個模型時，先想 chain。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果你把這些 primitives 看成「附加功能」，你就會錯過 BentoML 真正的價值。它不是在幫你省幾行 code，它是在幫你把服務的形狀先定出來，免得你之後在 production 裡面補抽象。\u003C\u002Fp>\u003Ch2>OpenAI-compatible API 不是噱頭，是省 integration 的捷徑\u003C\u002Fh2>\u003Cblockquote>Run any open-source LLMs (Llama, Mistral, Qwen, Phi and more) or custom fine-tuned models as OpenAI-compatible APIs with a single command.\u003C\u002Fblockquote>\u003Cp>翻譯一下就是：你可以把後端模型換掉，但前端 client 不一定要跟著重寫。這件事很務實，沒有什麼玄學。只要你的 app、\u003Ca href=\"\u002Ftag\u002Fagent\">agent\u003C\u002Fa> framework、或內部工具已經吃 OpenAI 風格的 chat\u002Fcompletions 介面，那你就不想因為換模型而把整個呼叫層翻掉。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781054302735-s1xb.png\" alt=\"BentoML 把模型服務變成 Python API\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我對 API shape 沒有感情，我只在乎能不能把 backend 換掉而不動半個 app。OpenAI-compatible endpoint 的價值就在這裡：client 端保持穩定，變動集中在 serving layer。你要試 Llama、Mistral、\u003Ca href=\"\u002Ftag\u002Fqwen\">Qwen\u003C\u002Fa>、Phi，或自己的 fine-tuned model，切換成本就不該落在每個呼叫端。\u003C\u002Fp>\u003Cp>這也是 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbentoml\u002FOpenLLM\">OpenLLM\u003C\u002Fa> 讓我比較有感的地方。它把 \u003Ca href=\"\u002Fnews\u002Fopenai-should-not-rush-its-ipo-just-to-win-the-ai-race-zh\">open\u003C\u002Fa>-source model 直接包成 OpenAI-compatible endpoint，對做 agent 或內部工具的人來說很省事。你可以快速比較 latency、成本、品質，真的不行再 rollback。這種能力不是華麗，是實用，而且是那種你用過一次就回不去的實用。\u003C\u002Fp>\u003Cp>實操上，我會把 app 的 contract 固定成一個 OpenAI-like interface，然後把變動留給 serving layer。這樣做有三個好處：第一，前端不用跟著模型換語法；第二，你可以更容易做 eval；第三，當某個模型突然表現不穩時，你能直接換 backend，不用改一堆業務 code。\u003C\u002Fp>\u003Cul>\u003Cli>保留 client contract，不要讓 app 跟著模型抖。\u003C\u002Fli>\u003Cli>把不同模型放在同一個介面下比較。\u003C\u002Fli>\u003Cli>讓切換 backend 變成部署問題，不是產品重寫。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果你現在正在做多模型實驗，這個做法會比你自己定一套新 protocol 靠譜很多。因為你最終要面對的不是「模型有多酷」，而是「整個系統能不能穩定換引擎」。\u003C\u002Fp>\u003Ch2>Examples repo 才是我會先看的文件\u003C\u002Fh2>\u003Cblockquote>A collection of examples for BentoML, from deploying OpenAI-compatible LLM service, to building voice phone calling agents and RAG applications.\u003C\u002Fblockquote>\u003Cp>翻譯一下就是：BentoML 的 examples 不是裝飾品，它們其實在告訴你這個框架預期你會怎麼用。這比長篇文件更有用，因為文件常常在講理想狀態，examples 才會露出真實的結構。\u003C\u002Fp>\u003Cp>我一向比較信 example repo。文件告訴我作者希望我怎麼理解工具，example 則告訴我作者真的怎麼把東西做出來。這裡的 examples 範圍很有意思：OpenAI-compatible LLM service、voice phone calling agents、RAG applications。這代表 BentoML 不是只想服務單一模型，而是把 model serving 放進一個更大的應用層裡看。\u003C\u002Fp>\u003Cp>這點很符合現在很多 AI 產品的樣子。你做的不是一個模型，而是一個 workflow。語音 agent 會碰到 ASR、LLM、TTS；RAG 會碰到 indexing、retrieval、ranking、answer synthesis。BentoML 的 examples 其實在說：這些東西是正常使用情境，不是特例。\u003C\u002Fp>\u003Cp>實操寫法我會這樣做：先找最接近你產品型態的 example，再把它縮到最小可運作版本。你如果要做 voice workflow，就不要從純 chat demo 開始，因為那只會\u003Ca href=\"\u002Fnews\u002Fmagenta-realtime-2-score-inside-daw-zh\">讓你\u003C\u002Fa>後面補更多洞。直接從 voice example 出發，刪掉不需要的部分，比從零開始自己發明架構更不容易走歪。\u003C\u002Fp>\u003Cp>還有一個實際技巧：把 example 當成設計意圖來讀。repo 同時給你 RAG、voice agent、OpenAI-compatible service，代表這些組合在它的世界裡是常見路徑。這不是單純的 sample code，而是框架作者對「哪些場景值得先支持」的表態。\u003C\u002Fp>\u003Ch2>Mojo 和 Modular MAX 在暗示一件事：服務層和執行層要分開\u003C\u002Fh2>\u003Cblockquote>For end-to-end performance and portability across the AI execution stack, see Modular MAX. As Mojo matures, BentoML will leverage Mojo's compiled performance for CPU and GPU kernels to push model inference performance even further.\u003C\u002Fblockquote>\u003Cp>翻譯一下就是：BentoML 不打算把自己關在 Python 的舒適圈裡，它想把 serving layer 跟底下的執行層分開。這個分法我覺得合理，因為真實世界裡，服務層跟熱路徑優化本來就不是同一件事。\u003C\u002Fp>\u003Cp>我對這段的態度有點半信半疑，但不是因為它不合理，而是因為太多 stack 都愛講「之後會更快」。不過 BentoML 至少把邊界講清楚了：serving 和 orchestration 是它的事，\u003Ca href=\"https:\u002F\u002Fwww.modular.com\u002Fmax\">Modular MAX\u003C\u002Fa> 負責更底層的 runtime，Mojo 則是 kernel 和系統層的語言故事。這樣切，比起一個工具想包山包海，順眼很多。\u003C\u002Fp>\u003Cp>對工程師來說，重點不是現在就去學另一個語言，而是你的架構要能容納底下的加速。也就是說，上層的 API 要穩，底下的 runtime 可以換。這才是分層的價值，不然你每次優化都得重寫整個服務，那就不是工程，是搬家。\u003C\u002Fp>\u003Cp>實操上，我會把 service contract 壓窄，讓 runtime 保持可替換。身份驗證、路由、request handling、業務邏輯都放在服務層；真正吃性能的部分，留給底下的 execution layer。這樣未來如果要換 backend、換 kernel、換 GPU path，你才不會整個系統一起炸。\u003C\u002Fp>\u003Cp>如果你想看完整上下文，可以直接從 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbentoml\u002FBentoML\">BentoML repo\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbentoml\u002FOpenLLM\">OpenLLM repo\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbentoml\u002FYatai\">Yatai repo\u003C\u002Fa>，再對照 \u003Ca href=\"https:\u002F\u002Fwww.modular.com\u002Fmax\">Modular MAX\u003C\u002Fa>。這幾個連起來看，整個 stack 的分工就很明白了。\u003C\u002Fp>\u003Ch2>我會怎麼用 BentoML，不把自己搞死\u003C\u002Fh2>\u003Cp>我最想講清楚的一件事是：不要一開始就把 BentoML 的所有功能都開滿。這種事我看太多了，最後通常不是系統更完整，而是複雜度先爆掉。先從單一 service、單一 model backend、單一穩定 API shape 開始，真的需要再加 batching、queue、chain。\u003C\u002Fp>\u003Cp>BentoML 最適合的場景，是你的 app 已經不只是單一模型呼叫。這時候它很有用，因為它幫你把 serving 的邊界收乾淨。如果你的問題只是「我要把一個模型對外提供服務」，它可以；如果你的問題其實是「我想先做一個巨型平台」，那你大概是在提前買麻煩。\u003C\u002Fp>\u003Cp>我自己會分三步走。第一步，先把模型服務路徑跑通。第二步，等指標證明需要，再加 batching 或 async work。第三步，真的有多模型流程時，再把 orchestration 拆出來。這個順序很土，但很有效，因為它逼你先面對真實需求，而不是先做抽象。\u003C\u002Fp>\u003Cp>這也是我喜歡 BentoML 的原因之一：它不是逼你一次吃完整套平台。你可以停在 library 層，也可以往 deployment、platform 走。這種漸進式的路線，比那種一上來就要你接受整套宇宙觀的框架，實在多了。\u003C\u002Fp>\u003Cp>如果你現在就在做 AI 服務，我會直接建議你把問題拆成兩句：第一句是「我的 API 邊界是什麼」，第二句是「哪些步驟真的需要 batching 或 queue」。只要這兩句答得清楚，BentoML 就不會只是另一個名字很多的工具，而會變成一個很務實的 serving 層。\u003C\u002Fp>\u003Ch2>可抄的模板\u003C\u002Fh2>\u003Cpre>\u003Ccode># BentoML 風格的 OpenAI-compatible 服務模板\n\n這份模板的目標很簡單：\n- 用 Python 定義一個穩定的服務邊界\n- 把前處理、推論、後處理放在同一個 service 裡\n- 保留未來加 batching、queue、multi-model chain 的空間\n- 對外維持 OpenAI 風格的 API 形狀\n\n## 1) 先定義你的服務邊界\n- 一個 service = 一個穩定 API contract\n- 不要把所有業務邏輯塞進 model runtime\n- preprocessing \u002F inference \u002F postprocessing 都留在 service\n\n## 2) API 形狀先固定\n- `\u002Fv1\u002Fchat\u002Fcompletions`：給 LLM \u002F agent client 用\n- `\u002Fhealthz`：給部署檢查用\n- `\u002Fmetrics`：給觀察 latency、throughput、queue depth 用\n\n## 3) 讓下面這些東西可替換\n- model runtime\n- model format\n- batch size\n- queue backend\n- CPU \u002F GPU execution target\n\n## 4) service skeleton\n\npython\n# service.py\nimport bentoml\nfrom pydantic import BaseModel\n\nclass ChatRequest(BaseModel):\n    model: str | None = None\n    messages: list[dict]\n    temperature: float = 0.7\n\nclass ChatResponse(BaseModel):\n    id: str\n    object: str\n    content: str\n\nsvc = bentoml.Service(\"my_ai_service\")\n\n@svc.api(input=bentoml.io.JSON(), output=bentoml.io.JSON())\ndef chat(req: dict):\n    # 1. validate\n    data = ChatRequest(**req)\n\n    # 2. preprocess\n    prompt = \"\\n\".join(m.get(\"content\", \"\") for m in data.messages)\n\n    # 3. inference\n    # 這裡換成你的模型呼叫\n    result = f\"Model response to: {prompt}\"\n\n    # 4. postprocess\n    return ChatResponse(\n        id=\"chatcmpl-local\",\n        object=\"chat.completion\",\n        content=result,\n    ).model_dump()\n\n\n## 5) 需要吞吐量再加 batching\npython\n# pseudo-pattern\n@svc.api(input=bentoml.io.JSON(), output=bentoml.io.JSON())\n@bentoml.batch\nasync def batched_chat(reqs: list[dict]):\n    outputs = []\n    for req in reqs:\n        data = ChatRequest(**req)\n        prompt = \"\\n\".join(m.get(\"content\", \"\") for m in data.messages)\n        outputs.append({\n            \"id\": \"chatcmpl-local\",\n            \"object\": \"chat.completion\",\n            \"content\": f\"Model response to: {prompt}\",\n        })\n    return outputs\n\n\n## 6) 任務變長就丟 queue\npython\n# pseudo-pattern\n@svc.task\ndef generate_report(payload: dict):\n    # 長時間推論或多步驟 pipeline\n    return {\"status\": \"done\", \"result\": \"...\"}\n\n\n## 7) 多模型 chain 的基本形狀\npython\n# pseudo-pattern\nsummary = summarize(text)\nanswer = generate_answer(summary)\nranked = rerank(answer, candidates)\n\n\n## 8) 上線前檢查清單\n- API shape 跟 client 對不對\n- 先跑通單一路徑，再加 batching\n- queue 前後都量 latency\n- model selection 外部化\n- worker 擴充前先看 GPU memory headroom\n\n## 9) 最小 client 範例\npython\nimport requests\n\nresp = requests.post(\n    \"http:\u002F\u002Flocalhost:3000\u002Fv1\u002Fchat\u002Fcompletions\",\n    json={\n        \"messages\": [\n            {\"role\": \"user\", \"content\": \"Write a short summary of BentoML.\"}\n        ],\n        \"temperature\": 0.2,\n    },\n    timeout=30,\n)\nprint(resp.json())\n\n\n## 10) 我自己會守的規則\n先做一個 model、一個 endpoint、一個穩定 contract。\n真的有需求，再加 batching、queue、orchestration。\n不要反過來，不然你會先把系統做複雜，才開始找理由。\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>這份模板是我根據 BentoML、OpenLLM、Yatai 和 examples 的公開內容整理出來的，原始脈絡來自 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbentoml\">BentoML GitHub organization\u003C\u002Fa> 與 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbentoml\u002FBentoML\">BentoML repo\u003C\u002Fa>。模板本身是我重寫過的可複製版本，不是原文照抄，但思路是從那套 serving、batching、orchestration、OpenAI-compatible API 的做法拆出來的。\u003C\u002Fp>","我拆 BentoML 的 serving 思路，順手給你一份可直接複製的 OpenAI 相容模型 API 模板。","github.com","https:\u002F\u002Fgithub.com\u002Fbentoml",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781054310299-c1gm.png","tools","zh","58924f21-83f4-405d-8d9a-4af334e9d030",[17,18,19,20,21,22],"BentoML","model serving","OpenAI-compatible API","batching","task queue","RAG",[24,25,26],"BentoML 的核心不是包模型，而是定義服務邊界與 API contract。","它真正有用的是 batching、queue、multi-model chain 這些 serving primitives。","最值得直接抄的是 OpenAI-compatible 服務模板，先穩 contract，再加複雜度。",0,"2026-06-10T01:17:56.193093+00:00","2026-06-10T01:17:56.186+00:00","2280f033-e3ad-4cc4-8f0e-10a6d08600f5",{"tags":32,"relatedLang":43,"relatedPosts":47},[33,35,38,39,41],{"name":17,"slug":34},"bentoml",{"name":36,"slug":37},"Model Serving","model-serving",{"name":20,"slug":20},{"name":21,"slug":40},"task-queue",{"name":19,"slug":42},"openai-compatible-api",{"id":15,"slug":44,"title":45,"language":46},"bentoml-turns-model-serving-into-python-apis-en","BentoML turns model serving into Python APIs","en",[48,54,60,66,72,78],{"id":49,"slug":50,"title":51,"cover_image":52,"image_url":52,"created_at":53,"category":13},"5656a6ab-9e07-41be-9cea-3440fb8846e2","nvidia-lg-ai-collaboration-playbook-zh","Nvidia 和 LG 把 AI 合作變成模板","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781056994999-8eng.png","2026-06-10T02:02:46.590133+00:00",{"id":55,"slug":56,"title":57,"cover_image":58,"image_url":58,"created_at":59,"category":13},"e48be66d-d7de-419e-b5fd-805f0784ef15","ollama-best-free-ai-path-2026-zh","Ollama 是 2026 年真正適合工作的免費 AI 路徑","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781056077878-11pc.png","2026-06-10T01:47:24.632993+00:00",{"id":61,"slug":62,"title":63,"cover_image":64,"image_url":64,"created_at":65,"category":13},"9b53427c-8c2a-4960-a773-f14d4528caae","awesome-production-ml-turns-chaos-into-stack-zh","這份 MLOps 清單把混亂拆成堆疊","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781055220958-dmar.png","2026-06-10T01:33:14.850634+00:00",{"id":67,"slug":68,"title":69,"cover_image":70,"image_url":70,"created_at":71,"category":13},"63d8b456-ad6b-475e-86e9-d4677ca226aa","magenta-realtime-2-score-inside-daw-zh","Magenta RealTime 2 讓你在 DAW 裡即時改曲","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781046204038-8tox.png","2026-06-09T23:02:55.9651+00:00",{"id":73,"slug":74,"title":75,"cover_image":76,"image_url":76,"created_at":77,"category":13},"f60261ff-a42e-4cfb-9f90-97785e633289","open-source-ai-tools-beat-claude-paid-tiers-zh","開源 AI 工具在價值上已經贏過 Claude 付費方案","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781045266035-on7t.png","2026-06-09T22:47:20.195939+00:00",{"id":79,"slug":80,"title":81,"cover_image":82,"image_url":82,"created_at":83,"category":13},"8520cd4f-2531-4808-a95d-26f590239d7a","500-ai-agent-projects-show-where-agents-work-now-zh","500 個 AI agent 專案，現在能做什麼","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781033591132-c0nh.png","2026-06-09T19:32:37.03924+00:00",[85,90,95,100,105,110,115,120,125,130],{"id":86,"slug":87,"title":88,"created_at":89},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":91,"slug":92,"title":93,"created_at":94},"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":96,"slug":97,"title":98,"created_at":99},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":101,"slug":102,"title":103,"created_at":104},"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":106,"slug":107,"title":108,"created_at":109},"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":111,"slug":112,"title":113,"created_at":114},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":116,"slug":117,"title":118,"created_at":119},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":121,"slug":122,"title":123,"created_at":124},"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":126,"slug":127,"title":128,"created_at":129},"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":131,"slug":132,"title":133,"created_at":134},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]