⚙️ SenseNova 模型接入配置

商汤的模型服务,兼容 OpenAI 和 Anthropic 两套协议。agent 都不默认支持,需要手动写 provider 配置。

🔌 接口

认证走 Authorization: Bearer $SENSENOVA_API_KEY(sk- 开头,控制台 token-plan 申请)。每个 agent 单独一把 key,方便监控和轮换。

协议EndpointbaseURL 填什么
OpenAI Chat CompletionsPOST /v1/chat/completionshttps://token.sensenova.cn/v1,带 /v1
OpenAI ResponsesPOST /v1/responses同上,带 /v1
OpenAI 图像POST /v1/images/generations、/v1/images/edits同上,带 /v1
Anthropic MessagesPOST /v1/messageshttps://token.sensenova.cn,不带 /v1
模型列表GET /v1/models—

最大的坑:OpenAI 侧要带 /v1,Anthropic 侧不能带。Anthropic SDK 自动拼 /v1/messages,重复了变成 .../v1/v1/messages,直接 404。

📋 模型清单

官方目前共 7 个模型(文档侧栏与 models-overview 一致,2026-09-26 核对)。

🤖 对话 / Agent 模型

配进 agent 对话槽位用这批。

Model ID定位输入上下文单次输出上限
sensenova-6.8-flash-lite轻量多模态 agent 模型,数据分析 + 复杂信息呈现text, image26214465536
deepseek-v4-flashDeepSeek 高效经济型通用模型,V4 Flash 0731 GAtext1M64K(非推理模式默认 8K)
deepseek-flashDeepSeek V4.1 Flash,兼顾推理效率与成本text, image, video1M393216(默认 131072)
glm-5.2智谱旗舰开源,长程 coding + 复杂工程text1M128K(默认 64K)
kimi-k3月之暗面旗舰开源,2.8T 参数,原生视觉 agenttext, image1M1024*1024 - prompt_tokens(默认 128K)

全部支持 tools / json_mode / reasoning,量化 fp8。实际能力以 GET /v1/models 返回的 supported_features / input_modalities 为准。

容易搞错的几处:

  • deepseek-flash 才是 V4.1,ID 里没有 “v4.1”;deepseek-v4-flash 是 V4 Flash 0731 GA
  • video 输入只在 Chat Completions 接口支持,Anthropic Messages 和 Responses API 都不收 video
  • Kimi K3 用 max_completion_tokens 字段,不是 max_tokens
  • deepseek-flash 单次输出上限 393216(384K),比其他都高
  • max_tokens 超了不会报错,直接 finish_reason: length 截断,内容可能只剩一半

🖼️ 图像模型(U 系列)

不能配进 agent 的对话槽位——U 系列只做同步图像生成和编辑。

Model ID定位
sensenova-u1.5-lite生成 + 编辑一体,支持参考图,构图 / 光影 / 材质 / 细节更好
sensenova-u1.5-fast加速版,即时创作、高效修改

都是 Neo-unify 架构,走独立接口:文生图 POST /v1/images/generations,编辑 POST /v1/images/edits。

关键参数(两版相同):

  • size:宽高必须是 32 的倍数,512–4096,长宽比不超过 3:1。推荐 2048x2048、2720x1536、1536x2720、1664x2496、2496x1664(2K),4096x4096(4K)
  • n:只支持 1
  • watermark:每次都显式指定。公测期 false 免费,官方说明以后可能改默认值收费
  • response_format:b64_json(默认)或 url。url 返回的链接 24 小时过期,过期不可访问
  • output_format:png(默认)/ jpeg / webp
  • prompt_extend:默认 true 自动扩写 prompt,失败自动回退原文

这两个不是 Chat Completions 接口,也不接受 image 输入。

📡 接入状态

agent协议配置位置状态
OpenCodeOpenAI~/.config/opencode/opencode.json已配置
harnessOpenAI$DSH_HOME/settings.yaml待接

OpenCode

配置文件 ~/.config/opencode/opencode.json。Windows 是 C:\Users\你\.config\opencode\opencode.json——注意是 .config 不是 %AppData%,目录不存在要手动建。

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "sense-nova": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "SenseNova",
      "options": {
        "baseURL": "https://token.sensenova.cn/v1",
        "apiKey": "sk-xxx"
      },
      "models": {
        "sensenova-6.8-flash-lite": {
          "name": "SenseNova 6.8 Flash-Lite",
          "modalities": { "input": ["text", "image"], "output": ["text"] },
          "limit": { "context": 262144, "output": 65536 }
        },
        "deepseek-v4-flash": {
          "name": "DeepSeek V4 Flash",
          "modalities": { "input": ["text"], "output": ["text"] },
          "limit": { "context": 1000000, "output": 65536 }
        },
        "deepseek-flash": {
          "name": "DeepSeek V4.1 Flash",
          "modalities": { "input": ["text", "image"], "output": ["text"] },
          "limit": { "context": 1000000, "output": 393216 }
        },
        "glm-5.2": {
          "name": "GLM-5.2",
          "modalities": { "input": ["text"], "output": ["text"] },
          "limit": { "context": 1000000, "output": 131072 }
        },
        "kimi-k3": {
          "name": "Kimi K3",
          "modalities": { "input": ["text", "image"], "output": ["text"] },
          "limit": { "context": 1000000, "output": 131072 }
        }
      }
    }
  }
}

