Go 与 Zen 模型 API
选用正确的模型命名空间、协议端点和 Jev 决策接口。
OpenCode 配置里的 provider/model 与模型服务请求中的模型 ID 不同。Zen 配置前缀是 opencode/,Go 为 opencode-go/;直接 API 请求按对应模型表使用不带此前缀的 model ID。
模型列表与基础路径
| 服务 | 模型列表 |
|---|---|
| Zen | https://opencode.ai/zen/v1/models |
| Go | https://opencode.ai/zen/go/v1/models |
列表提供可用模型与元数据。不能仅把 Go 的 URL 换为 Zen 就假设所有模型、额度和协议相同。
按模型选择协议
| 协议 | Zen 路径 | Go 路径 | 官方列出的 SDK 包 |
|---|---|---|---|
| Responses | /zen/v1/responses | /zen/go/v1/responses | @ai-sdk/openai |
| Messages | /zen/v1/messages | /zen/go/v1/messages | @ai-sdk/anthropic |
| Chat Completions | /zen/v1/chat/completions | /zen/go/v1/chat/completions | @ai-sdk/openai-compatible |
| Gemini 模型端点 | /zen/v1/models/<model-id> | Go 表未列此类 | @ai-sdk/google |
| System One | /zen/v1/systemone | Go 表未列此类 | Zen 表未指定 AI SDK 包 |
这些路径的域名均为 https://opencode.ai。协议必须按模型表核对,不能按模型家族一概推断。例如核验时 MiniMax M3 在 Zen 表使用 Chat Completions,在 Go 表使用 Messages;Qwen3.8 Max 的两个服务表也列出不同协议。
Jev 结构化决策
Jev 通过 System One 对给定 state 回答类型化问题,返回数值与概率,而不是普通自由文本。Zen 页列出 noul(是/否)、choice(多选一)和 score(量表)三类。
下面演示将任务状态交给一个二元判断;Key 从环境变量读取:
curl https://opencode.ai/zen/v1/systemone \
-H "Authorization: Bearer $OPENCODE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jev-1.13",
"state": "The build failed and the release is blocked.",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "Does this task require urgent attention?"
}
}
}'多个问题可放在同一 questions 对象,服务并行判断后按问题 ID 返回。choice 的 criteria 使用选项说明映射,score 示例使用有序描述数组。官方还列出限时免费 ID jev-1.13-free;可用性以当前服务为准。
Jev 模型服务与 OpenCode SDK 的结构化输出工具是两类接口,不应混用其请求体。