Files
ycode/docs/自定义模型与多协议接入-2026-10-18.md

14 KiB
Raw Permalink Blame History

自定义模型与多协议接入(2026-10-18)

实施结果

本轮完成用户提出的五项模型设置调整。按用户定制需求实现,未查看或采集 WorkBuddy,不新增原版等价或全状态 1:1 验收结论。保留当前工作区的设置性能、附件、上下文用量和沙盒并行修改,未重启用户正在使用的 YCode。

需求 当前行为
供应商仅自定义 添加、编辑和列表统一显示“自定义”;已有配置和密钥继续可用。原供应商资源仍供其他界面的模型图标使用。
多协议 自动协商、OpenAI 兼容、Anthropic、Gemini;OpenAI 内含 Chat Completions 和 Responses 两种 API。正式对话和备用 HTTP 网关均按协议构造请求。
仅填写域名 自动补全 HTTPS,localhost/127.0.0.1/IPv6 回环默认 HTTP;保留完整地址兼容,协商常用版本路径和根路径。原来未声明协议的配置保持旧 OpenAI 路由。
获取模型 按当前地址、协议和新填/已有 Key 请求模型列表,支持分页、去重、单选、搜索和手动输入。Gemini 排除不支持生成内容的模型。空列表、没有列表 API 时仍可手动配置。
模型元数据 内置完整 models.dev 快照,按精确 ID、供应商前缀及明确的 canonical ID 匹配,填入能力、思考、总上下文和输出;输入预算动态扣除输出,原始上限继续用于校验。用户手动配置在编辑和重新打开后保留;未知 ID 不猜测能力。

新连接在保存前发送一次简短生成探测,表单已说明该行为。模型列表成功只能证明列表 API 可用,不能代替生成协议验证;正式路由保存验证结果。获取列表不会覆盖原来已验证的 Responses 等生成路由。迟到的列表、元数据或测试响应不能覆盖后续编辑。

最新总上下文语义订正

用户确认第一项是总“上下文”,第二项是“输出”;输入预算和压缩阈值动态计算,见总上下文预算与压缩阈值。500K/128K现为500,000总窗口、128,000输出、372,000输入预算,压缩阈值372,000;上一轮628,000的相加逻辑已修正。已接真实OMP独立配置,安装内核读取阈值正确。完整构建、预算13项、原生14项、模型能力22项、旧配置迁移/冷加载及真实隔离应用104项通过,未重启用户窗口。

本日后续界面调整

  • 对话、项目和定时任务中的“配置自定义模型”统一打开模型列表;只有明确的添加操作打开添加表单。
  • “更新元数据”移动到“设置 → 关于”,显示来源及快照日期,调用既有真实更新服务并反馈成功或失败。模型列表不再显示更新入口。
  • 移除“此接口无需 API Key”开关和相关提示。新建时 Key 为空即按免密接口处理;编辑已有密钥时只显示圆点占位,未编辑则保留,清空后可改为免密。
  • 模型名称使用可编辑搜索下拉框,同一个输入框支持筛选、键盘单选及手填;下拉框与整个输入框左边缘和宽度对齐。修复浮层定位与入场动效冲突,以及获取列表后过早打开的竞态。
  • 移除“已匹配 models.dev…”及最低参考价格等说明。最新表单仅保留“上下文”和“输出”两项,输入预算动态计算;后台继续匹配元数据、选择价格档并校验原始上限。
  • OpenAI 兼容的新协商默认优先 Responses,成功后不再探测 Chat;Responses 不受支持时继续尝试 Chat。自动协商中的 OpenAI 候选也采用该顺序,明确填写 /chat/completions 的地址仍优先 Chat。重新测试已有 OpenAI 配置时也按新顺序探测,并保留协商出的自定义根路径;普通对话继续使用保存的接口或更新的成功探测结果,未声明新协议的旧模型仍沿用原兼容逻辑。

最终 npm run build 通过。最新真实隔离应用验证 78 项通过、0 renderer 错误,报告 .tmp/custom-model-settings-EeOtQT/report.json;四种协议的正式调用、空 Key、保留/清空已有密钥、搜索/手填、浮层宽度/位置/稳定态可见性、移除文案和字段、关于页实际更新服务均覆盖。关于与帮助布局 21 项通过(.tmp/about-help-settings-Hk3bkH/report.json),设置生命周期 26 项通过、0 renderer 错误(.tmp/settings-performance-JpGssO/report.json)。已查看最新浅色参数表单、深色展开列表及关于页截图。

