Windsurf + Qwen3.7 Plus 配置指南:Model ID 与 temperature 两处静默空响应的排查与修复
上周三我把 Cursor 里跑得好好的 Qwen3.7 Plus 搬到 Windsurf,结果代码补全没有内容输出——不报错、不超时,就是返回空。排查了较长时间才发现是两个地方的默认行为跟 Cursor 不一样:一个是 Model ID 字段的 alias 解析逻辑,另一个是 Windsurf 发请求时携带的 temperature 默认值在 Qwen3.7 Plus 上会触发空响应。这篇把完整配置流程和这两个问题的根因讲清楚,照着走五分钟能跑通。
这篇适合谁
- 已经在 Cursor/Cline 里用过 Qwen3.7 Plus,想迁移到 Windsurf 的
- 配完 Windsurf Custom Model 后补全没反应、但不报错的
- 搞不清 DashScope 上
qwen-plus和qwen3-plus到底填哪个的 - 想在 Windsurf 里关掉 Qwen3 思维链节省 token 的
整体流程
- DashScope 控制台拿 API Key
- Windsurf Settings 里加 Custom Model,填 Base URL / Key / Model ID
- 验证连通性(先 curl 跑通再进 Windsurf)
- 修 temperature 默认值,解决空响应
- 关闭 thinking 模式压缩 token 消耗
graph LR
A[DashScope 控制台] -->|拿 Key| B[curl 验证连通]
B --> C[Windsurf Add Custom Model]
C --> D{补全有响应?}
D -->|是| E[调 temperature / 关 thinking]
D -->|否| F[排查 Model ID / URL 格式]
F --> C
先说结论
| 坑点 | 症状 | 根因 | 修法 |
|---|---|---|---|
Model ID 写成 qwen3-plus |
400 或静默走到错误模型 | DashScope 正确 ID 是 qwen-plus |
改成 qwen-plus |
| temperature 空响应 | 补全返回空字符串,无报错 | Windsurf 默认 temperature=0,在部分短 prompt 场景下偶发空响应 | 手动设为 0.1 或 0.3 |
| Base URL 末尾多斜杠 | TypeError: Failed to fetch |
多了 / 拼接出双斜杠路径 |
去掉末尾 / |
第一步:拿 DashScope API Key
阿里云控制台 → 模型服务灵积 → API Key 管理 → 创建。格式是 sk- 开头。
拿到后先 curl 验证一下,别直接往 Windsurf 里填——出了问题你分不清是 Key 的事还是 Windsurf 的事:
curl https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{"model":"qwen-plus","messages":[{"role":"user","content":"ping"}]}'
返回 200 带内容就说明 Key 和网络都没问题。如果报这个:
Error: 401 Unauthorized
{"code":"InvalidApiKey","message":"Invalid API-key provided."}
检查复制时有没有带多余空格,或者 Key 是不是刚创建还没激活(等 30 秒再试)。
第二步:Windsurf 填 Custom Model
路径:Settings > AI Models > Add Custom Model。四个字段:
| 字段 | 填什么 | 注意 |
|---|---|---|
| Model Name | 随便写,比如 Qwen3.7-Plus |
只是显示名 |
| API Base URL | https://dashscope.aliyuncs.com/compatible-mode/v1 |
末尾不要斜杠 |
| API Key | sk-xxxxxxxx |
DashScope 的 Key |
| Model ID | qwen-plus |
不是 qwen3-plus |
这里就是第一个主要问题所在。
第三步:Model ID 的 alias 陷阱
Cursor 里你可能填的是 qwen-plus-latest 或者随便写个 alias 然后在 model mapping 里指向真实 ID。Windsurf 没有 model mapping 这层——Model ID 字段直接拼进请求体的 "model" 字段原样发给 DashScope。
所以你填 qwen3-plus,DashScope 收到的就是 "model": "qwen3-plus",然后返回:
Error: 400 Bad Request
{"code":"InvalidParameter","message":"The model does not exist or you do not have access"}
更需要注意的是,如果你填了 qwen3-7b(对应 Qwen3 开源 7B 版本,Model ID 请以 DashScope 官方文档 为准),请求不会报错,但你以为自己在用 Qwen3.7 Plus 的能力,实际跑的是 7B 小模型。补全质量会明显下降,但不报错。
正确的 Model ID 对照表(以下 ID 以 DashScope 官方文档为准,使用前请核实):
| 你想用的模型 | 正确 Model ID | 错误写法(会静默走错) |
|---|---|---|
| Qwen3.7 Plus(最新旗舰) | qwen-plus |
qwen3-plus / qwen3.7-plus |
| Qwen3.7 Plus 固定版本 | qwen-plus-latest |
qwen-plus-2026 |
| Qwen3 235B 开源版 | qwen3-235b-a22b |
qwen3-235b |
| Qwen3 7B 开源版 | 请查阅官方文档 | qwen-7b |
第四步:temperature 默认值导致空响应
这是最隐蔽的问题。配完之后 Cascade 对话能用,但代码补全(autocomplete)返回空字符串。
抓包可以看到 Windsurf 给补全请求默认携带了 "temperature": 0,而 Cursor 的默认值是 0.1。
在实际使用中观察到:Windsurf 以 temperature=0 调用 Qwen3.7 Plus 时,对于较短的 prompt(比如补全场景下只有几行上下文),偶发返回空 choices。这一现象表现为"时灵时不灵"。需要说明的是,这一行为的具体归因——究竟是模型侧特性还是客户端侧行为——目前没有官方文档佐证,建议遇到此问题时优先调整 temperature 值进行验证。
解法:在 Windsurf 的 Custom Model 高级设置里把 temperature 手动设为 0.1。
注意:temperature 是 API 请求的采样参数,无法通过 System Prompt 文本指令来控制。如果 Windsurf 版本没有暴露 temperature 设置项,需要通过其他方式(如升级客户端版本或通过 API 直接调用)来设置该参数。
第五步:关闭 thinking 模式节省 token
Qwen3.7 Plus 默认开启思维链,Windsurf 的 Cascade 对话里你会看到模型先输出一大段 <think>...</think> 然后才给答案。这些 thinking token 同样计费——以写一个快速排序为例,thinking 部分可能消耗数百 tokens,而实际答案 token 量相对较少。
关闭 thinking 的官方方式有两种:
方式一:在用户消息末尾加 /no_think(注意是下划线)
根据 Qwen3 官方文档,在用户消息末尾添加 /no_think 可关闭当次请求的 thinking 模式。
方式二:通过 enable_thinking 参数
如果你是通过 API 调用,可以在请求中传入该参数:
resp = client.chat.completions.create(
model="qwen-plus",
messages=[{"role": "user", "content": "快速排序"}],
extra_body={"enable_thinking": False}
)
注意:extra_body 中 enable_thinking 参数的实际生效情况取决于所使用的 SDK 版本,建议参考 DashScope 官方文档 确认当前版本的支持情况。
关闭 thinking 后,对于代码补全这类场景,token 消耗会有明显下降。
不同场景怎么选
纯代码补全(autocomplete):用 qwen-plus,temperature 设 0.1,关 thinking。
Cascade 对话(重构/解释代码):同样 qwen-plus,temperature 可以放到 0.3,thinking 看情况——复杂逻辑推理就开着,简单问答关掉。
控制成本:可以考虑补全用较小的开源模型,对话用 qwen-plus。Windsurf 支持给不同场景配不同模型,在 Settings > AI Models 里分别加两个 Custom Model 就行。各模型的具体定价请以 DashScope 官方价格页 为准。
团队统一管理:如果团队多人都在用 Windsurf + Qwen,建议走 API 聚合网关统一分发 Key,可以按用户维度追踪 token 消耗和费用,避免月底逐一对账。
常见问题 FAQ
Q: Base URL 到底要不要加 /v1?
要加。正确格式是 https://dashscope.aliyuncs.com/compatible-mode/v1,末尾不带斜杠。如果你只填到 /compatible-mode,Windsurf 拼接后会请求 /compatible-mode/chat/completions,DashScope 返回 404。
Q: 配完后模型列表里看不到我加的模型?
重启 Windsurf。有时候改完 Settings 不会立即刷新模型列表,关掉整个窗口重新打开就有了。
Q: 补全时灵时不灵,有时候有内容有时候空?
大概率是 temperature=0 的问题,参考第四步。也可能是触发了 DashScope 的内容审核,此时 API 返回 HTTP 400,错误码为 DataInspectionFailed:
Error: 400 Bad Request
{"code":"DataInspectionFailed","message":"Input data may contain inappropriate content"}
遇到这个错误说明请求内容触发了内容过滤,换个 prompt 试试。
Q: 怎么确认我实际调用的是哪个模型?
最可靠的方式是在 DashScope 控制台查看调用日志,确认请求中实际使用的 Model ID。也可以通过抓包查看 Windsurf 发出的请求体。直接询问模型"你是什么模型"并不可靠——模型的自报身份与实际调用的 Model ID 是两回事,不应作为确认依据。
Q: Windsurf 免费版能用 Custom Model 吗?
能。Custom Model 的费用走你自己的 DashScope 账户,跟 Windsurf 订阅无关。免费版唯一限制是 Cascade 对话次数,但代码补全不限。
Q: 报 429 限流怎么办?
Error: 429 Too Many Requests
{"code":"Throttling.RateQuota","message":"Requests rate limit exceeded"}
DashScope 各模型的限流规则按模型和账户等级不同而有所差异,具体 QPM 上限请查阅 DashScope 官方文档。如果团队多人共用一个 Key 容易触发限流,可以考虑每人单独申请 Key,或通过聚合网关做负载均衡。
小结
整个配置其实就三个字段的事,但 Model ID 的命名规则和 temperature 默认值这两个差异,确实让从 Cursor 迁移过来的人容易踩坑。Windsurf 的 Custom Model 设计比 Cursor 更"直通"——没有 model mapping 层,填什么就发什么。好处是简单透明,坏处是你得自己去查 DashScope 的真实 Model ID,不能想当然。
更多推荐


所有评论(0)