第八節 模型與參數

8.1 模型選擇

設置 → 模型 列出所有可用模型:

  • 共享額度下可見的模型(由組織決定)
  • 你自己接入的模型(OpenAI / Anthropic / 阿裡雲通義 / 火山方舟 / 自建大型語言模型服務等)

每個工作區可以指定預設模型;每次對話也可以臨時切換。

8.1.1 Provider 協議

設置 → 提供商 編輯面板「類型」下拉支持三種協議:

類型 適用場景
AVL Delta 相容 內置 AVL-Zero 預設就用它;每輪只把"本輪新增內容"發給伺服器端,穩定歷史不重復回傳,配合前綴快取治理進一步省流量、省 token、提速
OpenAI(相容) OpenAI 官方接口、阿裡雲通義、火山方舟、Kimi、Moonshot、DeepSeek、自建 OpenAI 相容代理等
Anthropic Claude 官方接口、Anthropic 相容代理 — 用 x-api-key + anthropic-version 頭,支持工具呼叫、串流、思考鏈(extended thinking)、重試

「從 API 重新整理模型」按鈕會按所選協議自動派發,正常拉取對應模型列表。

Delta 端點自動安全降級:如果伺服器端暫未提供 Delta 接口(傳回 404/405/501),本次工作階段會自動一次性復原到標準的 chat/completions 協議,對話不中斷;真正的驗證類錯誤(401/403)則照常報錯,不會被降級掩蓋。

統計面板會顯示每次呼叫走的是哪種協議(OpenAI Chat / Anthropic Messages / AVL Delta)以及當時的用戶端版本號;發生 Delta 自動降級時,元訊息裡也能看出來。所有發往模型服務的請求都帶上了用戶端版本、協議識別與一個類瀏覽器 User-Agent,便於閘道側記錄檔與統計對賬。

8.1.2 自定義請求標頭(僅限自己新增的供應商)

設置 → 提供商 編輯面板底部的「進階選項」可展開,對於你自己新增的(非內置)供應商,新增了「自定義請求標頭」編輯區:可增刪多組 key / value,隨每次發往該供應商的請求逐條帶上,方便對接需要額外驗證頭、閘道識別或特殊版本頭的服務。

  • 生效範圍:OpenAI、Anthropic、AVL Delta(串流 + 非串流)四類請求路徑全部生效。
  • 順序與覆蓋:自定義頭在內置頭(驗證 / User-Agent / anthropic-version 等)之後應用,可覆蓋 Authorization / User-Agent 等預設頭;如果你不希望覆蓋,請避開同名 key。
  • 防注入:自動跳過空 key,並拒絕 key / value 中含換行(CR/LF)的條目,防止請求標頭注入。
  • 已知限制:自定義 Host 頭不生效(Go HTTP 堆疊要求改 req.Host 而非頭本身),如需改 Host 請通過反向代理實現。

內置供應商(AVL-Zero 等共享額度)不暴露此入口,僅自定義供應商可編輯。

8.2 參數

每個模型可調參數:

  • Temperature:溫度,0–1,控制隨機性。
  • Top-P:核採樣上限,0–1。
  • 最大輸出 Token:單次回復長度上限;無硬性上限,可超出模型標稱值,以上游實際限制為準。
  • 串流:是否串流繪製(推薦啟用)。

參數同樣按工作區與模式分別儲存。

以上參數統一在「參數配置」抽屜裡編輯 — 從「模型」頁和「模型提供方」對話框進入的是同一個面板。收斂到唯一編輯面是有原因的:此前兩處編輯面各存一份、互相覆蓋,改好的參數會被靜默抹掉;現在兩處同時修改按樂觀鎖校驗,衝突就近提示而不是無聲覆蓋。

8.2.1 模型作用域:全域一致 / 跟隨工作階段

設置 → 模型 Tab 頂部提供分段開關,選擇當前模型的作用範圍:

作用域 行為
全域一致(預設) 所有工作階段共用一個「當前模型」,升級零感知
跟隨工作階段 每個工作階段各自記住自己的模型,切到哪個工作階段就切回該工作階段上次用的模型;新增工作階段時快照當前全域選擇作為起點,之後獨立可改

「跟隨工作階段」模式下若工作階段記的模型已失效(被刪 / 下線),自動回落到全域選擇,不會卡住。

複製工作階段 / .zsession 匯入匯出都自動帶上模型欄位,跨設備 / 跨人交接不丟。匯出 .zsession 時一並打包子 Agent 工作記錄 — 主對話裡派出去的每個子任務當時怎麼做的、調了什麼也都會還原出來,跨機或發同事開啟後排查 / 復盤更完整。

匯入 / 重建更穩:修了「把工作階段匯入到新增工作區後不顯示、空白工作區卻誤報『已存在』」的問題(根因是寫入目標錯位 + 沿用原工作階段 ID 造成同 ID 跨工作區衝突),現在匯入 / 重建都能正常完成。

8.2.2 未啟用模型預設折疊

