模型能力在 ZCode 中是一条独立核心能力,横跨根 packages/provider、packages/provider-node、packages/model-option-map 与 CLI 侧 adapters/src/model、bootstrap。它不属于 agent-core,也不与账户权益合并。
Provider / Model 建模
Provider 是”名 / 模板 / 访问方式(apiKey 或 zhipu-account)/ api(baseUrl+headers)/ 模型列表 / 顺序 / 可见性”的配置;Model 是”开关 / 能力属性(contextWindow、输入输出格式、toolCall、webSearch 等)/ optionSpecs(reasoningLevel、maxOutputTokens)“。
provider(抽象层)
registry.ts:47ProviderRegistry:维护不可变ProviderRegistryView(revision + providers)与 providerId/modelId 索引;validateSelection()返回结构化校验结果(provider-not-found / model-not-found / reasoning-level-*)。resolver.ts:168Provider、resolver.ts:163ProviderModel:把分层配置解析成完整 Registry 配置。sources.ts:ProviderSource<TSnapshot>抽象 +ProviderConfigSnapshot(zcodeBuiltin + personal 双 revision);createFailClosedAccountProviderConfigSnapshot在首次 Account 事实到达前对zhipu-accountprovider 生成”未授权” fail-closed overlay。facades.ts:ProviderRegistryFacadeSource+ProviderSettingsMutationTarget,统一 Settings/Selection 的投影与写入边界。
provider-node(Node 实现)
- 内置 Provider 从受信来源下载 + 缓存:
zcode-builtin-provider-config-source.ts/-release.ts/-download.ts/-remote-synchronizer.ts、endpoint-scoped-zcode-builtin-source.ts - 个人 Provider 落本地文件仓库:
personal-provider-config-repository.ts、provider-config-file-codec.ts - 两者合成运行时 Registry:
provider-config-runtime.ts、provider-registry-runtime.ts、model-selection-config-repository.ts、runtime-paths.ts
模型选项 DSL(model-option-map)
@zcode/model-option-map 用受限 CEL 表达模型选项映射,而非硬编码分支:
types.ts:RestrictedCelProgram/ModelOptionMapProgram,ModelOptionName = "reasoningLevel" | "maxOutputTokens"tokenizer.ts/parser.ts/compiler.ts/evaluator.ts:受限 CEL 实现merge-patch.ts:JSON merge-patchoption-maps.ts:内置映射
@zcode/shared 与 @zcode/provider 都依赖它。
CLI 侧模型执行
- Provider Registry + ModelFactory:
bootstrap/src/app/provider-registry-model-runtime.ts:43的ApiProviderModelRuntime.modelFactory校验 selection,查 provider/model,再用AiSdkModelAdapter.createModel创建 Model。 AiSdkModelAdapter:在模型创建时冻结 provider static snapshot;请求期只允许动态覆盖 API key/header。支持 API 类型映射为 OpenAI Responses、Anthropic Messages、OpenAI-compatible。runStreamText(adapters/src/model/runner.ts:85、runner-stream.ts:96):负责 admission、SSE idle timeout、重试预算、provider business error、stream diagnostics、tool-call assembly 与ModelStreamEvent归一化。- 默认 headers:版本、release channel、语言、时区、平台、
X-ZCode-Agent等;网络代理/CA/endpoint routing 都在 adapter 层集中处理(bootstrap/src/model-config.ts:50)。 - Provider 事实冻结:这是刻意设计——避免 Registry 热更新让已创建 Model 静默切 endpoint。
模型能力边界
Provider Registry
│
▼
Model Catalog & Capabilities
├─ Reasoning & Tool Capabilities
├─ Multimodal Capabilities
└─ Context & Output Limits
│
▼
Model Selector
├─ 发送消息 / 当前会话
├─ 子智能体配置(Subagent Profiles)
├─ 定时自动化
└─ 闲时任务 / 机器人- 模型目录拥有
contextWindow、maxOutputTokens、输入输出模态、reasoning、tool call、structured output 等能力事实。 contextWindow - maxOutputTokens决定输入预算与 compact 阈值(见 agent-core),输出上限也进入 provider adapter 请求。- 模态 schema 可描述 text/image/video/audio/PDF;当前 Agent 请求链已对 image、video、PDF 做能力 gating,audio 仍未交付。
- 各入口(会话 / 自动化 / Subagent)可复用候选构建与 UI 组件,但草稿与提交状态必须隔离。
账户 / 网关转发
- OAuth、Credential、Coding Plan、Usage、Quota 影响 provider 可用性与额度,但由”账户与权益”独立维护,通过关系边连接。
NOTICE.md记录:对两个官方 Anthropic 兼容模型端点,命中特定协议/主机/端口/路径时自动改发 ZCode 网关,保留请求方法/正文/查询/请求头(含认证信息),无额外逐次用户确认;实际 gateway origin 可由ZCODE_BASE_URL/ZCODE_ENDPOINT_ORIGIN改变。
相关页面
- agent-core — 模型调用如何嵌入 turn
- tool-system — 模型产生的 tool call
- plugin-system — Provider 相关插件与设置