只需把 sk-xxx 换成你的 key。改完必须重启 OpenCode,只保存不生效。日常换模型用 /models 选,不用改这个文件。

两点说明:

  • deepseek-v4-flash 的 context: 1000000 不是 SenseNova 文档写的——SenseNova 没标这个模型的上下文。取的是 DeepSeek 自己的模型元数据(OpenRouter 上 deepseek/deepseek-v4-flash 的 context_length)。请求报 400 就调小
  • U 系列不在这里配(sensenova-u1.5-lite / fast 走图像接口,不是对话模型)。deepseek-flash 支持 video 输入,但 video 只有原生 API 支持,不走 OpenCode

harness

DeepSeek 官方的开源 agent harness,CLI 叫 dsh,基于 Cordis 的 ” 一切皆插件 ” 架构。开发者预览版,会有破坏性变更。

npx @deepseek-ai/dsh web     # Web UI 默认 http://127.0.0.1:3080

配置在 $DSH_HOME/settings.yaml(设置页顶部「打开配置文件」可直接打开)。密钥单独存 $DSH_HOME/.credentials.yaml,只写不读,页面只会拿到脱敏描述符。

模型变更下一次请求就生效,不用重启。

1️⃣ 方式一:模型页表单

设置 → 模型 → 添加自定义提供方:

字段值
Provider IDsensenova(小写,永久不可改)
显示名称SenseNova
API 地址https://token.sensenova.cn/v1
API 协议openai-completions
API 密钥sk-xxx
模型至少一个,填 ID / 显示名 / 上下文窗口 / 最大输出

也能在模型目录里点「获取可用模型」探测,它调 GET /models 返回可勾选列表。探测失败或列表为空就手动填 ID,效果完全一样。

Provider ID 是永久的——请求、已保存会话、模型默认值、凭据引用都用它。要改名字只能新建再删旧的。

每个模型填什么

Model ID显示名称上下文窗口最大输出
sensenova-6.8-flash-liteSenseNova 6.8 Flash-Lite26214465536
deepseek-v4-flashDeepSeek V4 Flash100000065536
deepseek-flashDeepSeek V4.1 Flash1000000393216
glm-5.2GLM-5.21000000131072
kimi-k3Kimi K31000000131072

来源:

  • sensenova-6.8-flash-lite 的数字全部来自 SenseNova 官方文档
  • deepseek-v4-flash 的 1M 上下文 SenseNova 文档没写,取的是 DeepSeek 自己的模型元数据(OpenRouter 上 deepseek/deepseek-v4-flash 的 context_length: 1048576)。输出 65536 是 SenseNova 文档标的 max_tokens 上限
  • deepseek-flash 的 393216、glm-5.2 的 131072 都是 SenseNova 文档标的 range 上限
  • kimi-k3 的 131072 是文档标的默认值,硬上限其实是 1024*1024 - prompt_tokens——大上下文请求的实际输出空间比 128K 大,这里填保守值

表单里没有图片输入和推理等级的字段,那两个只能走方式二。表单和 $DSH_HOME/settings.yaml 是同一份文档:先用表单填基础字段,再手写追加高级字段,两边不冲突。

harness 内置的 moonshotai / zai 是直连月之暗面和智谱官方端点,不是走 SenseNova。用 SenseNova 供的 Kimi、GLM 还是得建自定义提供方。

2️⃣ 方式二:settings.yaml

表单只开放:密钥、显示名、API 地址、API 协议、每个模型的 ID / 显示名 / 上下文窗口 / 最大输出。图片输入、推理等级、请求兼容开关都不在表单里,必须写文件:

llm-pi-ai:
  providers:
    sensenova:
      apiKeyEnv: SENSENOVA_API_KEY
      api: openai-completions
      baseURL: https://token.sensenova.cn/v1
      compat:
        supportsDeveloperRole: false
        maxTokensField: max_tokens
      models:
        - id: sensenova-6.8-flash-lite
          input: [text, image]
          reasoningEfforts:
            off: none
            high: high
            max: max
        - id: deepseek-v4-flash
        - id: deepseek-flash
          input: [text, image]
        - id: glm-5.2
        - id: kimi-k3
          input: [text, image]

用表单填的话密钥进 .credentials.yaml;手写这份 YAML 就用 apiKeyEnv 指向环境变量。

