[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-shieldstral-turns-moderation-policy-into-one-model-zh":3,"article-related-shieldstral-turns-moderation-policy-into-one-model-zh":29,"series-model-release-617654a4-240e-4506-8af6-3b6fa8821e3d":72},{"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":11},"617654a4-240e-4506-8af6-3b6fa8821e3d","shieldstral-turns-moderation-policy-into-one-model-zh","Shieldstral 把審核政策收成一個模型","\u003Cp data-speakable=\"summary\">以前內容\u003Ca href=\"\u002Fnews\u002Freddit-ai-moderation-push-right-move-zh\">審核\u003C\u002Fa>靠一堆規則拼湊，現在 Shieldstral 把政策收進一個可調的模型。\u003C\u002Fp>\u003Cp>我做 moderation 流程有一陣子了，最煩的就是大家嘴上都說「先簡化」，結果最後長出來的是 classifier、policy layer、例外規則、人工覆核表，還有一堆只有某個人看得懂的 if-statement。模型明明在跑，產品也說有在管，實際上每次改規則都像在拆炸彈。你以為自己在維護一個系統，結果是在維護一坨互相打架的定義。\u003C\u002Fp>\u003Cp>這次讓我停下來看的，是 Dawn Liphardt 的文章 \u003Ca href=\"https:\u002F\u002Fwww.dawnliphardt.com\u002Fmistral-ai-overhauls-content-moderation-substantive-and-stylistic-changes\u002F\">Mistral AI Overhauls Content Moderation: Substantive and Stylistic Changes\u003C\u002Fa>，裡面拆了 Mistral 的 Shieldstral 怎麼做。官方相關頁面我也一起看了：\u003Ca href=\"https:\u002F\u002Fmistral.ai\u002F\">Mistral AI\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fhuggingface.co\u002Fmistralai\">Mistral on Hugging Face\u003C\u002Fa>。我最在意的不是它多會講故事，而是它把 moderation 這件事改寫成訓練問題、資料轉換問題、以及可版本化的政策問題。\u003C\u002Fp>\u003Ch2>把分類表丟掉，直接問政策問題\u003C\u002Fh2>\u003Cblockquote>“Mistral AI reduced moderation tasks to closed-ended questions expressed in natural language.”\u003C\u002Fblockquote>\u003Cp>翻譯一下就是，它不先逼模型背一棵超大分類樹，而是直接問一句政策問題：這段內容有沒有在鼓吹對某族群的暴力？有沒有在教自殘？有沒有在煽動仇恨？這種寫法很土，但土得很對。因為 moderation 的核心從來不是「你把它分到哪一類」，而是「這件事過不過線」。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786975412576-sy8q.png\" alt=\"Shieldstral 把審核政策收成一個模型\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我以前最受不了的就是 taxonomy 先行。團隊開會開半天都在吵「這算 harassment 還是 abuse」，結果模型根本還沒學會辨識政策邊界。你把 policy 藏在 label 裡，後面就會\u003Ca href=\"\u002Fnews\u002Fmodrinth-ai-rules-project-disclosures-zh\">變成\u003C\u002Fa> label 的政治學。Shieldstral 這一招比較老實：把規則寫成問題，讓模型回答問題。政策變了，就改問題；這比改一整套分類名詞乾脆多了。\u003C\u002Fp>\u003Cp>實操上，我會直接把 moderation prompt 寫成一個 closed-ended question，而且每個 surface 都分開。公共社群、青少年產品、企業內部工具，根本\u003Ca href=\"\u002Fnews\u002Fclaude-for-teachers-useful-but-schools-resist-dependence-zh\">不該\u003C\u002Fa>共用同一個問法。你可以共用底層模型，但 policy question 要分版本、分場景、分嚴格度，不然你最後只是在拿同一把尺量不同東西。\u003C\u002Fp>\u003Cul>\u003Cli>每個政策決策只留一個問題。\u003C\u002Fli>\u003Cli>問題文字保留給人看，不要只存在 label id 裡。\u003C\u002Fli>\u003Cli>問題一改就版本化，別偷改 production。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>我自己現在看 moderation 設計，第一眼先看的是「問題有沒有寫清楚」。如果問題都寫不乾淨，後面 accuracy 再高也只是把混亂包裝得比較漂亮。\u003C\u002Fp>\u003Ch2>資料不是天生相容，先做轉接器再說\u003C\u002Fh2>\u003Cblockquote>“Mistral AI performed a template-based conversion, developing a dataset-specific processing pipeline for each dataset.”\u003C\u002Fblockquote>\u003Cp>白話就是：不同資料集本來就不是同一種語言。這個標的是 broad category，那個標的是細粒度 severity，另一個還混了 annotator 文化偏差。你如果假裝它們能直接混在一起訓練，模型學到的通常不是政策，而是混亂。Mistral 的做法是先做每個資料集自己的處理管線，再轉成同一種 prompt 模板。\u003C\u002Fp>\u003Cp>這點我很買單，因為 moderation dataset 本來就很髒。有人標得很粗，有人標得很細，有人標的是意圖，有人標的是結果。你不先做轉接器，直接把所有資料丟進同一個訓練 loop，最後模型會把 taxonomy 差異當成訊號，然後在 production 裡亂飄。這不是模型不行，是你沒先幫資料翻譯。\u003C\u002Fp>\u003Cp>我自己的做法會更硬一點：每個來源資料集都保留原始 label、原始 metadata、來源名稱，另外再做一層 shared schema。訓練用 shared schema，稽核看原始資料。這樣你未來要追 false positive，才知道是哪個來源資料在拖累哪個 policy question。\u003C\u002Fp>\u003Cul>\u003Cli>每個資料集先做 adapter，再進訓練。\u003C\u002Fli>\u003Cli>原始 taxonomy 不要丟，日後稽核會救你。\u003C\u002Fli>\u003Cli>所有來源最後都收斂到同一種 prompt 格式。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>這種流程看起來很麻煩，但 moderation 本來就麻煩。你想省掉轉接器，通常只是把麻煩延後到上線後再爆。\u003C\u002Fp>\u003Ch2>對比樣本才是讓模型長腦袋的地方\u003C\u002Fh2>\u003Cblockquote>“The other centerpiece in training Shieldstral was the use of contrastive training pairs.”\u003C\u002Fblockquote>\u003Cp>翻譯一下就是，Shieldstral 不只看正例，還很重視近似但不該命中的反例。比如同樣是暴力語句，目標族群不同就該分開；同樣是敏感字詞，教育脈絡和煽動脈絡也不能混。這種 contrastive pair 的價值在於，它逼模型學「差在哪裡」，不是只學「長得像不像壞東西」。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786975412482-h2g1.png\" alt=\"Shieldstral 把審核政策收成一個模型\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我以前碰過一個分類器，超愛誤判。後來回頭看資料，才發現我們給它的正例太多，反例太爛。它看到一些教育內容、新聞內容、引用內容，就以為自己抓到壞東西。其實不是模型笨，是資料訓練它只會看表面。補上近似反例後，它才開始理解 policy 邊界，而不是靠語氣猜拳。\u003C\u002Fp>\u003Cp>如果你要抄這招，我會建議每個正例至少配一個結構相近、政策不同的反例。可以換目標族群、換意圖、換場景，或是同樣詞彙但安全脈絡不同。不要拿一堆無關垃圾當反例，那種資料只會讓模型覺得世界很簡單，然後在真實流量裡出事。\u003C\u002Fp>\u003Cul>\u003Cli>反例要近，不要亂。\u003C\u002Fli>\u003Cli>測試時要看 category confusion，不要只看總 accuracy。\u003C\u002Fli>\u003Cli>把 false positive 拆到 policy family 層級看。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>這一段我覺得最值得偷。因為它不是在追求更會背答案，而是在逼模型學會政策邊界。這才是 moderation 真正值錢的地方。\u003C\u002Fp>\u003Ch2>影像審核缺資料，就拿旁系資料來補\u003C\u002Fh2>\u003Cblockquote>“In the face of the scarcity of image moderation datasets, Mistral AI added classification and object-detection datasets.”\u003C\u002Fblockquote>\u003Cp>意思很直接：影像 moderation 資料太少，不能傻等。Mistral 先拿分類和 object detection 這類旁系資料來補，再透過語言模型把它們包成 moderation 問題。這不是偷吃步，這是現實。影像審核本來就很難收集到足夠多、足夠細、又足夠貼近政策的真實資料。\u003C\u002Fp>\u003Cp>我也做過類似的事。當某個政策邊界的真實樣本不夠時，我會先用接近的 vision dataset 當腳手架，讓模型先學會視覺 grounding，再把它轉成政策語句。重點不是把旁系資料假裝成原生 moderation 資料，而是先把視覺能力補起來，然後再用政策問句把它拉回來。\u003C\u002Fp>\u003Cp>實操上，我會把旁系資料當 raw material，而不是 final truth。你可以拿 object detection 教模型認出刀、槍、藥品、裸露、血跡，但「認得出」不等於「該不該擋」。這兩件事一定要分開測，不然你的 moderation stack 會變成一個看到東西就先嚇一跳的系統。\u003C\u002Fp>\u003Cul>\u003Cli>旁系 vision dataset 只拿來補視覺 grounding。\u003C\u002Fli>\u003Cli>政策判斷一定要包回 moderation prompt。\u003C\u002Fli>\u003Cli>另外留一組真實 moderation case 做 evaluation。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>這裡最容易犯的錯，就是把 object detection 的準確率當成 moderation 的準確率。那兩個不是同一件事，混在一起看只會讓你誤判模型能力。\u003C\u002Fp>\u003Ch2>LoRA 才是能長期維護的做法\u003C\u002Fh2>\u003Cblockquote>“The training of Shieldstral did not rely on supervised fine-tuning, but on the LoRA method.”\u003C\u002Fblockquote>\u003Cp>白話講，就是 Mistral 沒有把整個基座模型大改特改，而是用 LoRA 去做適配。這很合理，因為 moderation 政策變得超快。今天多一條規則，明天換一個 surface，後天法務又要加限制。你如果每次都 full fine-tune，維護成本會高到讓人想翻桌。\u003C\u002Fp>\u003Cp>我很喜歡 LoRA 用在 moderation，原因很簡單：政策變化是常態，沒有人會永遠滿意同一套規則。用 LoRA 你可以保留 base model 穩定，另外掛不同 adapter 去對應不同資料集、不同政策、不同場景。Mistral 甚至做了兩個 checkpoint，一個只吃公開 moderation 資料，另一個再加 synthetic 與影像資料，然後再跟 Ministral-3B-Instruct 合併來強化 instruction following。這個思路很務實，因為 moderation 模型如果連指令都聽不懂，就只是個分數機器。\u003C\u002Fp>\u003Cp>我自己的建議是：先做參數效率高的適配，別一開始就想 full fine-tune。保留一個乾淨的 baseline checkpoint，再保留一個包含 synthetic 或 multimodal 擴充的版本。合併之前先測 policy accuracy、false positive rate、instruction following，別只看單一分數。很多團隊愛在 demo 裡看起來很猛，結果一進 production 就開始亂講話。\u003C\u002Fp>\u003Cul>\u003Cli>政策常變，就用 LoRA。\u003C\u002Fli>\u003Cli>保留乾淨 checkpoint 當基準。\u003C\u002Fli>\u003Cli>合併模型前先驗證指令跟政策兩邊都正常。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>這種做法的好處很現實：你不用每次改政策都重來一次。對 moderation 來說，能維護比看起來很強更重要。\u003C\u002Fp>\u003Ch2>可調政策才是重點，分數只是表面\u003C\u002Fh2>\u003Cblockquote>“You can adjust the moderation policy during inference without retraining.”\u003C\u002Fblockquote>\u003Cp>這句我看了很有感。因為它代表政策開始變成 runtime input，而不是寫死在權重裡。也就是說，同一個模型可以在不同 surface 上回答不同問題。公開論壇一套，青少年產品一套，企業內部工具又一套。核心模型不動，動的是政策問句、嚴格度、以及場景設定。\u003C\u002Fp>\u003Cp>這才像真的在做 moderation。因為 moderation 從來不是一個抽象的「好壞判斷」，而是上下文判斷。你如果把情境抹平，只會得到一個看起來一致、實際上很愛誤殺的系統。Runtime policy 的價值在於，你不用把所有規則都塞進權重裡，但前提是你有完整記錄 policy version、rigor、surface、以及每次推論的上下文。\u003C\u002Fp>\u003Cp>我會直接把 model capability 和 policy config 分開。模型版本是一回事，政策版本是另一回事。你要能回答的不是「這個模型為什麼擋了」，而是「它在什麼政策版本下擋了，擋的是哪個問句」。如果你說不清楚，那你就不是在做 adaptive moderation，你是在做黑箱加註解。\u003C\u002Fp>\u003Cp>實操寫法很簡單：每次推論都把 surface、rigor、policy_question、content_type、policy_version 一起記錄。評估時不要只看整體準確率，要按政策版本、場景、資料來源切。這樣你才知道問題是在模型、資料，還是政策本身。\u003C\u002Fp>\u003Ch2>可抄的模板\u003C\u002Fh2>\u003Cpre>\u003Ccode># Shieldstral-style moderation template for your stack\n\n## 1) Runtime policy schema\nsurface: public_chat | teen_chat | workplace | marketplace | community\nrigor: low | medium | high\npolicy_version: v1.0.0\npolicy_question: \"Does this content promote violence against a protected group?\"\ncontent_type: text | image | text+image\n\n## 2) Prompt format\nYou are a moderation model.\nAnswer the policy question with one of: yes, no, uncertain.\n\nSurface: {surface}\nRigor: {rigor}\nPolicy version: {policy_version}\nQuestion: {policy_question}\nContent type: {content_type}\nContent: {content}\n\n## 3) Dataset adapter rules\n- Keep original_dataset_name\n- Keep original_label\n- Keep original_taxonomy\n- Map every source label to one policy_question\n- Convert every sample into the same prompt shape\n- Preserve source metadata for audits\n\n## 4) Contrastive pair recipe\nFor each positive sample, add one near-miss negative by shifting one axis:\n- target group\n- intent\n- severity\n- safe vs unsafe context\n- educational vs promotional framing\n\n## 5) LoRA plan\nAdapter A: public moderation data only\nAdapter B: public moderation + synthetic + image data\nMerge only after validating:\n- policy accuracy\n- false-positive rate\n- instruction following\n- context-specific thresholds\n\n## 6) Evaluation checklist\n- Did the model answer the exact question asked?\n- Does it separate similar categories correctly?\n- Does it behave consistently across surfaces?\n- Can policy change at inference without retraining?\n- Are all decisions logged with policy version and rigor?\n\n## 7) Operational rule\nIf the policy changes, update the question first.\nIf the dataset changes, update the adapter.\nIf the surface changes, update the rigor.\nIf false positives spike, add contrastive negatives before retraining.\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>這份模板是我把 Shieldstral 的思路翻成能直接塞進你系統的版本。原始觀點來自 Dawn Liphardt 的文章與 Mistral 的公開頁面，模板結構跟操作建議是我自己的整理與延伸。你如果現在就在做 moderation，我會先從 prompt schema 和 dataset adapter 兩段開始抄，別急著先換模型。\u003C\u002Fp>\u003Cp>來源致謝：原始拆解看 \u003Ca href=\"https:\u002F\u002Fwww.dawnliphardt.com\u002Fmistral-ai-overhauls-content-moderation-substantive-and-stylistic-changes\u002F\">Dawn Liphardt 的文章\u003C\u002Fa>，以及 \u003Ca href=\"https:\u002F\u002Fmistral.ai\u002F\">Mistral AI\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fhuggingface.co\u002Fmistralai\">Hugging Face 上的 Mistral 頁面\u003C\u002Fa>。我這篇是把它的 moderation 方法論翻成台灣開發者比較能直接落地的版本。","我拆 Shieldstral 怎麼把內容審核從一堆規則收斂成可調的單一模型，順手給你可直接套用的 prompt、資料轉換與 LoRA 模板。","www.dawnliphardt.com","https:\u002F\u002Fwww.dawnliphardt.com\u002Fmistral-ai-overhauls-content-moderation-substantive-and-stylistic-changes\u002F",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786975412576-sy8q.png","model-release","zh","1ebdee84-7b23-4d3a-afe1-c9ff20202d24",[17,18,19,20,21],"moderation","LoRA","contrastive learning","policy prompt","dataset adapter",[23,24,25],"把 moderation 規則寫成可版本化的政策問題，別埋在 label 裡。","用近似反例做 contrastive pairs，才能壓 false positive。","LoRA + runtime policy 讓內容審核更容易維護與調整。",0,"2026-08-17T14:02:54.280658+00:00","2026-08-17T14:02:54.268+00:00",{"tags":30,"relatedLang":31,"relatedPosts":35},[],{"id":15,"slug":32,"title":33,"language":34},"shieldstral-turns-moderation-policy-into-one-model-en","Shieldstral turns moderation policy into one model","en",[36,42,48,54,60,66],{"id":37,"slug":38,"title":39,"cover_image":40,"image_url":40,"created_at":41,"category":13},"f01d383b-1d9a-496b-8e2b-9bd4dd6aa079","claude-opus-5-benchmarks-developers-zh","Claude Opus 5 開發者基準與路由清單","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786930368498-wvik.png","2026-08-17T01:32:26.16127+00:00",{"id":43,"slug":44,"title":45,"cover_image":46,"image_url":46,"created_at":47,"category":13},"51bed36f-bfd7-45a0-9659-4e6901f981a5","claude-text-marking-all-products-cloud-access-zh","Claude文本標記擴大到全產品與雲端接入","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786906988205-mfro.png","2026-08-16T19:02:39.407337+00:00",{"id":49,"slug":50,"title":51,"cover_image":52,"image_url":52,"created_at":53,"category":13},"8c1f4524-a785-44bf-9940-00d3dee2d93b","anthropic-ipo-talks-skip-valuation-zh","Anthropic 先談上市，不先談估值","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786708972051-yjph.png","2026-08-14T12:02:28.025247+00:00",{"id":55,"slug":56,"title":57,"cover_image":58,"image_url":58,"created_at":59,"category":13},"93e19c1d-1ffc-4f12-a336-f39afb16e8ac","gemini-3-7-flash-launch-coding-gains-zh","Gemini 3.7 Flash 提速上線，寫程式更強","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786667574559-xeyj.png","2026-08-14T00:32:28.7611+00:00",{"id":61,"slug":62,"title":63,"cover_image":64,"image_url":64,"created_at":65,"category":13},"d6e0d4ac-1b63-4296-9d7a-8a6552b5f21f","claude-kimi-multimodal-benchmark-2026-08-zh","Claude 文本領先，Kimi 編碼更強","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786473205481-pcsz.png","2026-08-11T18:32:47.271125+00:00",{"id":67,"slug":68,"title":69,"cover_image":70,"image_url":70,"created_at":71,"category":13},"1299c9a0-be8c-4b31-a0dc-0c9164cf1099","qwen38-max-alibaba-pricing-and-performance-zh","Qwen3.8-Max 把價格壓下來了","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786149189506-m2ez.png","2026-08-08T00:32:52.987339+00:00",[73,78,83,88,93,98,103,108,113,118],{"id":74,"slug":75,"title":76,"created_at":77},"58b64033-7eb6-49b9-9aab-01cf8ae1b2f2","nvidia-rubin-six-chips-one-ai-supercomputer-zh","NVIDIA Rubin 把六顆晶片塞進 AI 機櫃","2026-03-26T07:18:45.861277+00:00",{"id":79,"slug":80,"title":81,"created_at":82},"0dcc2c61-c2a6-480d-adb8-dd225fc68914","march-2026-ai-model-news-what-mattered-zh","2026 年 3 月 AI 模型新聞重點","2026-03-26T07:32:08.386348+00:00",{"id":84,"slug":85,"title":86,"created_at":87},"214ab08b-5ce5-4b5c-8b72-47619d8675dd","why-small-models-are-winning-on-device-ai-zh","小模型為何吃下裝置端 AI","2026-03-26T07:36:30.488966+00:00",{"id":89,"slug":90,"title":91,"created_at":92},"785624b2-0355-4b82-adc3-de5e45eecd88","midjourney-v8-faster-images-higher-costs-zh","Midjourney V8 變快了，也變貴了","2026-03-26T07:52:03.562971+00:00",{"id":94,"slug":95,"title":96,"created_at":97},"9e1044b4-946d-47fe-9e2a-c2ee032e1164","xiaomi-mimo-v2-pro-1t-moe-agents-zh","小米 MiMo-V2-Pro 登場：1T MoE 模型","2026-03-28T03:06:19.002353+00:00",{"id":99,"slug":100,"title":101,"created_at":102},"c4b6186f-bd84-4598-997e-c6e31d543c0d","cursor-composer-2-agentic-coding-model-zh","Cursor Composer 2 走向代理式寫碼","2026-03-28T03:13:06.422716+00:00",{"id":104,"slug":105,"title":106,"created_at":107},"e112e76f-ec3b-408f-810e-e93ae21a888a","apple-siri-gemini-distilled-models-zh","Apple Siri 牽手 Gemini 的真相","2026-03-29T04:52:57.886544+00:00",{"id":109,"slug":110,"title":111,"created_at":112},"c679b51f-194a-463b-87fc-7695256ff752","mimo-v2-pro-vs-omni-vs-flash-2026-zh","MiMo V2 Pro、Omni、Flash 怎麼選","2026-04-02T01:18:43.576128+00:00",{"id":114,"slug":115,"title":116,"created_at":117},"3b988fd7-6749-4f01-ba25-c0ad7486dc31","z-ai-glm-5v-turbo-design2code-claude-zh","GLM-5V-Turbo 在 Design2Code 贏了…","2026-04-02T04:03:36.31741+00:00",{"id":119,"slug":120,"title":121,"created_at":122},"975a7aef-030e-41a6-9401-1c6a342be68e","april-2026-ai-model-releases-zh","2026年4月 AI 模型更新追蹤","2026-04-02T08:45:33.308563+00:00"]