本次界面调整后未强制重启用户正在运行的 YCode,重新启动后加载最新构建。本轮未采集 WorkBuddy,不新增原版逐像素验收结论。下方验证表保留本日原功能实现时的基线。

Responses 优先调整后的完整构建通过(.tmp/responses-priority-build.log)。模型注册回归验证两种接口都支持时只请求 Responses、仅 Chat 时回退、显式 Chat 地址、旧 Chat 自定义根路径重新测试、历史协议及原有加密/持久化/错误处理(.tmp/responses-priority-registry.log);原生多协议回归 14 项通过(.tmp/responses-priority-protocols.log),真实隔离应用 78 项通过、0 renderer 错误(.tmp/custom-model-settings-EciOBY/report.json)。未调用用户实际 API 或重启用户当前窗口。

500K快捷项首轮实现(历史,已由上方订正)

  • 输入新增 500K = 500,000 tokens,输出新增 128K = 128,000 tokens。新项使用明确标签与精确值,避免按 1024 生成 131,072 而超出模型目录的 128,000 输出上限;原有快捷项数值保持兼容。
  • 元数据同时保留模型原始输入/输出/总上下文上限及完整价格档。自动匹配仍优先低价档;手动输入超出该窗口时,总上下文同步为足以容纳输入和输出预算的值。以 GPT-6.1 Sol 为例,选择这两项后保存 500,000 输入 / 128,000 输出 / 628,000 总上下文,参考价格切换至对应长上下文档。
  • 前端与主进程使用同一预算解析。目录不支持的快捷项禁用,手填超出单项或总上限时阻止保存;已保存值不会被失败操作覆盖。缩小大预算后可恢复自动低价档与窗口。
  • 编辑已有配置时更新原始元数据,但保留手动输入、输出与能力。保存、重新打开及新的主进程加载均保留预算;新回合的 OMP profile、真实请求输出预算和上下文统计使用同一配置。

本轮完整构建通过(.tmp/model-budget-build.log)。元数据与预算 12 项通过(.tmp/model-budget-metadata.log),模型注册/冷加载/无效写入保护通过(.tmp/model-budget-registry.log),上下文用量回归通过(.tmp/model-budget-context.log),原生 HTTP 多协议 14 项通过(.tmp/model-budget-native.log)。真实隔离生产应用 99 项通过、0 renderer 错误,报告 .tmp/custom-model-settings-D1Jj9H/report.json;实际读取 OMP profile 确认 contextWindow: 628000、maxTokens: 128000,受控 Responses 请求确认 max_output_tokens: 128000,统计分母为 628,000。已查看 custom-editor-500k-128k-light.png,两列新增选项完整显示且选中样式正常。

验收使用短提示和本地受控上游,验证配置、参数与统计链路;没有发送 500K 内容到用户实际收费服务,不能据此断言供应商实际限额。本轮未重启用户当前窗口、未采集 WorkBuddy,重启加载最新构建后可选择新项。

元数据快照与价格选择

  • 来源:models.dev API、公开仓库。数据和 MIT 许可证保存在 resources/model-metadata/,包含打包资源。
  • 获取时间:北京时间 2026-10-18 06:29:14(UTC 2026-10-17T22:29:14.523Z)。
  • 数量:232 个供应商,9,041 个模型,5,796,868 字节。
  • SHA-256:5980b554323ea4f118b06b960dde1eeb193f5bfa4722d6127fb3966d77195a1c。
  • 获取时仓库 revision:8deeec23540f4c0e2c473be7f08130366e662c78。记录的是获取时仓库状态,不将其当作 API JSON 与该提交的一一构建映射。
  • “设置 → 关于”的“更新元数据”会校验并原子缓存新快照;更新失败保留可用数据。启动时在有效缓存与随包快照中选较新的版本,避免旧缓存覆盖新安装包。
  • 维护命令:npm run models:sync-metadata。

同一模型优先采用其原供应商元数据,不为更低的代理报价切换供应商。上下文阶梯的 tier.size 按下限处理;默认上下文不越过所选低价档的上界。例如 GPT-5.4 默认为 272,000 总上下文和 128,000 输出上限,输入预算派生为 144,000,参考输入/输出价格为每百万 token $2.5/$15。

若某档输入更便宜、输出更贵,另一档相反,则不存在与 token 比例无关的“最便宜档”。此时默认最小上下文档,并在内部元数据中保存选择依据。所有价格均为目录参考值,不能保证自定义服务实际收费;页面已按用户要求移除这些说明。

预算型思考模型使用已验证的 minimal(极低)档作为可行默认时,对应原生预算为 1,024 tokens;只有开关、没有离散强度的模型采用自动强度。选择器与请求共用强度解析,禁止把旧模型不支持的强度传入新模型,也不会关闭目录声明为必须开启的思考模式。