四个字段为什么必须写:

  • input: [text, image]:手动录入的模型一律按纯文本对待,不声明的话附图片在发送前就被拒,还会点名是哪个模型
  • compat.supportsDeveloperRole: false:pi-ai 不认识 SenseNova 的地址,会按 OpenAI 的规矩发请求——推理模型的系统提示词走 role: "developer",而 SenseNova 只认 system / user / assistant / tool
  • compat.maxTokensField: max_tokens:OpenAI 默认写 max_completion_tokens,SenseNova 认 max_tokens(只有 Kimi K3 反过来用 max_completion_tokens)
  • reasoningEfforts:手动录入的模型不声明等级就出不来推理菜单。SenseNova 关闭思考是 reasoning_effort: "none",不是省略参数,所以 off 要写 none,不能留空

其他四个模型也支持 reasoning,需要推理菜单就把同一段 reasoningEfforts 复制过去。路由级的 compat / defaultInput 是模型的默认值,模型自己的逐字段胜出。所有开关都必须给值——冒号后留空(supportsDeveloperRole:)会被拒而不是忽略。

🩹 排错

  • MISSING_CREDENTIAL:用模型页存密钥,或提供被引用的环境变量
  • UNKNOWN_MODEL:选了没配的模型,或自定义提供方里漏了这个模型
  • 「获取可用模型」401:密钥错
  • 「获取可用模型」提示既没有 data 数组也没有 models 对象:探测读不到这个端点的列表格式,手动填 ID
  • 密钥和地址都对,但每个请求都被拒:请求形状跟 OpenAI 不一样。先在路由上设 compat.supportsDeveloperRole: false 和 compat.maxTokensField: max_tokens
  • 只有推理模型失败:系统提示词走 developer 角色被拒。设 compat.supportsDeveloperRole: false
  • 手动录入的模型没有推理等级菜单:没声明等级。加 reasoningEfforts
  • 图片发送前被拒:该模型没声明图片模态。加 input: [text, image]
  • 网关拒绝带图片的请求:声明了它实际不提供的能力。从 input 或 defaultInput 去掉 image,然后开新会话——已附的图片留在会话日志里,旧会话会一直重复失败

🎛️ 推荐参数(Flash-Lite)

  • max_tokens:标准任务 2048–4096;reasoning 模式 ≥4096。reasoning 内容和正式输出共享 max_tokens 配额
  • stream: true:长文本生成推荐开,防超时
  • temperature:默认 1;创作 1.3–1.5;代码生成 0.2–0.5
  • 多轮对话:历史只回传 content,不要回传 reasoning,省 token
  • thinking:enabled / disabled,默认 enabled
  • reasoning_effort:low / medium / high / max,默认 high,none 等于关闭
  • reasoning 模式和 JSON mode 不建议同时开
  • 结构化输出用 response_format: {"type": "json_object"},prompt 里要显式出现 json 并给示例

💰 额度与限流

2026-08-28 起改成积分制,账号里有两类:

  • 通用积分:所有模型共用
  • Flash-Lite 专属积分:只用于 Flash-Lite 系列;用 Flash-Lite 时先扣专属,扣完回退扣通用

公测额度:滚动 5 小时 60,000 + 滚动周 600,000,两层并存。公测返还:Flash-Lite 每消耗 1 专属积分返还 1 通用积分(按日汇总、按小时到账、30 天有效、不占滚动额度、不自动解锁新模型)。从通用池扣的不参与返还。

429 = quota_exceeded_error,指数退避。其他:400 invalid_request_error / failed_precondition_error,403 permission_denied_error,404 not_found_error(模型 ID 错或已下线),408 canceled_error,500 internal_server_error。

🕘 状态记录

  • 2026-09-26:harness 方式一补上每个模型的上下文窗口和最大输出。deepseek-v4-flash 的 1M 上下文从 OpenRouter 上的 DeepSeek 模型元数据拿到,SenseNova 文档没写,两处都标了来源。
  • 2026-09-26:补上 harness 一节。harness = DeepSeek 官方的 dsh(deepseek-ai/deepseek-harness,” 一切皆插件 ”)。配置在 $DSH_HOME/settings.yaml,模型变更下一次请求生效不用重启。
  • 2026-09-26:OpenCode 配置块的 models 从 1 个补到 5 个对话模型,limit 按各模型参数表填;deepseek-v4-flash 上下文官方未标,标为保守估值待核实。
  • 2026-09-26:模型清单补齐到官方全量 7 个,逐个核对参数表(上下文、输出上限、输入模态、特性),不再只抄 overview 的描述列。
  • 2026-09-26:只保留 OpenCode 和 harness,删掉 Claude Code 和其他 agent。
  • 2026-09-26:删掉安装步骤,各 agent 只留配置文件位置和可直接粘贴的配置块,模板只需替换 apiKey。
  • 2026-09-26:按官方文档 platform.sensenova.cn/docs 全面重写。修正三处——① baseURL 规则只适用于 OpenAI 侧,Anthropic 侧不能带 /v1;② context_length 官方 262144,之前抄的 256000;③ 模型 ID 清单,deepseek-flash 才是 V4.1,之前记的 deepseek-v4-pro 不存在。

🔗 相关