跳到內容

模型排序

Codex 模型選擇器不會保留 opencodex 設定中 provider 的宣告順序或模型陣列順序。最終順序由目錄 priority 決定;priority 相同的路由模型則使用確定性的字母順序。

Codex 的 models-manager 按 priority 升序排列選擇器中可見的目錄條目。目錄陣列本身的順序會被 丟棄,因此在生成的 JSON 陣列中把某個條目前移,並不會讓它在選擇器中前移。該約束直接記錄在 src/codex/catalog/sync.ts 中。

因此,opencodex 透過分配更低的 priority 控制置頂位置,而不依賴陣列位置。相關 priority 如下:

以下優先級表與範例適用於未啟用完整選擇器排序的情況。

目錄條目 Priority 來源
subagentModels[i] i04 src/codex/catalog/sync.ts 中的 featured rank map
其他路由模型 5 src/codex/catalog/sync.ts 中建立路由條目的邏輯
預設原生 GPT slug 9 src/codex/catalog/sync.ts 中建立原生條目的邏輯
存在 featured 列表時未選中的原生模型 至少為 featured.length + 100 src/codex/catalog/sync.ts 中合併原生目錄的邏輯

管理 API 在 src/server/management/agent-settings-routes.ts 中使用 slice(0, 5),把 subagentModels 限制為最多五項。這與 Codex spawn_agent 介面只公佈前五個模型 override 的行為 一致。五項之外的模型仍可繼續顯示在主選擇器中,也可透過精確 id 呼叫。

所有普通路由模型的 priority 都是 5,因此需要處理並列順序。在建立目錄條目之前, gatherRoutedModels() 會先按 provider 名稱、再按模型 id 對路由模型列表進行字母排序 (src/codex/catalog/provider-fetch.ts)。

因此,以下設定順序不會影響最終順序:

  • providers 物件中各 key 的宣告順序;
  • 每個 provider 的 models 陣列中各 id 的排列順序。

隨後,orderForSubagents() 使用穩定排序,把 featured 模型按 subagentModels 中的順序移到最前。 非 featured 模型會保持之前確定的 provider/id 字母相對順序 (src/codex/catalog/sync.ts)。建立條目時,featured rank 還會轉換為 04 的 priority,因此 Codex 的 priority 排序會保留這個開頭序列。

selectedModelsdisabledModels 只決定暴露哪些路由模型,不控制排序。 filterCatalogVisibleModels() 會把兩類選擇轉換為 Set 查詢,並在不把陣列當作 rank 的情況下過濾 已收集的列表(src/codex/catalog/provider-fetch.ts)。

因此,調整 selectedModelsdisabledModels 的陣列順序不會改變模型在選擇器中的位置,只會 影響模型是否包含在內。

featured 列表非空時,最終順序為:

  1. 嚴格按照設定的 subagentModels 順序排列,priority 為 04
  2. 所有剩餘路由模型,先按 provider、再按模型 id 的字母順序排列,priority 為 5
  3. 在目錄合併過程中被移到 featured 區塊之後的未選中原生模型。

如果沒有 subagentModels,路由模型保持 priority 5,原生 GPT 條目使用正常 priority (opencodex 建立的條目通常為 9),路由組內部仍按 provider/id 字母排序。

假設 subagentModels 按以下順序包含五個 id:

subagentModels = [
"gpt-5.5",
"opencode-go/glm-5.2",
"anthropic/claude-opus-4-6",
"gpt-5.6-sol",
"gpt-5.6-terra",
]

選擇器開頭的實際順序如下:

選擇器位置 模型 Priority 出現在此處的原因
1 gpt-5.5 0 第一個 subagentModels 選擇
2 opencode-go/glm-5.2 1 第二個選擇,即使其 provider 在字母順序上位於 anthropic 之後
3 anthropic/claude-opus-4-6 2 第三個選擇
4 gpt-5.6-sol 3 第四個選擇
5 gpt-5.6-terra 4 第五個選擇
6 anthropic/claude-fable-5 5 剩餘路由模型中按 provider/id 字母排序的第一項
第 7 項起 其餘路由模型 5 先按 provider 字母排序,再按模型 id 字母排序
路由模型之後 其餘原生模型 featured.length + 100 或更高 未選中的原生模型移到 featured 區塊之後