正式调用、鉴权与持久化

  • 主进程保存协议、协商路径、能力、限制和元数据来源。密钥继续使用已有的安全存储,预加载和界面只返回脱敏信息;编辑时未触碰密钥框则保留,明确清空则按免密保存。
  • OMP 原生 Anthropic 自定义域名默认会附加 Bearer。现在通过受支持的环境变量请求头配置发送原生 x-api-key,同时关闭自动 Bearer;密钥不会写入 YAML 或命令行。
  • Gemini 使用 x-goog-api-key 和 generateContent / SSE streamGenerateContent,不要求用户拼接查询字符串。
  • OMP 的免密 Gemini 分支会附加 N/A 占位 Key,因此这种配置明确走原生 HTTP 网关。真实生产应用已验证免密 Gemini 成功对话且没有鉴权头。
  • 同源路径协商不跟随跨源重定向携带凭证。模型列表和生成探测均有时间与响应大小上限。
  • 备用网关处理原生图片、工具、思考、usage 与同一工具循环中的签名;截断、输出上限和流错误不会被当作可执行的完整工具调用。
  • 总上下文进入原生 profile 和用量分母;原生 Gemini 请求也接入已有的系统/工具/消息分类观测。

验证

最终完整 npm run build 通过,含原生沙盒编译、Node/Web 类型检查和 Electron 构建。当前任务相关文件的 git -c core.whitespace=cr-at-eol diff --check -- <files> 通过;全工作区仍有并行 src/main/sessions.ts 的末尾空行提示,未为此修改他人文件。

验证 结果与证据
实际 UI → preload/IPC → 正式内核/HTTP → 受控上游 72 项通过,0 renderer 错误,.tmp/custom-model-settings-vu41wD/report.json。覆盖四种 API 获取列表、自动参数、严格鉴权、保存及正式对话;核对实际请求强度和上下文分类;覆盖免密 Gemini、旧密钥查询、手动覆盖、空/无列表、过期响应以及浅色/深色布局。
真实 OMP 原生协议 npm run test:custom-models:14 项通过,.tmp/custom-model-core-final.log。Anthropic API Key/免密、Gemini API Key 实际回合通过;免密 Gemini 明确使用备用通道。
原生 HTTP 网关 npm run test:custom-model-native:14 项通过,.tmp/custom-model-native-final.log。分页、签名/工具续接、用量、错误与截断、免密、现代 OpenAI 输出预算和 Gemini 原生强度参数。
元数据服务 npm run test:model-metadata:7 项通过,.tmp/model-metadata-final.log。新旧缓存、校验失败回退、更新落盘/失败保留、canonical 匹配、交叉价格和强度解析。
既有模型档案 scripts/model-registry-regression.ts 通过,.tmp/model-registry-final.log。迁移、加密 CRUD、并发写入、选择/重载、空密钥及探测失败脱敏。
既有 Responses 网关 scripts/gateway-responses-regression.ts 30 项通过,.tmp/custom-model-responses-final.log。旧 Chat 路由和参数保持兼容。
既有原生模型能力 22 项通过,.tmp/model-capabilities-gYrRP5/report.json。
设置性能与生命周期 26 项通过,.tmp/settings-performance-OujUBI/report.json。默认通用内容首开 283ms、重开 25~53ms;当前轮并行测试环境,不将其作为用户机器固定耗时。
对话与持久化 test:omp、test:chat、test:persistence、test:conversation-ipc、test:conversation、test:context-usage 通过。旧测试替身补齐强度设置契约,并断言非思考模型确实在 prompt 前关闭思考。
定时任务兼容 test:automations 19 组通过;允许保存新增的 auto/minimal 强度。

截图位于 .tmp/custom-model-settings-vu41wD/:浅色/深色表单、能力与上下文、400px 模型列表。已实际查看最新构建的高级参数和深色模型列表截图,确认可滚动到高级参数、完整显示模型 ID、主题与输入排版正常。

验收使用隔离 userData、构建快照、真实 Electron 和已安装 OMP,只请求本地受控模型服务。未调用用户内网 API 或收费云端模型;自定义服务的非标准路径需手动填写完整地址,任意厂商私有参数、备用网关跨回合签名历史和生产云端全状态仍需针对对应服务验收,不能由本轮协议契约测试推断全部等价。

本轮含 main/preload 修改。保存草稿后完整退出并重新启动 YCode,才会加载全部改动;没有强制关闭当前用户窗口。