[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-mage-vl-compressed-video-token-pipeline-zh":3,"article-related-mage-vl-compressed-video-token-pipeline-zh":29,"series-research-32185438-867e-45f5-a048-b23ed209d20b":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},"32185438-867e-45f5-a048-b23ed209d20b","mage-vl-compressed-video-token-pipeline-zh","Mage-VL把视频Token壓到25%","\u003Cp data-speakable=\"summary\">以前我把視頻當圖片序列硬抽帧，現在我先看壓縮碼和事件，再決定要不要喂給模型。\u003C\u002Fp>\u003Cp>我盯視頻模型這件事已經有一陣子了。最煩的不是模型不夠聰明，而是輸入太浪費：一段視頻先抽帧、再切塊、再喂進視覺編碼器，最後大半 \u003Ca href=\"\u002Ftag\u002Ftoken\">Token\u003C\u002Fa> 都在重複描述同一件事。你明明只是想讓模型看懂一個動作，結果管線像在給每一幀發薪水。更別提均勻抽帧這件事本身就很彆扭，\u003Ca href=\"\u002Fnews\u002Fanthropic-latest-scmp-coverage-5-themes-zh\">關鍵\u003C\u002Fa>瞬間常常漏掉，沒信息的鏡頭卻塞了一堆。最後你得到的不是更好的理解，而是更貴的理解。\u003C\u002Fp>\u003Cp>這次把我拉回來的，是微軟在知乎上分享的 \u003Ca href=\"https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F2067236367365575405\">Mage-VL\u003C\u002Fa>。我第一次看到這篇時，注意力其實不只在「少 75% Token」這句話，而是它怎麼把 caption prompt 當成一個可以反覆打磨的東西。原文把問題講得很工程：先讓評估 \u003Ca href=\"\u002Ftag\u002Fagent\">agent\u003C\u002Fa> 找問題，再讓 prompt modifier 做最小修改，幾輪之後把 dense caption pipeline 調穩。這種做法很像我自己踩過的坑，模型不穩時，很多時候不是模型本體壞了，是前處理和\u003Ca href=\"\u002Fnews\u002Ffine-tune-small-llm-legal-labeling-zh\">標註\u003C\u002Fa>鏈路太隨便。\u003C\u002Fp>\u003Ch2>別再把視頻當成一串平均值了\u003C\u002Fh2>\u003Cblockquote>告別均勻抽帧，直接讀壓縮碼，Token 少 75%。\u003C\u002Fblockquote>\u003Cp>這句話是整篇最直接的地方。所謂「直接讀壓縮碼」，意思不是先把視頻完整解碼成一幀幀圖片，再做視覺處理，而是盡量從壓縮視頻流裡拿信息。也就是說，模型不必先把所有像素都復原出來，再自己想辦法刪掉沒用內容。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786170811727-2ctz.png\" alt=\"Mage-VL把视频Token壓到25%\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我以前做多模態管線時，最常見的錯誤就是默認「視頻=圖片序列」。這在原型階段很方便，但一旦上量，成本就開始發瘋。更糟的是，均勻抽帧有一種表面公平感：每隔 N 帧取一張，看起來很規範，實際上對動作類、事件類視頻非常不友好。關鍵動作可能只持續 0.5 秒，你偏偏沒抽到；長鏡頭裡無聊的靜態畫面卻被抽了很多張。\u003C\u002Fp>\u003Cp>我會把這件事理解成兩層收益。第一層是速度和成本，少 Token 直接減少計算。第二層更重要，輸入更貼近視頻原始結構，模型拿到的是更有信息密度的表徵，而不是被抽帧策略稀釋過的近似樣本。\u003C\u002Fp>\u003Cp>如果你要落地這個思路，我會先問三個問題：視頻裡真正有信息的片段是不是集中在少數時刻？你的任務是動作識別、事件理解，還是靜態檢索？你是不是只是因為「大家都這麼做」才抽帧？如果答案偏向前兩項，那就該認真考慮壓縮域輸入、關鍵幀選擇，或者至少用內容感知的採樣替代純均勻採樣。\u003C\u002Fp>\u003Cul>\u003Cli>先統計你現在視頻管線的 Token 分布，看看是不是大頭都浪費在重複畫面上。\u003C\u002Fli>\u003Cli>把均勻抽帧改成事件驅動採樣，哪怕只是先做一個簡單的鏡頭切分。\u003C\u002Fli>\u003Cli>如果你的模型棧允許，盡量保留壓縮視頻中的結構信息，而不是一上來就全解碼。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>省 Token 不等於少看，關鍵是看得更像人\u003C\u002Fh2>\u003Cp>Mage-VL 這類工作最容易被誤讀成「只是為了省算力」。我不這麼看。省算力只是表面結果，真正值錢的是它逼你\u003Ca href=\"\u002Fnews\u002Fowasp-2026-llm-top-10-risk-priorities-zh\">重新\u003C\u002Fa>思考：模型到底需要看到什麼，才算真的理解視頻。\u003C\u002Fp>\u003Cp>人看視頻時也不是逐像素處理。我們會盯動作變化、物體關係、鏡頭切換、聲音線索、字幕線索。模型如果還在死啃均勻抽帧，本質上就是在用最笨的方式模擬觀看。直接讀壓縮碼的價值在於，它更接近視頻編碼本身攜帶的時序和運動信息，而不是把視頻先拍扁成圖片再補救。\u003C\u002Fp>\u003Cp>我在做檢索系統時也遇到過類似問題。早期我們瘋狂加特徵，最後發現最有效的不是再堆一個特徵頭，而是把無效輸入減掉。視頻任務更明顯，因為原始數據就更貴。你每多抽一帧，都是在給後面的注意力層加負擔。\u003C\u002Fp>\u003Cp>如果你要把這套思路搬進自己的項目，我建議別一上來就追求「完全不解碼」。先做一個中間版本：保留壓縮流中的時間結構，減少無信息帧的展開，再觀察任務指標和延遲的變化。很多時候，工程上最實用的不是最激進的方案，而是能穩定上線的那一檔。\u003C\u002Fp>\u003Cp>還有一個現實問題：視頻任務的評估經常只看最終準確率，忽略輸入成本。這個習慣很糟。你應該把 Token 數、延遲、吞吐一起看，不然很容易把一個昂貴的模型誤判成「更強」。\u003C\u002Fp>\u003Ch2>caption 不是標註完就完了，它本身就是產品\u003C\u002Fh2>\u003Cp>我最想拆的，不是視頻編碼，而是他們對 caption 的處理方式。很多團隊做 dense caption 時，默認流程是：寫個 prompt，批量跑一遍，覺得差不多就收工。問題是，這種 prompt 往往是一錘子買賣，後面出了問題只能靠人工補洞，越補越亂。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786170806385-zy3d.png\" alt=\"Mage-VL把视频Token壓到25%\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>這篇分享裡提到的做法更像我願意接受的工程流：把 caption prompt 當成可迭代對象。先用評估 agent 去找問題，再讓 prompt modifier 做最小修改，多輪驗證後再定版。這流程聽起來很朴素，但我覺得它比「多加幾條規則」可靠得多。\u003C\u002Fp>\u003Cp>也就是說，他們沒有把 prompt 當成靈感產物，而是當成配置文件。配置文件就該能測、能改、能回滾。你今天覺得某個描述方式不錯，明天數據一變它就可能失效。把 prompt 交給評估閉環，才不會一直靠拍腦袋。\u003C\u002Fp>\u003Cp>我以前也很討厭這種「先寫再說」的 caption 方式。尤其是 dense caption，文本一長，問題就開始變複雜：有的句子太泛，有的句子重複，有的句子把背景寫得比主體還多。人工看幾條樣本會覺得沒問題，一跑到全量就露餡。評估 agent 的價值就在這裡，它可以系統地把壞例子撈出來，而不是等你在 demo 現場翻車。\u003C\u002Fp>\u003Cp>怎麼應用？我會把 caption 流程拆成三步：生成、評估、最小修訂。生成階段先別追求完美；評估階段專門找空泛、重複、漏檢、錯位；修訂階段只改最小必要部分，不要每輪都重寫 prompt。這樣你才能知道到底是哪一條改動帶來了改善。\u003C\u002Fp>\u003Cul>\u003Cli>把 caption prompt 版本化，像代碼一樣管理。\u003C\u002Fli>\u003Cli>單獨保存失敗樣本，別讓它們淹沒在平均分裡。\u003C\u002Fli>\u003Cli>每次修改只動一個變數，不然你永遠不知道是誰起了作用。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>評估 agent 的角色，不是判官，是挑刺的人\u003C\u002Fh2>\u003Cp>我很喜歡「評估 agent」這個位置安排。它不是來宣布誰對誰錯的，而是來找毛病的。這個區別很重要。很多自動化評估系統一上來就想給最終分數，結果分數看著漂亮，問題一個都沒抓住。\u003C\u002Fp>\u003Cp>在 caption 這種任務裡，真正有用的評估往往不是一句總分，而是具體指出：哪裡寫得太空、哪裡漏了動作、哪裡把物體關係說反了。只有這樣，prompt modifier 才知道該怎麼改。否則你得到的只是「效果一般」，這句話對工程沒有任何幫助。\u003C\u002Fp>\u003Cp>我自己做過類似的閉環，最開始也犯過錯：讓評估模塊輸出太多維度，最後沒人知道先改什麼。後來我學會把評估結果壓成幾類高頻問題，比如「主體缺失」「動作不明確」「背景噪聲過多」「時序錯亂」。這就足夠了。你不需要十幾個評分維度，你需要的是能驅動下一輪修改的診斷信息。\u003C\u002Fp>\u003Cp>如果你也要搭這個東西，我建議評估 agent 先回答三個問題：這條 caption 是否覆蓋了核心事件？是否把次要信息寫得過頭？是否存在明顯幻覺或錯配？這三項已經能篩掉大部分垃圾輸出。等系統穩定了，再考慮更細的指標。\u003C\u002Fp>\u003Cp>還有個工程上的小脾氣：別讓評估 agent 變成另一個黑箱。它的輸出最好是可讀的、可追蹤的、可對比的。否則你只是把人工挑刺換成機器挑刺，麻煩一點都沒少。\u003C\u002Fp>\u003Ch2>最小修改，比大改更像真正的迭代\u003C\u002Fh2>\u003Cp>「prompt modifier 做最小修改」這點，我覺得特別對。很多人一看到問題就想推倒重來，結果每輪都改太多，最後連自己都不知道哪句 prompt 真的有效。最小修改的好處是可解釋，壞處是慢一點，但我寧願慢一點，也不想在錯誤方向上狂奔。\u003C\u002Fp>\u003Cp>這句話翻成工程語言就是：你要把 prompt 當成實驗對象，而不是創作對象。實驗對象的修改原則是盡量少動，保證因果關係清楚。這樣你才能積累出一套穩定的經驗，而不是一堆互相打架的「我感覺應該這樣寫」。\u003C\u002Fp>\u003Cp>我以前做提示詞調優時，最常見的失敗模式就是「越改越長」。一開始只想補一個約束，後來變成一大段說明書。結果模型確實更聽話了，但也更僵硬了。最小修改的思路能避免這個問題：只補缺口，不重寫邏輯。\u003C\u002Fp>\u003Cp>實際操作上，我會把 prompt modifier 的職責限制得很窄：只允許改動一個句子、一個約束、一個順序，或者一個示例。然後每輪都保留 diff。這樣你能很快看出哪些改動是有效的，哪些只是心理安慰。\u003C\u002Fp>\u003Cp>如果你團隊裡有人喜歡「一次性把 prompt 寫到完美」，我建議你直接拿失敗樣本給他看。讓他看看大改之後指標為什麼飄，通常比講道理有效得多。工程不是作文比賽，改得漂亮不等於改得對。\u003C\u002Fp>\u003Ch2>我會怎麼把這套思路搬進自己的項目\u003C\u002Fh2>\u003Cp>如果是我來復刻 Mage-VL 這類思路，我不會先急著追論文裡的全部細節。我會先搭一個小而穩的版本：輸入側減少無效 Token，caption 側建立評估閉環，修改側堅持最小變更。三件事同時做，系統才不會只在演示裡好看。\u003C\u002Fp>\u003Cp>第一步是看輸入。你要知道自己到底在為哪些帧付費。第二步是看 caption。你要知道文本裡哪些信息是穩定有用的，哪些只是噪聲。第三步是看迭代。你要知道每一次修改到底改善了什麼。只要這三件事跑通，後面再談更複雜的壓縮策略和更細的對齊方式，才不會空中樓閣。\u003C\u002Fp>\u003Cp>我特別建議把這套流程做成可復用模板，而不是一次性腳本。因為只要你開始接新數據集、新任務、新 caption 風格，臨時拼的流程就會開始掉鏈子。模板化之後，團隊裡不同人接手也不會完全失控。\u003C\u002Fp>\u003Cp>最後說句實話：很多多模態項目失敗，不是模型不行，而是輸入、標註、評估三件事沒有連起來。Mage-VL 這篇分享最有價值的地方，不只是「少 75% Token」，而是它提醒我，真正能省下來的，往往是那些原本就不該喂給模型的東西。\u003C\u002Fp>\u003Ch2>可抄的模板\u003C\u002Fh2>\u003Cpre>\u003Ccode># Mage-VL-style video caption iteration template\n\n## 1) Input policy\n- Do not rely on uniform frame sampling by default.\n- Prefer compressed-domain features or event-aware sampling.\n- Track token budget before and after any change.\n\n## 2) Caption generation prompt\nYou are writing dense video captions.\nFocus on:\n- main actor or object\n- main action or event\n- important temporal changes\n- visible scene context only when it helps disambiguation\n\nAvoid:\n- repeated background descriptions\n- vague filler like \"the scene shows\"\n- over-explaining obvious details\n- hallucinating unseen actions\n\n## 3) Evaluation agent prompt\nReview the caption and report only actionable issues.\nReturn a short list with labels:\n- missing_subject\n- missing_action\n- temporal_error\n- redundant_detail\n- hallucination\n- weak_specificity\n\nFor each issue, include:\n- exact problematic phrase\n- why it is a problem\n- one minimal fix suggestion\n\n## 4) Prompt modifier rules\nWhen revising the caption prompt:\n- make the smallest possible change\n- change only one rule at a time\n- keep a diff log\n- do not rewrite the full prompt unless the structure is broken\n\n## 5) Iteration loop\nrepeat until stable:\n1. generate captions\n2. evaluate failures\n3. apply one minimal prompt change\n4. rerun on the same validation set\n5. compare token count, error rate, and caption quality\n\n## 6) Decision rule\nKeep a prompt change only if it improves:\n- coverage of key events\n- reduction of hallucination\n- caption specificity\n- stability across samples\n\nIf a change helps only on a few examples but hurts generalization, revert it.\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>這份模板不是原文照搬，是我把這次分享拆成能直接上手的工程版本。你可以先拿它跑一個小驗證集，再慢慢把輸入側的壓縮碼方案和 caption 評估閉環接進去。\u003C\u002Fp>\u003Cp>原始來源是知乎專欄文章 \u003Ca href=\"https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F2067236367365575405\">《微軟 Mage-VL：告別均勻抽帧，直接讀壓縮碼，Token 少 75%》\u003C\u002Fa>。我這裡做的是基於該文公開內容的工程化拆解，模板部分是我重新整理後的可複製版本，不是原文照搬。其他權威參考可看 \u003Ca href=\"https:\u002F\u002Fwww.microsoft.com\u002F\">Microsoft\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002F\">GitHub\u003C\u002Fa> 與 \u003Ca href=\"https:\u002F\u002Farxiv.org\u002F\">arXiv\u003C\u002Fa>。\u003C\u002Fp>","我拆開 Mage-VL 的壓縮碼輸入與 dense caption 迭代流程，整理成可直接套用的視頻管線模板。","zhuanlan.zhihu.com","https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F2067236367365575405",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786170811727-2ctz.png","research","zh","8675701f-d283-4d69-8818-bdf59e5ae09e",[17,18,19,20,21],"video tokens","compressed-domain","dense caption","prompt iteration","multimodal pipeline",[23,24,25],"均勻抽帧會把大量 Token 花在重複畫面上，壓縮域輸入更省也更貼近視頻結構。","dense caption 要做成生成-評估-最小修訂閉環，prompt 本身就是可版本化的工程資產。","評估 agent 應該負責挑刺與輸出可執行修正，別讓它變成另一個黑箱。",1,"2026-08-08T06:33:05.78696+00:00","2026-08-08T06:33:05.775+00:00",{"tags":30,"relatedLang":31,"relatedPosts":35},[],{"id":15,"slug":32,"title":33,"language":34},"mage-vl-cuts-visual-tokens-by-reading-codecs-en","Mage-VL Cuts Visual Tokens by Reading Codecs","en",[36,42,48,54,60,66],{"id":37,"slug":38,"title":39,"cover_image":40,"image_url":40,"created_at":41,"category":13},"04a3925a-33c0-4954-89b7-41e51365cc40","astra-turns-long-math-tasks-into-multi-agent-work-zh","Astra 把長任務拆成多代理工作","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786088000695-2qtf.png","2026-08-07T07:32:51.483837+00:00",{"id":43,"slug":44,"title":45,"cover_image":46,"image_url":46,"created_at":47,"category":13},"01da4d83-b580-43fe-a4aa-0e4285e056c0","evidence-linked-feature-engineering-heart-failure-zh","心衰 EHR 特徵工程可追證據","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786086179831-hiwd.png","2026-08-07T07:02:30.845188+00:00",{"id":49,"slug":50,"title":51,"cover_image":52,"image_url":52,"created_at":53,"category":13},"79a1e441-287d-4bbf-9ec1-5620c8be72a8","tool-calling-as-code-bfcl-v4-zh","工具呼叫用程式碼可能更好","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786084374600-zgew.png","2026-08-07T06:32:25.624019+00:00",{"id":55,"slug":56,"title":57,"cover_image":58,"image_url":58,"created_at":59,"category":13},"66a9a233-e2fe-4726-a3e7-f01a6b47d100","teaching-llms-when-to-trust-context-zh","教 LLM 何時信上下文","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786082585395-85yg.png","2026-08-07T06:02:32.567402+00:00",{"id":61,"slug":62,"title":63,"cover_image":64,"image_url":64,"created_at":65,"category":13},"15c28503-3a01-434b-9e62-9038676f5dff","cuda-binaries-turn-ptx-into-elf-you-can-inspect-zh","CUDA 二進位拆成可檢查 ELF","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786068196777-denz.png","2026-08-07T02:02:53.326675+00:00",{"id":67,"slug":68,"title":69,"cover_image":70,"image_url":70,"created_at":71,"category":13},"a2ae5975-7c35-4094-9d13-922f15cb1034","octolong-cross-repository-code-contexts-zh","OctoLong 用跨倉庫程式脈絡訓練長上下文模型","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1785999778532-gdas.png","2026-08-06T07:02:26.875328+00:00",[73,78,83,88,93,98,103,108,113,118],{"id":74,"slug":75,"title":76,"created_at":77},"f18dbadb-8c59-4723-84a4-6ad22746c77a","deepmind-bets-on-continuous-learning-ai-2026-zh","DeepMind 押注 2026 連續學習 AI","2026-03-26T08:16:02.367355+00:00",{"id":79,"slug":80,"title":81,"created_at":82},"f4a106cb-02a6-4508-8f39-9720a0a93cee","ml-papers-of-the-week-github-research-desk-zh","每週 ML 論文清單，為何紅到 GitHub","2026-03-27T01:11:39.284175+00:00",{"id":84,"slug":85,"title":86,"created_at":87},"c4f807ca-4e5f-47f1-a48c-961cf3fc44dc","ai-ml-conferences-to-watch-in-2026-zh","2026 AI 研討會投稿時程整理","2026-03-27T01:51:53.874432+00:00",{"id":89,"slug":90,"title":91,"created_at":92},"cf046742-efb2-4753-aef9-caed5da5e32e","adaptive-block-scaled-data-types-zh","IF4：神經網路量化的聰明選擇","2026-03-31T06:00:36.990273+00:00",{"id":94,"slug":95,"title":96,"created_at":97},"53a0dc54-0371-4e40-8d5e-74e94a73840c","geometry-aware-similarity-metrics-for-neural-representations-zh","超越距離測量：用微分幾何重新理解神經網路","2026-03-31T06:01:01.241968+00:00",{"id":99,"slug":100,"title":101,"created_at":102},"fee7d472-a775-4b1d-bbc2-1e8bca1bbf8b","on-the-fly-repulsion-in-the-contextual-space-for-rich-divers-zh","讓AI繪圖更有創意：用排斥力提升生成多樣性","2026-03-31T06:01:25.439673+00:00",{"id":104,"slug":105,"title":106,"created_at":107},"a9901203-d69b-447b-8854-15d14eab32b4","vision-aided-beam-prediction-cnn-eca-zh","影像輔助波束預測升級 CNN","2026-04-01T10:00:25.8073+00:00",{"id":109,"slug":110,"title":111,"created_at":112},"b55e7dd4-0a24-4b3d-804d-b0309a03f498","triple-band-fss-mimo-antenna-sub-6-ghz-zh","三頻 FSS MIMO 天線瞄準 sub-6 GHz","2026-04-01T13:18:36.857305+00:00",{"id":114,"slug":115,"title":116,"created_at":117},"f68290bd-e7f3-4b30-ba22-dcd4e0130a66","openclaw-1299-repos-eight-weeks-analysis-zh","OpenClaw 1299 個 Repo 的資料解讀","2026-04-02T05:03:45.208411+00:00",{"id":119,"slug":120,"title":121,"created_at":122},"ed9f80eb-eb02-4d35-8ad4-0ddf428751dd","beam-coherence-aware-combining-mmwave-mimo-zh","毫米波 MIMO 的雙階合併法","2026-04-02T05:27:26.897188+00:00"]