視覺語言模型 (更好、更快、更強)
動機
視覺語言模型(VLM)是當前的熱門話題。在我們之前的部落格文章(2024 年 4 月)中,我們詳細討論了 VLM。其中很大一部分是關於 LLaVA,這是第一個成功且易於復現的開源視覺語言模型,以及如何發現、評估和微調開源模型的提示。
自那以來,變化巨大。模型變得更小巧但更強大。我們看到了新架構和能力的興起(推理、代理、長影片理解等)。同時,多模態檢索增強生成(RAG)和多模態代理等全新正規化也已成形。
在這篇部落格文章中,我們將回顧過去一年視覺語言模型領域發生的一切。您將發現關鍵變化、新興趨勢和顯著發展。
如果您想很好地瞭解視覺語言模型的工作原理,我們強烈建議您閱讀第一篇部落格文章。
目錄
新模型趨勢
在本節中,我們將介紹新型 VLM。有些是全新的,另一些則是先前研究的改進版本。
任意到任意模型
任意到任意模型,顧名思義,就是可以接收任何模態輸入並輸出任何模態(影像、文字、音訊)的模型。它們透過對模態進行對齊來實現這一點,即一種模態的輸入可以轉換為另一種模態(例如,“狗”這個詞可以與狗的影像或單詞的發音相關聯)。
這些模型具有多個編碼器(每個模態一個),然後將嵌入融合在一起,建立共享表示空間。解碼器(多個或單個)使用共享潛在空間作為輸入,並解碼為所選模態。最早構建任意到任意模型的嘗試是 Meta 的 Chameleon,它可以接收影像和文字並輸出影像和文字。Meta 沒有在此模型中釋出影像生成能力,因此 Alpha-VLLM 釋出了 Lumina-mGPT,它在 Chameleon 的基礎上構建了影像生成。
最新且最強大的任意到任意模型 Qwen 2.5 Omni(如下圖所示)是理解任意到任意模型架構的一個很好的例子。
Qwen2.5-Omni 採用了一種新穎的“思考者-說話者”架構,其中“思考者”處理文字生成,“說話者”以流式方式生成自然語音響應。MiniCPM-o 2.6,一個 8B 引數的多模態模型,能夠理解和生成視覺、語音和語言模態的內容。DeepSeek AI 推出的 Janus-Pro-7B 是一個統一的多模態模型,擅長跨模態理解和生成內容。它具有解耦的視覺編碼架構,將理解和生成過程分開。
我們預計未來幾年這類模型的數量將增加。眾所周知,多模態學習是我們更好地學習深度表示的唯一途徑。我們已將一些任意到任意模型和演示整理到此合集中。
推理模型
推理模型是能夠解決複雜問題的模型。我們首先在大語言模型中看到了它們,現在在視覺語言模型中也看到了它們。直到 2025 年,只有一個開源多模態推理模型,即 Qwen 的 QVQ-72B-preview。這是一個由阿里巴巴 Qwen 團隊開發的實驗性模型,附帶許多免責宣告。
今年又出現了一個新的參與者,即月之暗麵糰隊的 Kimi-VL-A3B-Thinking。它由 MoonViT (SigLIP-so-400M) 作為影像編碼器和具有 16B 總引數、僅 2.8B 活躍引數的專家混合 (MoE) 解碼器組成。該模型是 Kimi-VL 基礎視覺語言模型的長鏈思考微調版本,並進一步對齊(強化學習)。您可以在此處試用該模型。
作者還發布了一個指令微調版本,名為 Kimi-VL-A3B-Instruct。
該模型可以接收長影片、PDF、螢幕截圖等。它還具有代理能力。
小巧而強大的模型
社群過去透過引數數量和高質量合成數據來擴充套件智慧。達到一定程度後,基準測試趨於飽和,擴充套件模型的收益遞減。社群透過蒸餾等各種方法來縮小大型模型。這樣做是合理的,因為它降低了計算成本,簡化了部署,並解鎖了本地執行等用例,增強了資料隱私。
當我們談論小型視覺語言模型時,我們通常指的是引數少於 2B 且可以在消費級 GPU 上執行的模型。SmolVLM 是小型視覺語言模型的一個很好的示例模型家族。作者沒有縮小大型模型,而是全力以赴,嘗試將模型擬合到 256M、500M 和 2.2B 等微小引數數量中。例如,SmolVLM2 試圖以這些大小解決影片理解問題,發現 500M 是一個很好的權衡。在 Hugging Face,我們構建了一個 iPhone 應用程式 HuggingSnap,以演示這些模型大小可以在消費裝置上實現影片理解。
另一個引人注目的模型是 Google DeepMind 的 gemma3-4b-it。它特別令人興奮,因為它是最小的多模態模型之一,擁有 128k 令牌上下文視窗,並支援 140 多種語言。該模型屬於 Gemma 3 系列模型,其最大的模型當時在 Chatbot Arena 上排名第一。然後最大的模型被蒸餾成 1B 變體。
最後,儘管不是最小的,但 Qwen2.5-VL-3B-Instruct 值得注意。該模型可以執行各種任務,從定位(物體檢測和指向)到文件理解,再到代理任務;上下文長度可達 32k 令牌。
您可以透過 MLX 和 Llama.cpp 整合使用小型模型。對於 MLX,假設您已安裝,您可以使用以下一行程式碼開始使用 SmolVLM-500M-Instruct
python3 -m mlx_vlm.generate --model HuggingfaceTB/SmolVLM-500M-Instruct --max-tokens 400 --temp 0.0 --image https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/vlm_example.jpg --prompt "What is in this image?"
您可以透過 CLI 使用 llama.cpp 的 GGUF 格式的 gemma-3-4b-it 模型,只需一行程式碼
llama-mtmd-cli -hf ggml-org/gemma-3-4b-it-GGUF
您也可以如下服務相同的模型。
llama-server -hf ggml-org/gemma-3-4b-it-GGUF
我們要特別感謝 moondream2 和 Florence-2,因為它們是最小視覺語言模型的最早嘗試。在本部落格中,我們主要介紹較新的模型(大多是 2024 年 4 月之後推出的模型)。
專家混合作為解碼器
專家混合 (MoE) 模型透過動態選擇並僅啟用最相關的子模型(稱為“專家”)來處理給定輸入資料段,從而提供了一種替代密集架構的方法。這種選擇性啟用(由路由器完成)機制已證明能夠顯著提高模型效能和操作效率,同時利用更少的計算資源。
MoE 模型在推理速度上比同等引數密度的模型更快,因為它們只選擇性地啟用網路的一小部分。它們在訓練過程中也能快速收斂。每件好事都有代價,MoE 模型需要更多的記憶體成本,因為整個模型都在 GPU 上,即使只使用了一小部分。
在廣泛採用的 Transformer 架構中,MoE 層最常見的整合方式是替換每個 Transformer 塊中的標準前饋網路 (FFN) 層。密集網路使用整個模型進行推理,而尺寸相似的 MoE 網路則選擇性地啟用一些專家。這有助於更好地利用計算資源並加速推理。
具有專家混合解碼器的視覺語言模型似乎具有增強的效能。例如,Kimi-VL 是目前最先進的開放推理模型,具有專家混合解碼器。專家混合在 MoE-LLaVA 專注於效率和幻覺減少方面以及 DeepSeek-VL2 的廣泛多模態能力方面也顯示出有希望的結果。最新版本的 Llama(Llama 4)是一個具有視覺能力的 MoE。MoE 作為解碼器是一個有前途的研究領域,我們預計這類模型會增加。
為了更好地理解 MoE,我們建議閱讀這篇精彩的文章。
視覺-語言-動作模型
VLM 甚至在機器人領域留下了自己的印記!在那裡,它們被稱為視覺-語言-動作模型(VLA)。但不要被愚弄,它們主要是戴著小鬍子和帽子的 VLM。VLA 接收影像和文字指令,並返回指示機器人直接採取行動的文字。VLA 透過新增動作和狀態令牌來擴充套件視覺語言模型,以與物理環境互動並控制物理環境。這些額外令牌代表系統內部狀態(它如何感知環境)、動作(它根據命令做什麼)和時間相關資訊(例如任務中的步驟順序)。這些令牌附加到視覺語言輸入中以生成動作或策略。
VLA 通常在基礎 VLM 之上進行微調。有些人進一步擴充套件了這一定義,將 VLA 定義為任何與真實或數字世界進行視覺互動的模型。在此定義中,VLA 可以進行 UI 導航或用於代理工作流。但許多人認為這些應用屬於 VLM 領域。
VLA 的出色例子是 π0 和 π0-FAST,它們是 Physical Intelligence 的首批機器人基礎模型,已移植到 Hugging Face 的 LeRobot 庫。這些模型在 7 個機器人平臺和 68 個獨特任務上進行訓練。它們在洗衣摺疊、收拾餐桌、購物袋裝箱、盒子組裝和物體檢索等複雜的現實世界活動中表現出強大的零樣本和微調效能。
GR00T N1 是 NVIDIA 面向通用人形機器人的開源 VLA 基礎模型。它理解影像和語言,並將其轉化為動作,例如移動手臂或遵循指令,這得益於將智慧推理與即時運動控制相結合的系統。GR00T N1 還基於 LeRobot 資料集格式構建,LeRobot 資料集格式是為簡化機器人演示共享和訓練而建立的開放標準。
摘自論文
現在我們已經瞭解了最新的 VLM 模型創新,接下來讓我們探討更成熟的功能是如何演進的。
專業能力
使用視覺語言模型進行物體檢測、分割、計數
正如我們在前面章節中看到的,VLM 能夠實現傳統計算機視覺任務的泛化。模型現在可以接收影像和各種提示,例如開放式文字,並輸出帶有定位標記的結構化文字(用於檢測、分割等)。
去年,PaliGemma 是第一個嘗試解決這些任務的模型。該模型接收影像和文字,其中文字是感興趣物件的描述以及任務字首。文字提示看起來像“分割帶條紋的貓”或“檢測屋頂上的鳥”。
對於檢測,模型輸出邊界框座標作為標記。另一方面,對於分割,模型輸出檢測標記和分割標記。這些分割標記不是所有分割後的畫素座標,而是由變分自編碼器解碼的程式碼簿索引,該自編碼器經過訓練,可將這些標記解碼為有效的分割掩模(如下圖所示)。
PaliGemma 之後,許多模型被引入以執行定位任務。去年晚些時候,PaliGemma 的升級版本 PaliGemma 2 出現,具有相同的功能和更好的效能。另一個後來出現的模型是 Allen AI 的 Molmo,它可以指示例項並計數物件例項。
Qwen2.5-VL 還可以檢測、指向和計數物件,其中也包括 UI 元素作為物件!
多模態安全模型
生產環境中的視覺語言模型需要過濾輸入和輸出,以防止越獄和有害輸出,從而實現合規性。有害內容包括暴力和露骨色情內容。這就是多模態安全模型的作用:它們在視覺語言模型之前和之後用於過濾其輸入和輸出。它們就像 LLM 安全模型一樣,但增加了影像輸入。
2025 年初,Google 推出了第一個開放式多模態安全模型 ShieldGemma 2。它基於 ShieldGemma(僅文字安全模型)構建。該模型接收影像和內容策略,並返回影像是否符合給定策略的安全標準。策略指影像不適當的標準。ShieldGemma 2 也可用於過濾影像生成模型的輸出。
Meta 的 Llama Guard 4 是一款密集的、多模態、多語言安全模型。它是從 Llama 4 Scout (一個多模態專家混合模型) 中密集剪枝得到的,並進行了安全微調。
該模型可用於純文字和多模態推理。該模型還可以接收視覺語言模型輸出,完成對話,並在傳送給使用者之前對其進行過濾。
多模態 RAG:檢索器、重排序器
現在讓我們看看檢索增強生成在多模態領域是如何演進的。對於複雜文件(通常是 PDF 格式)的 RAG,處理分為三個步驟:
- 將文件完全解析為文字
- 將純文字和查詢傳遞給檢索器和重排序器,以獲取最相關的文件
- 將相關上下文和查詢傳遞給 LLM
傳統的 PDF 解析器包含多個元素,以保留文件中的結構和視覺元素,例如佈局、表格、影像、圖表,所有這些都渲染成 markdown 格式。但這種設定可能難以維護。
隨著視覺語言模型的興起,這個問題得到了解決:現在有了多模態檢索器和重排序器。
多模態檢索器接收一堆 PDF 和一個查詢作為輸入,並返回最相關的頁碼及其置信度分數。這些分數表示該頁面包含查詢答案的可能性,或者查詢與該頁面的相關程度。這繞過了脆弱的解析步驟。
然後,最相關的頁面連同查詢一起輸入到視覺語言模型中,VLM 生成答案。
主要有兩種多模態檢索器架構
- 文件截圖嵌入 (DSE, MCDSE)
- ColBERT 類模型 (ColPali, ColQwen2, ColSmolVLM)
DSE 模型由一個文字編碼器和一個影像編碼器組成,每個查詢返回一個單一向量。返回的分數是點積嵌入的 softmax。它們為每個段落返回一個單一向量。
摘自論文
ColBERT-like 模型,如 ColPali,也是雙編碼器模型,但有一個變化:ColPali 使用視覺語言模型作為影像編碼器,大型語言模型作為文字編碼器。這些模型本質上不是編碼器,但模型輸出嵌入,然後將其傳遞給“MaxSim”。輸出是多個向量,每個令牌一個,這與 DSE 不同。在 MaxSim 中,計算每個文字令牌嵌入和每個影像塊嵌入之間的相似性,這種方法能更好地捕捉細微差別。因此,ColBERT-like 模型的成本效率較低,但效能更好。
您可以在下面看到 ColPali 的索引延遲。由於它只是一個模型,因此也更容易維護。
摘自論文
在 Hugging Face Hub 上,您可以在“視覺文件檢索”任務下找到這些模型。
此任務最受歡迎的基準測試是 ViDoRe,它包含英語和法語文件,文件型別從財務報告、科學圖表到行政檔案不等。ViDoRe 的每個示例都包含影像文件、查詢和可能的答案。與查詢匹配的文件有助於對比預訓練,因此 ViDoRe 訓練集用於訓練新模型。
多模態智慧體
視覺語言模型解鎖了從文件聊天到計算機使用等多種代理工作流。在這裡,我們將重點介紹後者,因為它需要更高階的代理能力。最近,釋出了許多能夠理解和操作 UI 的視覺語言模型。最新的是字節跳動的 UI-TARS-1.5,它在瀏覽器、計算機和手機使用方面表現出色。它還可以進行推理遊戲,並在開放世界遊戲中操作。今年另一個有影響力的釋出是 MAGMA-8B,它是一個用於 UI 導航和與真實世界物理互動的基礎模型。此外,Qwen2.5-VL(特別是其 32B 變體,因為它在代理任務上進行了進一步訓練)和 Kimi-VL 推理模型在 GUI 代理任務中表現良好。
2025 年初,我們推出了 smolagents,一個實現了 ReAct 框架的全新輕量級代理庫。不久之後,我們為該庫實現了視覺語言支援。此整合在兩個用例中進行:
- 在執行開始時,一次性提供影像。這對於使用工具的文件 AI 很有用。
- 動態檢索影像。這對於 VLM 代理控制 GUI 等情況很有用,其中代理會重複擷取螢幕截圖。
該庫為使用者提供了構建其帶有影像理解功能的代理工作流的構建塊。我們提供了不同的指令碼和單行 CLI 命令,以方便使用者快速入門。
對於第一種情況,假設我們希望一個代理描述文件(這不是很有代理性,但對於最小用例來說很好)。您可以像下面這樣初始化 CodeAgent(一個編寫自己程式碼的代理!):
agent = CodeAgent(tools=[], model=model) # no need for tools
agent.run("Describe these documents:", images=[document_1, document_2, document_3])
對於我們需要的代理獲取螢幕截圖的後一種用例,我們可以定義一個回撥,在每個 `ActionStep` 結束時執行。對於您自己的需要動態獲取影像的用例,可以根據需要修改回撥。為了簡單起見,這裡不再詳細定義。您可以選擇閱讀部落格文章和此部落格文章末尾的指令碼本身。現在,讓我們看看如何使用回撥和瀏覽器控制步驟初始化代理。
def save_screenshot(memory_step: ActionStep, agent: CodeAgent) -> None:
"""
Takes screenshots and writes to observations.
"""
png_bytes = driver.get_screenshot_as_png()
memory_step.observations_images = [image.copy()] # persist images to memory_step
url_info = f"Current url: {driver.current_url}"
memory_step.observations = (
url_info if memory_step.observations is None else memory_step.observations + "\n" + url_info
)
return
agent = CodeAgent(
tools=[go_back, close_popups, search_item_ctrl_f], # pass navigation tools
model=model,
additional_authorized_imports=["helium"],
step_callbacks=[save_screenshot], # pass callback
)
您只需執行以下 CLI 命令即可嘗試整個示例。它啟動一個代理,可以控制網頁瀏覽器,並由視覺語言模型驅動以完成網頁自動化任務(請替換為您希望導航到的網站)。
webagent "go to xyz.com/men, get to sale section, click the first clothing item you see. Get the product details, and the price, return them. note that I'm shopping from France"
smolagents 提供不同型別的模型,例如本地 Transformer 模型、使用推理提供商服務的開源模型或閉源模型提供商的端點。我們鼓勵使用開源模型,因為許多代理工作流目前需要推理,這受益於引數數量龐大的模型。截至 2025 年 4 月,Qwen 2.5 VL 是代理工作流的不錯選擇,因為該模型在代理任務上進行了進一步訓練。
影片語言模型
如今,大多數視覺語言模型都能處理影片,因為影片可以表示為一系列幀。然而,影片理解很棘手,因為幀之間存在時間關係,而且幀數量龐大,因此需要採用不同的技術來選擇具有代表性的影片幀集。
自去年以來,社群一直在權衡不同的方法和技巧來解決這個問題。
一個很好的例子是 Meta 的 LongVU 模型。它透過將影片幀傳遞給 DINOv2 來下采樣,以選擇最相似的幀並將其移除,然後模型根據文字查詢進一步細化幀,其中文字和幀都投影到相同的空間並計算相似性。Qwen2.5VL 可以處理長上下文並適應動態 FPS 速率,因為它使用不同幀速率的影片進行訓練。透過擴充套件多模態 RoPE,它理解幀的絕對時間位置,並且可以處理不同的速率並仍然理解現實生活中事件的速度。另一個模型是 Gemma 3,它可以接受文字提示中交錯的時間戳影片幀,例如“幀 00.00:<影像>..”,並且在影片理解任務中表現非常出色。
摘自論文
視覺語言模型的新對齊技術
偏好最佳化是一種替代的語言模型微調方法,也可以擴充套件到視覺語言模型。該方法不依賴於固定的標籤,而是側重於根據偏好比較和排名候選響應。trl 庫支援直接偏好最佳化 (DPO),包括對 VLM 的支援。
下面是 VLM 微調 DPO 的偏好資料集的結構示例。每個條目包含一個影像 + 問題對和兩個相應的答案:一個選定的和一個被拒絕的。VLM 經過微調,以生成與偏好(選定)答案對齊的響應。
此過程的一個示例資料集是 RLAIF-V,它包含超過 83000 個根據上述結構格式化的帶註釋樣本。每個條目都包含一個影像列表(通常是一個)、一個提示、一個選定的答案和一個被拒絕的答案,正如 DPOTrainer 所期望的那樣。
有一個RLAIF-V 格式化資料集,它已經相應地格式化。下面是一個單個樣本的示例
{'images': [<PIL.JpegImagePlugin.JpegImageFile image mode=L size=980x812 at 0x154505570>],
'prompt': [ { "content": [ { "text": null, "type": "image" }, { "text": "What should this catcher be using?", "type": "text" } ], "role": "user" } ],
'rejected': [ { "content": [ { "text": "The catcher, identified by the number...", "type": "text" } ], "role": "assistant" } ],
'chosen': [ { "content": [ { "text": "The catcher in the image should be using a baseball glove...", "type": "text" } ], "role": "assistant" } ]}
資料集準備好後,您可以使用 trl 庫中的 DPOConfig 和 DPOTrainer 類來配置和啟動微調過程。
下面是使用 DPOConfig 的示例配置
from trl import DPOConfig
training_args = DPOConfig(
output_dir="smolvlm-instruct-trl-dpo-rlaif-v",
bf16=True,
gradient_checkpointing=True,
per_device_train_batch_size=1,
per_device_eval_batch_size=1,
gradient_accumulation_steps=32,
num_train_epochs=5,
dataset_num_proc=8, # tokenization will use 8 processes
dataloader_num_workers=8, # data loading will use 8 workers
logging_steps=10,
report_to="tensorboard",
push_to_hub=True,
save_strategy="steps",
save_steps=10,
save_total_limit=1,
eval_steps=10, # Steps interval for evaluation
eval_strategy="steps",
)
要使用 DPOTrainer 訓練您的模型,您可以選擇提供一個參考模型來計算獎勵差。如果您正在使用引數高效微調 (PEFT),您可以將 ref_model=None 以省略參考模型。
from trl import DPOTrainer
trainer = DPOTrainer(
model=model,
ref_model=None,
args=training_args,
train_dataset=train_dataset,
eval_dataset=test_dataset,
peft_config=peft_config,
tokenizer=processor
)
trainer.train()
新基準
在過去一年中,基準也發生了顯著變化。在之前的部落格中,我們將 MMMU 和 MMBench 描述為評估視覺語言模型的兩個新興基準。隨著該領域的快速進展,模型在這些基準上已經趨於飽和,我們需要更好的評估工具。為此,除了通用基準之外,我們還需要評估特定能力的工具。
現在,我們重點介紹兩個突出的通用基準:MMT-Bench 和 MMMU-Pro。
MMT-Bench
MMT-Bench 旨在評估 VLM 在廣泛的多模態任務中的表現,這些任務需要專業知識、精確的視覺識別、定位、推理和規劃。該基準包括來自各種多模態場景的 31325 個多項選擇題,涵蓋影像、文字、影片和點雲模態。它包含 32 種不同的元任務和 162 種子任務,涵蓋了 OCR、視覺識別或視覺語言檢索等多種任務。
MMMU-Pro
MMMU-Pro 是原始 MMMU 基準的更好版本。它還評估了高階人工智慧模型在多種模態下的真實理解能力。
它比 MMMU 更復雜,例如,它具有僅視覺輸入設定,並且候選選項的數量從 4 增加到 10。該基準還結合了真實世界模擬,其僅視覺問題來源於模擬顯示器中捕獲的螢幕截圖或照片,具有不同的背景、字型樣式和大小,以模擬真實世界條件。
額外:我們的模型選擇
以下是我們對一些重點模型的選擇。我們喜歡的模型有很多,下面列出的是最新的。
模型名稱 | 模型大小 | 我們為什麼喜歡它 |
---|---|---|
Qwen2.5-VL | 從 3B 到 72B | 功能強大的多功能模型,具有代理能力、數學等 |
RolmOCR | 7B | 效能卓越的 OCR 模型 |
Kimi-VL-Thinking | 16B MoE,活躍引數 3B | 最佳推理模型 |
SmolVLM2 | 256M, 500M (我們的最愛!), 2.2B | 最小的影片語言模型 |
Llama 4 Scout & Maverick | 109B/400B MoE,活躍引數 17B | 超長上下文 |
Molmo | 1B, 7B, 72B,以及活躍引數 1B 的 MoE | 完全開放的模型,並增加了本地化能力 |
就是這樣!我們希望這篇部落格文章對您瞭解過去一年發生的所有事情有所幫助。我們期待看到您將用這篇部落格中的模型構建出什麼。🤗 下面我們提供了一些連結,對本部落格文章中的每個主題進行更深入的解釋。
感謝 Vaibhav Srivastav 和 Pablo Montalvo Leroux 對本部落格的審閱。
有用資源
以下是本部落格中深入探討的部落格文章合集。
- 本部落格中提到的模型、資料集等
- 多模態安全:Llama Guard 4 部落格
- VLM 中的 DPO:使用 TRL 對視覺語言模型進行偏好最佳化
- 支援 VLM 的 Smolagents:我們剛剛賦予了 smolagents 視覺能力
- 使用 smolagents 的視覺代理的代理課程部分:使用 smolagents 的視覺代理
- Gemma 3 模型釋出:歡迎 Gemma 3:Google 全新的多模態、多語言、長上下文開源 LLM
- PaliGemma 2 模型釋出:歡迎 PaliGemma 2 – Google 全新的視覺語言模型
- Hugging Face 釋出的 Pi0
- 多模態檢索:視覺多語言:介紹 mcdse-2b
- 多模態檢索:ColPali:使用視覺語言模型高效進行文件檢索
- 影片語言建模:SmolVLM2:將影片理解帶到每個裝置
- 使用純 PyTorch 最小訓練 VLM:GitHub - huggingface/nanoVLM:訓練/微調小型 VLM 的最簡單、最快儲存庫。