第八节 模型与参数

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(产生你的费用),或把内容发往不同上游」。
  • 点「切换并重试」即用新供应商无缝接着跑;点「不用」则放弃本次切换。