前五個條目是向 spawn_agent 公佈的 override,其餘模型繼續按普通選擇器順序排列。

要調整 spawn_agent 候選模型的順序,請重新排列 subagentModels。你可以在儀表板的 Sub-agents 頁面或 opencodex 設定中修改它。該列表最多接受五個模型,其陣列順序有實際意義。

modelPickerOrder 只控制選擇器的顯示順序。如果列表只有路由 ID <provider>/<model>, 其中未置頂的列會按列表順序進入獨立的顯示區間(1000 + i)。未列出的路由列保留原有優先級, 因此仍排在該區間之前。同時列在 subagentModels 中的列保留置頂優先級,原生列也維持原有位置。 需要控制相對順序的路由列都應列入列表。

要對整個選擇器排序,請加入至少一個不含 / 的裸目錄 ID,例如 gpt-5.6-sol。 空字串或只有空白的項目不會啟用此模式。

{
"modelPickerOrder": ["gpt-5.6-sol", "opencode-go/glm-5.3"]
}

列出的項目按陣列順序排在最前面,未列出的項目隨後按原有優先級排列。比對使用精確的目錄 ID: gpt-5.6-solopenai/gpt-5.6-sol 是不同的列。同一路由 ID 的原始寫法和編碼寫法也可比對, 但精確比對優先於等價比對。空項目和只有空白的項目會被忽略。帳號限定列必須使用包含 selector 的完整 ID。

遷移提醒:現有列表中的原生 ID

Section titled “遷移提醒:現有列表中的原生 ID”

以前 modelPickerOrder 中的裸原生 ID 會被忽略。現在,現有列表只要包含這類 ID,就會啟用 整個選擇器的排序,包括置頂列。要保留以前只調整路由列的行為,請移除裸 ID。 未設定、空列表、只有空白項目的列表以及只有路由 ID 的列表都保留原有行為。

modelPickerOrder 保留 OpenCodex 按原有優先級計算最多五個偏好候選項的規則,供子代理指引使用。 每個移動列的原有優先級與原生 priority 分開儲存;僅改變選擇器順序不得改變這項計算結果。 它也不會限制以精確模型名稱指定 override 的資格:公佈的列表不是允許清單,既有的驗證、模型、 effort 與後端限制仍然適用。

原生 Codex 按原生 priority 排序,從符合條件且在選擇器中可見的模型中取前五個,公佈在 spawn_agent 中。這適用於 V1,以及開放模型 override 的 V2。因此,即使 OpenCodex 的偏好候選項 不變,原生公佈的五個模型仍可能隨選擇器順序改變。V1 不接收 OpenCodex 注入的偏好模型列表。 V2 在用戶端目錄狀態允許時,可以額外接收基於原有優先級的 OpenCodex 指引;這些指引不會重排 原生工具公佈的列表。

disabledModels 和各供應商的 selectedModels 仍是可見性欄位。沒有獨立的 modelOrderproviderOrder 或優先級對應表設定。

Models 選擇預設、依模型名稱 A–Z、依供應商或使用量快照,再套用順序。儲存目前可用的路由 ID 和 modelPickerOrderModealphabeticalprovidermost-used)。使用量排序僅在套用時讀取一次保留的全部歷史;重新開啟或模型增減不會重新計算。現有自訂與原生完整順序會保留,直到明確套用替換。即使沒有可用模型,預設也能清除兩個欄位。

GET/PUT /api/subagent-modelschosenavailable 保留停用或缺少的已存 roster;pickerAvailable 僅包含可選路由 ID。Models 只傳送 pickerOrderpickerOrderMode,不傳送 models。只儲存 roster 不影響排序;無效輸入或儲存失敗會保留原狀態。

預設保留精選與原生優先級區間,套用於 Codex 目錄和 Claude 探索清單的路由群組。Claude 原生前綴、明確的 Desktop 設定及 alias 歸屬不變。OpenCodex 指引排序和 fallback 設定不變,但原生 Codex 工具顯示的前五個候選與建議預設模型可能改變。儲存不會重新啟動用戶端;目錄更新可能尚未完成,舊清單可能需要重新開啟用戶端。