![]()
![]()
![]()
近日,Ollama 正式發布 v0.21.1 版本,這是一次聚焦功能拓展與性能優化的重要更新。本次更新核心圍繞兩大方向展開:一是新增 Kimi Code CLI 集成,打通 Moonshot coding agent 與 Ollama 的聯動,讓終端與 IDE 中的代碼開發體驗更流暢;二是對 MLX Runner 進行全方位重構與優化,涵蓋采樣器、張量管理、推理管道等核心模塊,大幅提升本地模型運行的穩定性、效率與數值正確性。此外,版本還包含模型推薦列表更新、Hermes Agent 文檔優化、API 接口修復等多項細節改進,全方位提升用戶使用體驗。本文將詳細拆解本次更新的全部內容,結合代碼變更細節,幫助開發者快速掌握新版本的核心特性與使用方法。
一、版本核心更新概覽
Ollama v0.21.1 版本的更新覆蓋范圍廣泛,涉及命令行工具、模型管理、推理引擎、API 接口、文檔等多個模塊,具體可分為以下幾大板塊:
? 新增 Kimi Code CLI 集成,支持自動安裝、配置與運行,實現 Moonshot coding agent 與 Ollama 模型的無縫聯動;
? MLX Runner 全面優化,包括采樣器重構、張量管理線程安全優化、推理管道優化、logprobs 支持完善等;
? 模型推薦與管理優化,更新推薦模型列表,調整模型排序規則,完善云模型上下文長度限制;
? Hermes Agent 文檔重構,優化快速啟動流程,調整推薦模型說明,簡化配置步驟;
? API 接口修復,解決 gemma4 模型在禁用 thinking 時格式約束失效的問題,完善 logprobs 相關接口;
? 模型相關優化,包括 gemma4、glm4_moe_lite 等模型的細節修復與功能完善。
本次更新不涉及新增功能模塊,全部圍繞現有功能的優化與完善展開,重點解決了此前版本中存在的性能瓶頸、功能缺陷與體驗痛點,尤其針對 MLX 推理引擎的優化,讓搭載 Apple Silicon 芯片的設備運行本地模型時獲得更出色的性能表現。
二、新增 Kimi Code CLI 集成:打通 Moonshot coding agent 與 Ollama
本次更新最引人注目的功能,便是新增了 Kimi Code CLI 的集成支持。Kimi Code CLI 是 Moonshot 推出的一款終端與 IDE 專用 coding agent,具備強大的代碼生成、調試、優化能力,而 Ollama v0.21.1 則實現了與該工具的深度聯動,讓用戶可以直接通過 Ollama 命令啟動 Kimi Code CLI,并自動配置 Ollama 模型作為其推理后端。
2.1 核心集成特性
本次集成并非簡單的命令調用,而是實現了從安裝、配置到運行的全流程自動化,核心特性包括:
? 自動檢測 Kimi Code CLI 安裝狀態,若未安裝則提示用戶進行安裝,并自動執行安裝腳本;
? 自動構建 Kimi 配置文件,將 Ollama 作為推理后端,默認使用 Ollama 模型作為 Kimi 的默認模型;
? 支持通過 Ollama 命令直接傳遞參數給 Kimi Code CLI,同時避免參數沖突;
? 跨平臺支持,涵蓋 Windows、macOS(darwin)、Linux 三大系統,包括 WSL 環境的適配;
? 自動解析 Ollama 模型的上下文長度,為 Kimi Code CLI 配置最優的最大上下文尺寸。
為實現 Kimi Code CLI 集成,本次更新新增了 3 個核心文件,并修改了多個現有文件,具體如下:
2.2.1 新增 cmd/launch/kimi.go:Kimi 集成核心邏輯
該文件實現了 Kimi 集成的核心邏輯,包括 Kimi 二進制文件的查找、安裝、配置構建、命令執行等功能,核心代碼模塊解析如下:
? Kimi 結構體:實現 Runner 接口,用于定義 Kimi Code CLI 的運行邏輯,String 方法返回集成名稱“Kimi Code CLI”。
? args 方法:構建 Kimi Code CLI 的運行參數,將 Ollama 生成的配置文件作為參數傳遞,并拼接用戶傳入的額外參數。
? Run 方法:核心運行邏輯,先驗證參數是否存在沖突(如禁止用戶傳遞 --config、--model 等 Ollama 已管理的參數),再構建 Kimi 配置文件,檢測并安裝 Kimi 二進制文件,最后執行 Kimi 命令并掛載標準輸入輸出。
? findKimiBinary 方法:跨平臺查找 Kimi 二進制文件,支持多種安裝路徑,包括用戶主目錄下的 .local/bin、bin 目錄,以及 uv 工具安裝路徑,同時適配 WSL 環境下的 Windows 路徑轉換。
? buildKimiInlineConfig 方法:生成 Kimi 的 inline 配置文件,將 Ollama 的 API 地址(http://127\.0\.0\.1:11434/v1)作為 Kimi 的推理后端,API Key 設為“ollama”,并配置默認模型別名與上下文長度。
? resolveKimiMaxContextSize 方法:解析 Ollama 模型的上下文長度,優先使用云模型的預設限制,若為本地模型則通過 Ollama API 獲取模型信息中的上下文長度,默認值為 32768。
? ensureKimiInstalled 方法:檢測 Kimi 是否安裝,若未安裝則檢查安裝依賴(如 Windows 需 PowerShell,Linux/macOS 需 curl 和 bash),提示用戶確認后執行對應系統的安裝腳本,安裝完成后再次查找二進制文件并返回路徑。
該文件為 Kimi 集成提供了完整的測試用例,涵蓋二進制文件查找、配置構建、參數驗證、安裝流程等場景,確保集成功能的穩定性與正確性。由于測試用例代碼量較大,此處重點說明測試覆蓋范圍:
? 驗證 Kimi 二進制文件的跨平臺查找邏輯,包括不同安裝路徑、WSL 環境下的路徑轉換;
? 驗證參數沖突檢測邏輯,確保用戶無法傳遞 Ollama 已管理的參數(如 --config、--model);
? 驗證 Kimi 配置文件的構建邏輯,確保上下文長度、后端地址等配置正確;
? 驗證安裝流程的正確性,包括依賴檢測、安裝腳本執行、安裝后二進制文件查找。
在集成注冊表中新增 Kimi 集成的配置信息,包括集成名稱“kimi”、Runner 實例、描述信息、安裝檢查邏輯等,確保 Ollama 能夠識別并管理 Kimi 集成。核心配置如下:
? Name: &;kimi&;,作為集成的唯一標識,用戶可通過“ollama launch kimi”命令啟動 Kimi Code CLI;
? Runner: &Kimi{},指定 Kimi 集成的運行邏輯;
? Description: &;Moonshot&;s coding agent for terminal and IDEs&;,描述集成的功能;
? Hidden: true,默認隱藏該集成(需通過命令主動啟動);
? Install 配置:定義安裝檢查邏輯(通過查找 kimi 二進制文件)、安裝確保邏輯(調用 ensureKimiInstalled 方法),以及官方安裝文檔地址。
除新增文件外,本次更新還修改了多個現有文件,以支持 Kimi 集成:
? cmd/launch/launch.go:在支持的集成列表中添加“kimi”,并更新幫助信息,讓用戶了解該集成的存在;
? cmd/launch/models.go:更新推薦模型列表,將原有的“kimi-k2.5:cloud”替換為“kimi-k2.6:cloud”,并更新其描述為“State-of-the-art coding, long-horizon execution, and multimodal agent swarm capability”,同時在云模型限制列表中新增“kimi-k2.6”的上下文長度限制(262144);
? cmd/launch/runner_exec_only_test.go:新增 Kimi 集成的測試用例,驗證運行 Kimi 時不會重寫配置文件。
通過 Ollama v0.21.1 啟動 Kimi Code CLI 非常簡單,只需執行以下命令:
ollama launch kimi執行該命令后,Ollama 會自動完成以下操作:
1. 檢測系統中是否已安裝 Kimi Code CLI,若未安裝則提示用戶確認安裝;
2. 安裝完成后,自動構建 Kimi 配置文件,將 Ollama 作為推理后端;
3. 提示用戶選擇 Ollama 模型(支持本地模型與云模型,如 kimi-k2.6:cloud);
4. 啟動 Kimi Code CLI,用戶可直接在終端中使用 Kimi 的 coding 功能,推理請求將通過 Ollama 模型處理。
若用戶需要傳遞額外參數給 Kimi Code CLI,可在命令后直接添加,例如:
ollama launch kimi --verbose注意:禁止傳遞 --config、--model、-m 等參數,這些參數由 Ollama 統一管理,避免沖突。
三、MLX Runner 全方位優化:性能與穩定性雙提升
MLX Runner 是 Ollama 針對 Apple Silicon 芯片優化的推理引擎,本次 v0.21.1 版本對其進行了全方位的重構與優化,涉及采樣器、張量管理、推理管道、logprobs 支持等多個核心模塊,解決了此前版本中存在的線程安全問題、數值不穩定性、性能瓶頸等問題,大幅提升了本地模型的運行體驗。
3.1 采樣器(sample)模塊重構與優化
采樣器是推理引擎的核心組件,負責根據模型輸出的 logits 采樣得到下一個token,本次更新對采樣器進行了全面重構,優化了采樣邏輯、新增 logprobs 支持、完善 penalty 機制,具體變更如下:
3.1.1 采樣器結構體與接口優化
原采樣器的結構體設計較為簡單,僅支持基礎的采樣功能,本次更新重構了采樣器的結構體與接口,使其更具擴展性與可讀性:
? 新增 Options 結構體:整合采樣相關的所有參數,包括 Temperature、TopP、MinP、TopK、RepeatLastN、RepeatPenalty、PresencePenalty、FrequencyPenalty、Logprobs、TopLogprobs 等,替代了原有的參數列表傳遞方式,使代碼更簡潔。
? 新增 Result 結構體:用于封裝采樣結果,包括采樣得到的 token、該 token 的 logprob、top-K token 列表及其 logprob,解決了此前采樣結果分散、難以管理的問題。
? 新增 Arrays 方法:用于返回 Result 中的所有張量,方便調用者統一管理張量的生命周期(如 Pin、Unpin、Eval 等操作)。
? 重構 New 方法:接受 Options 結構體作為參數,根據配置自動構建采樣器的變換鏈(transforms),替代了原有的多參數傳遞方式,提升了代碼的可維護性。
本次更新優化了采樣邏輯,重點解決了 top-P 與 top-K 聯合使用時的性能問題,以及數值穩定性問題:
? 新增 topKTopP 變換:當同時啟用 top-P 和 top-K 時,通過一次排序操作同時實現 top-P 的累積概率過濾和 top-K 的位置過濾,避免了多次排序帶來的性能損耗,提升了采樣效率。
? 優化 top-K 變換:使用 Argpartition(部分排序)替代 Argsort(全排序),在僅需保留 top-K token 的場景下,大幅減少排序操作的計算量,提升性能。
? 優化數值穩定性:在計算 logprobs 時,先減去 logits 的最大值再進行 logsumexp 操作,避免了大數值相減導致的精度丟失,確保 logprobs 計算的正確性。
penalty 機制用于減少重復 token 的生成,本次更新完善了 penalty 機制,新增了 RepeatPenalty 和 FrequencyPenalty 支持,使 penalty 控制更精細:
? PresencePenalty:對已出現過的 token 進行懲罰,降低其被采樣的概率,避免重復生成;
? RepeatPenalty:根據 token 的出現次數調整懲罰力度,對于重復出現的 token,若其 logits 為正則除以懲罰系數,若為負則乘以懲罰系數,進一步減少重復;
? FrequencyPenalty:根據 token 的出現頻率進行懲罰,出現次數越多,懲罰力度越大,適用于需要避免高頻重復 token 的場景。
同時,優化了 penalty 變換的邏輯,確保 penalty 僅在有歷史 token 時生效,避免了無歷史數據時的無效計算。
3.1.4 logprobs 支持完善
logprobs 用于返回采樣 token 的概率信息,是很多應用場景(如模型評估、不確定性分析)的重要需求,本次更新完善了 logprobs 的支持,具體包括:
? 新增 Logprobs 和 TopLogprobs 配置:用戶可通過配置啟用 logprobs 功能,并指定 top-K logprobs 的數量;
? 正確計算 logprobs:通過 log_softmax 計算每個 token 的 logprob,確保數值正確性;
? 返回 top-K logprobs:當啟用 TopLogprobs 時,返回采樣 token 之外的 top-K 個 token 及其 logprob,并按 logprob 降序排序;
? 確保 logprobs 與 content 對齊:通過 decoder 結構體緩存未完成的 UTF-8 字節,確保 logprobs 與返回的 content 一一對應,避免錯位。
為確保 logprobs 功能的正確性,本次更新新增了 sample/logprob_test.go 文件,包含了全面的測試用例,覆蓋以下場景:
? 基礎功能測試:驗證 logprobs 的計算是否正確,top-K logprobs 的排序是否正確;
? 數值穩定性測試:驗證在 logits 數值較大或較小時,logprobs 的計算是否仍保持穩定,無無窮大或NaN值;
? 概率正確性測試:驗證所有 token 的 logprob 對應的概率之和是否為 1,符合概率分布要求;
? 選中 token 正確性測試:驗證選中 token 的 logprob 是否與 top-K logprobs 中的對應值一致,且選中 token 為 logits 最大的 token(貪心采樣場景)。
張量管理是 MLX Runner 性能與穩定性的關鍵,本次更新對張量管理模塊進行了重點優化,解決了線程安全問題,完善了張量操作接口:
3.2.1 線程安全優化
原張量管理模塊存在線程安全隱患,多個 goroutine 同時操作 tensors 切片時可能導致數據競爭,本次更新通過以下方式解決:
? 新增 arraysMu 互斥鎖:對 tensors 切片的讀寫操作進行加鎖,確保多個 goroutine 同時操作時的線程安全;
? 使用 atomic 包:將 pinned 字段從 int 改為 atomic.Int32,確保對 pinned 計數器的原子操作,避免數據競爭。
完善了張量的操作接口,新增了多個實用方法,同時優化了現有方法的參數與返回值,提升了接口的易用性:
? 新增 MaxAxis 方法:用于計算指定軸上的最大值,支持是否保留維度;
? 新增 ScatterAddAxis 方法:用于在指定軸上根據索引進行散射加法操作;
? 優化 Dims、Dim、DType 等方法:將方法接收者從值類型改為指針類型,避免值拷貝帶來的性能損耗;
? 完善 LogArrays 方法:在打印張量信息時,使用 atomic.Load 讀取 pinned 計數器的值,確保線程安全。
優化了張量的生命周期管理,確保張量能夠及時釋放,減少內存占用:
? 完善 Pin/Unpin 方法:使用 atomic 計數器管理張量的引用計數,避免出現負引用計數的情況;
? 優化 Sweep 方法:在清理未被 pinned 的張量時,先加鎖再操作 tensors 切片,確保線程安全,同時避免誤刪被 pinned 的張量;
? 完善 LogArrays 方法:在打印張量信息時,正確顯示每個張量的 pinned 計數,方便開發者調試內存泄漏問題。
推理管道是 MLX Runner 處理推理請求的核心流程,本次更新對推理管道進行了全面優化,提升了推理效率與穩定性,同時完善了請求處理邏輯:
3.3.1 新增 Prepare 方法
新增 Prepare 方法,用于對推理請求進行預處理,包括 token 編碼、上下文長度驗證、生成 token 數量限制等,將預處理邏輯與推理邏輯分離,提升了代碼的可維護性:
? token 編碼:使用 tokenizer 對輸入 prompt 進行編碼,添加 BOS token;
? 上下文長度驗證:檢查編碼后的 token 長度是否超過模型的最大上下文長度,若超過則返回錯誤;
? 生成 token 數量限制:根據模型的最大上下文長度,計算最大可生成的 token 數量,確保推理過程不會超出上下文限制。
優化了推理流程的邏輯,減少了不必要的計算與內存占用,提升了推理效率:
? 預填充優化:將預填充的 chunk 大小設置為 2048(2<<10),優化預填充過程的內存使用;
? 張量生命周期管理:在推理過程中,及時對不需要的張量進行 Unpin 操作,釋放內存;
? 異步評估優化:使用 AsyncEval 方法異步評估張量,提升推理效率;
? 緩存清理:每生成 256 個 token 清理一次緩存,減少內存占用,避免內存泄漏。
新增 decoder 結構體,用于將采樣得到的 token 解碼為字符串,并確保 logprobs 與 content 對齊,解決了此前解碼過程中可能出現的 UTF-8 字節不完整、logprobs 錯位等問題:
? 緩存未完成的 UTF-8 字節:當解碼得到的字符串包含不完整的 UTF-8 字節時,將其緩存,待下一個 token 解碼后拼接,確保解碼結果的正確性;
? logprobs 與 content 對齊:將每個 token 的 logprob 與對應的解碼字符串關聯,確保返回的 logprobs 與 content 一一對應,避免錯位。
完善了推理過程中的錯誤處理,確保在出現上下文取消、模型未加載等錯誤時,能夠及時返回錯誤信息,避免程序崩潰:
? 上下文取消處理:在推理過程中定期檢查上下文是否被取消,若取消則立即返回錯誤;
? 模型加載檢查:在推理開始前檢查模型是否已加載,若未加載則返回錯誤;
? 輸出 token 檢查:檢查采樣得到的 token 是否為 EOS token,若為 EOS token 則終止推理,返回結果。
除上述核心模塊外,本次更新還對 MLX 相關的其他模塊進行了優化,包括 mlx/act.go、mlx/compile.go、mlx/fast.go、mlx/nn.go、mlx/ops.go 等:
3.4.1 mlx/act.go 新增 SigmoidRouter 方法
新增 sigmoidRouterFused 融合內核和 SigmoidRouter 方法,實現了 DeepSeek-V2 / GLM-MoE 無輔助損失的路由器頭,返回 sigmoid(gates) 和 -(sigmoid(gates)+bias) 兩個輸出,減少了內核調用次數,提升了 MoE 模型的推理效率。
3.4.2 mlx/compile.go 優化
優化了編譯過程中的張量檢查邏輯,使用 atomic.Load 讀取 pinned 計數器的值,確保線程安全,避免在編譯過程中出現張量被誤刪的情況。
3.4.3 mlx/fast.go 優化
將 LayerNorm 和 RMSNorm 結構體中的 Weight 和 Bias 字段從值類型改為指針類型,避免值拷貝帶來的性能損耗,同時優化了 Forward 方法的邏輯,提升了歸一化操作的效率。
3.4.4 mlx/nn.go 優化
將 Linear 和 Embedding 結構體中的 Weight 和 Bias 字段從值類型改為指針類型,優化了 Forward 方法的邏輯,提升了線性變換和嵌入操作的效率,同時完善了 Gather 方法的實現,支持更靈活的索引操作。
3.4.5 mlx/ops.go 新增方法
新增 MaxAxis 和 ScatterAddAxis 方法,完善了張量的操作接口,為后續的模型優化提供了更多支持。
3.5 服務器(server.go)與運行器(runner.go)優化
對 MLX Runner 的服務器和運行器進行了優化,完善了請求處理邏輯,提升了接口的兼容性與穩定性:
3.5.1 server.go 優化
? 完善請求解碼邏輯:將請求解碼從 TextCompletionsRequest 改為 CompletionRequest,支持更多的請求參數,包括 Logprobs、TopLogprobs 等;
? 優化采樣器初始化:根據請求參數初始化采樣器,支持 RepeatPenalty、FrequencyPenalty 等新增參數;
? 新增請求預處理:在處理推理請求前,調用 Prepare 方法對請求進行預處理,確保請求參數的正確性。
? 重構 Request 結構體:將 TextCompletionsRequest 替換為 CompletionRequest,新增 Tokens 字段用于存儲編碼后的 token,提升了請求處理的效率;
? 優化 Pipeline 方法:將 Pipeline 方法的參數改為 context.Context 和 Request,確保上下文取消能夠正確傳遞;
? 完善 Sampler 管理:在請求處理完成后,及時釋放 Sampler 資源,減少內存占用。
本次更新對 Ollama 的模型推薦與管理功能進行了優化,調整了推薦模型列表,完善了模型排序規則和云模型限制,提升了用戶的模型選擇體驗。
4.1 推薦模型列表更新
在 cmd/launch/models.go 文件中,對推薦模型列表進行了更新:
? 將原有的“kimi-k2.5:cloud”模型替換為“kimi-k2.6:cloud”,并更新其描述為“State-of-the-art coding, long-horizon execution, and multimodal agent swarm capability”,突出其在編碼、長序列執行和多模態智能體集群方面的優勢;
? 在云模型限制列表(cloudModelLimits)中新增“kimi-k2.6”的上下文長度限制,設置為 262144,與 kimi-k2.5 保持一致,確保模型運行時的上下文管理正確。
在 cmd/launch/models_test.go 文件中,優化了模型列表的排序規則,確保推薦模型(尤其是云模型)優先顯示,具體調整如下:
? 將測試用例中的“kimi-k2.5:cloud”替換為“kimi-k2.6:cloud”,確保測試用例與推薦模型列表一致;
? 完善模型排序邏輯,確保已安裝的模型和云模型優先顯示,推薦模型排在非推薦模型之前,云模型在混合場景下優先排序。
更新了多個模型相關的測試用例,確保模型推薦、排序、限制等功能的正確性:
? models_test.go:更新測試用例中的模型名稱,將“kimi-k2.5:cloud”替換為“kimi-k2.6:cloud”,確保測試用例與實際推薦模型一致;
? registry.go:完善 Kimi 集成的模型推薦邏輯,確保“kimi-k2.6:cloud”被正確識別為推薦模型;
? gemma4_moe_test.go:新增模型類型轉換邏輯,將推理結果的張量類型轉換為 int32,確保測試用例的正確性。
本次更新對 Hermes Agent 的文檔(docs/integrations/hermes.mdx)進行了全面重構,優化了文檔結構,簡化了使用流程,調整了推薦模型說明,提升了文檔的可讀性與實用性。
5.1 文檔結構優化
重構了文檔的結構,將原有的“Quick start”“Install”“Set up”“Recommended models”等章節重新組織,使流程更清晰,重點更突出:
? Quick start:簡化快速啟動流程,明確“ollama launch hermes”命令的功能,說明 Ollama 會自動完成安裝、模型選擇、配置等操作;
? Recommended models:調整推薦模型列表,將原有的“kimi-k2.5:cloud”替換為“kimi-k2.6:cloud”,同時更新本地模型推薦,新增“qwen3.6”模型,說明其內存需求;
? Connect messaging apps:簡化消息應用連接流程,明確需要先準備模型,再運行“hermes gateway setup”命令;
? Reconfigure:簡化重新配置流程,提供“hermes setup”命令用于重新運行設置向導;
? Manual setup:簡化手動安裝流程,明確安裝命令和后續的設置步驟。
對文檔的內容細節進行了調整,修正了部分錯誤,補充了關鍵信息:
? 補充 Hermes Agent 的核心特性:新增“70+ skills that it ships with by default”,說明其默認包含的技能數量;
? 修正 Windows 環境說明:明確 Hermes Agent 在 Windows 上需要 WSL2,并提供安裝命令“wsl --install”;
? 調整推薦模型描述:更新各模型的描述,突出其核心優勢,如“kimi-k2.6:cloud”的編碼和多模態能力;
? 簡化配置步驟:刪除原有的“Configure later”章節,將相關內容整合到“Reconfigure”章節,使文檔更簡潔;
? 補充模型鏈接:提供“ollama.com/search”鏈接,方便用戶查找更多模型。
本次更新對 Ollama 的 API 接口進行了修復與優化,重點解決了 gemma4 模型在禁用 thinking 時格式約束失效的問題,完善了 logprobs 相關接口,提升了 API 的穩定性與兼容性。
6.1 修復 gemma4 模型格式約束失效問題
在 server/routes.go 文件中,修復了 gemma4 模型在禁用 thinking(think=false)時,格式約束(format)失效的問題。該問題的原因是,此前的邏輯會對所有支持 thinking 的模型延遲應用格式約束,而當 thinking 被禁用時,不會觸發格式約束的重新應用,導致格式約束失效。
修復方案:新增 forceImmediate 變量,當模型為 gemma4、請求明確禁用 thinking 且設置了格式約束時,強制立即應用格式約束,不進行延遲處理。核心代碼變更如下:
forceImmediate := m.Config.Parser == "gemma4" && req.Think != nil && !req.Think.Bool()
if req.Format != nil && structuredOutputsState == structuredOutputsState_None && !forceImmediate && ((builtinParser != nil || thinkingState != nil) && slices.Contains(m.Capabilities(), model.CapabilityThinking)) {
currentFormat = nil
}同時,在 server/routes_generate_test.go 文件中,新增了 TestChatFormatWithThinkFalse 測試用例,驗證該修復的正確性,確保 gemma4 模型在禁用 thinking 時,格式約束能夠正確應用。
6.2 完善 logprobs 相關 API 支持
隨著 MLX Runner 中 logprobs 功能的完善,本次更新也對 API 接口進行了相應調整,確保 logprobs 能夠正確返回:
? 在 x/mlxrunner/client.go 中,重構了 CompletionRequest 和 CompletionResponse 結構體,新增 Logprobs 字段,支持返回 logprobs 信息;
? 優化了 API 響應的序列化邏輯,確保 logprobs 能夠正確序列化為 JSON 格式,返回給調用者;
? 修復了 API 錯誤返回邏輯,將錯誤信息封裝為 api.StatusError,確保錯誤響應的格式統一。
在 integration/api_test.go 文件中,刪除了 TestAPIGenerateLogprobs 和 TestAPIChatLogprobs 測試用例中的跳過邏輯,確保 logprobs 相關 API 的測試能夠正常執行,驗證 API 接口的正確性。
七、模型相關優化
本次更新對部分模型的實現進行了優化,包括 gemma4、glm4_moe_lite 等,提升了模型的推理效率與正確性。
7.1 gemma4 模型優化
在 x/models/gemma4/gemma4_moe_test.go 文件中,新增了模型類型轉換邏輯,將推理結果的張量類型轉換為 int32,確保測試用例的正確性,避免因類型不匹配導致的測試失敗。核心代碼變更如下:
gotInds = gotInds.AsType(mlx.DTypeInt32)
wantInds = wantInds.AsType(mlx.DTypeInt32)7.2 glm4_moe_lite 模型優化在 x/models/glm4_moe_lite/glm4_moe_lite.go 文件中,優化了 MoEGate 的 Forward 方法,使用新增的 mlx.SigmoidRouter 方法替代原有的 sigmoid 和加法操作,提升了 MoE 路由器的運行效率。核心代碼變更如下:
? 當存在 EScoreCorrectionBias 時,調用 mlx.SigmoidRouter 方法獲取 origScores 和 negScores,替代原有的 sigmoid 和加法操作;
? 優化了 scores 的計算邏輯,確保路由器的輸出正確。
在 x/models/nn/nn_test.go 文件中,優化了量化線性層的測試用例,將推理結果的張量類型轉換為 float32,確保測試用例的數值對比正確,避免因類型不匹配導致的測試失敗。核心代碼變更如下:
qOut := ql.Forward(input).AsType(mlx.DTypeFloat32)
dOut := NewLinear(dequantizedWeight, nil).Forward(input).AsType(mlx.DTypeFloat32)八、版本更新總結與使用建議 8.1 版本更新總結Ollama v0.21.1 版本是一次聚焦優化與完善的重要更新,核心亮點包括:
? 新增 Kimi Code CLI 集成,實現 Moonshot coding agent 與 Ollama 的無縫聯動,提升終端與 IDE 中的代碼開發體驗;
? MLX Runner 全方位優化,解決了線程安全、數值穩定性、性能瓶頸等問題,完善了 logprobs 支持,提升了本地模型的運行效率與穩定性;
? 模型推薦與管理優化,更新推薦模型列表,調整排序規則,完善云模型限制,提升用戶模型選擇體驗;
? Hermes Agent 文檔重構,簡化使用流程,補充關鍵信息,提升文檔可讀性與實用性;
? API 接口修復與優化,解決 gemma4 模型格式約束失效問題,完善 logprobs 支持,提升 API 穩定性與兼容性;
? 模型相關優化,提升部分模型的推理效率與測試正確性。
本次更新未新增突破性功能,但通過對現有功能的優化與完善,有效解決了此前版本中存在的痛點問題,尤其是 MLX Runner 的優化,讓搭載 Apple Silicon 芯片的設備能夠獲得更出色的本地模型運行體驗,Kimi Code CLI 的集成則進一步拓展了 Ollama 的應用場景,為開發者提供了更便捷的 coding 工具。
8.2 使用建議
針對本次版本更新,給出以下使用建議:
? 建議所有用戶升級到 v0.21.1 版本,尤其是使用 Apple Silicon 芯片設備的用戶,可顯著提升本地模型的運行效率與穩定性;
? 需要使用 Kimi Code CLI 的開發者,可通過“ollama launch kimi”命令快速啟動,無需手動安裝與配置,體驗更便捷;
? 使用 gemma4 模型且需要格式約束的用戶,需確保設置 think=false 時,格式約束能夠正確應用,可通過 API 測試驗證;
? 使用 Hermes Agent 的用戶,可參考更新后的文檔,簡化配置流程,選擇推薦的模型(如 kimi-k2.6:cloud)獲得更好的體驗;
? 開發者在使用 logprobs 功能時,可通過配置 Logprobs 和 TopLogprobs 參數,獲取更詳細的概率信息,用于模型評估與不確定性分析。
代碼地址:github.com/ollama/ollama
從本次更新可以看出,Ollama 團隊正聚焦于現有功能的優化與完善,提升用戶體驗與性能穩定性。后續,預計 Ollama 將繼續推進以下方向的發展:
? 進一步優化 MLX Runner 的性能,支持更多模型類型,提升推理效率;
? 拓展更多第三方工具集成,豐富 Ollama 的應用場景;
? 完善模型管理功能,支持更靈活的模型配置與調度;
? 提升 API 接口的兼容性與擴展性,支持更多應用場景的集成。
總體而言,Ollama v0.21.1 版本是一次非常實用的更新,雖然沒有新增突破性功能,但通過對現有功能的精細化優化,有效提升了產品的穩定性與用戶體驗,值得所有用戶升級使用。
我們相信人工智能為普通人提供了一種“增強工具”,并致力于分享全方位的AI知識。在這里,您可以找到最新的AI科普文章、工具評測、提升效率的秘籍以及行業洞察。 歡迎關注“福大大架構師每日一題”,發消息可獲得面試資料,讓AI助力您的未來發展。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.