設置 → 模型 每個供應商分組預設只顯示已啟用的模型,不再被一長串沒開的型號淹沒;組底部有「展開 N 個未啟用的模型」按鈕,點開看全部、可再收起。

  • 展開狀態按供應商各自記憶(僅本次開啟期間)。
  • 搜尋時自動繞過折疊:搜尋命中的未啟用模型照常顯示,不會被藏住。
  • 開關切換過程中行不閃跳

8.2.3 模型 ID 中的斜槓原樣保留

openrouter/freeopenai/gpt-4oanthropic/claude-3.5-sonnet 這類 OpenRouter / Cloudflare 等使用的 vendor/model 命名方式,斜槓是上游官方分隔符。AVL Code 現在原樣保留 — 手動新增與重新整理兩條路徑都不會把斜槓改成連字元。

此前若你新增這類模型遇到「模型不存在」的報錯,重新整理一次模型列表即可復原(舊的壞條目會被換成正確的 ID)。

8.3 多供應商兜底

如果你接入了多個供應商,AVL Code 支持設置優先級與兜底:第一供應商失敗 / 限流時自動切到第二供應商,避免單點。

8.4 上下文長度與折疊

不同模型上下文長度不同。AVL Code 會在接近上限時自動觸發歷史折疊(見第十七節),把早期訊息壓縮為摘要,確保對話可以無限延續。

8.5 自修正循環:發生錯誤自動換思路

AI 遇到錯誤時會按錯誤類型自動換政策接着自愈,而不是一條道走到黑。這套機制始終啟用、無需配置;自愈過程往對話裡注入的結果型內部訊息(auto_self_heal)不會顯示在對話中,你看到的仍是乾淨的正常輸出。上游報錯會先分流來源(請求側 / 閘道 / 上游供應商)與類別(認證 / 限流 / 配額 / 餘額 / 無可用通道 / 過載 / 伺服器端錯 / 上下文超限 / 內容被安全過濾等),再對症選擇修正政策:

修正政策 適用情形 處理方式
壓縮重試(transient_compact) 上下文超限 先折疊壓縮上下文再續跑(預設最多 2 次)
切換供應商(transient_fallback) 無可用通道 / 上游過載 / 上游認證失敗 掛起並提示切到備用供應商,確認後接着跑(預設最多 3 次,見 §8.6)
退避重試(backoff) 限流 / 超時 / 網路抖動 按退避節奏自動重試(預設最多 3 次)
交還你決定(terminal) 餘額不足 / 需重新登入 / 模型不存在 直接給出明確提示並停下,不盲目重試

即使伺服器端 5xx / 4xx 沒有錯誤詳情,也能憑狀態碼兜底走對應的自愈路徑。除了上游報錯,AI 自身產出的問題也會自愈:

  • 回復被長度截斷會自動從截斷處續寫(不重頭來),預設最多 3 次。
  • 思考繞圈(反復重復同一段推理)會被打斷,提示直接給結論或採取下一步動作。
  • 回復被內容安全過濾會換個表述自愈。
  • 工具名不合規被上游拒絕時,會自動修正工具名後重試(幾種上游措辭——包括散文式報錯——都能識別)。
  • 同一處檢查 / 測試反復失敗待辦長時間無進展時,會升級提示讓 AI 換思路(如考慮復原本次改動重來),而不是反復撞牆;到達上限後停下交還給你。

網路抖動專門優化:網路瞬斷 / 臨時掉線時會自動等網路復原再接着重試,而且這種「等網路回來」的等待不消耗重試次數——出門進電梯、Wi-Fi 抖一下這類情況不會平白把重試預算燒光。連線被重設、域名一時解析不了、交握中斷等連線級瞬斷也能被正確識別為網路問題,不再被籠統報成「模型發生錯誤」,省得你白去查上游配置。

自愈也會從歷史裡學習(見 §8.5.1):每類自愈的成敗會被記錄,下次據此動態調整允許嘗試的次數——歷史上幾乎沒救回來的,少試兩次就盡早交還給你;還能救的也不輕易放棄。

8.5.1 自愈次數隨歷史動態調整

自修正會參考過去的自愈成敗記錄(落盤在設定目錄的 self-heal-stats.json),對每一類自愈動態調整本次允許的嘗試次數:樣本不足(< 5 次)時用預設上限;歷史平滑成功率 < 20% 壓到 1 次、20–50% 減 1 次、≥ 50% 用滿預設。每類至少保留 1 次嘗試,歷史只會調低、不會調高於預設上限。

8.6 供應商自動備選(需確認)

當某個模型供應商持續不可用(無可用通道 / 上游過載 / 上游側認證失敗)時,AVL Code 不會靜默切換、也不會卡住,而是掛起本輪並在輸入框上方彈出一條切換確認條

  • 只會切到同一個模型的另一個已啟用供應商(按配置順序選第一個真正包含該模型的,絕不降級到別的模型)。
  • 確認條文案形如「切換備用模型? 首選 {A} 暫時不可用,可改用 {B}(模型 {M})重試本輪」,並提示「⚠ 備用通道可能走你自己的 key(產生你的費用),或把內容發往不同上游」。
  • 點「切換並重試」即用新供應商無縫接着跑;點「不用」則放棄本次切換。