如果您搜索 Windsurf OpenAI 兼容 API 设置,您可能指的是以下两种不同情况之一:
- 您想更改 Windsurf 或 Devin Desktop 在 Cascade 内部使用的模型。
- 您希望 Windsurf 帮助您构建的代码、脚本、工具或本地应用通过一个共享网关密钥发送 OpenAI 兼容的 API 流量。
这两种设置并不相同。截至 2026-07-08 查阅的公开 Windsurf 和 Devin Desktop 文档记录了 Cascade 模型选择、Devin Local、使用/信用核算以及用于工具的 MCP 服务器。它们没有记录一个原生的“自定义 OpenAI 兼容提供商”屏幕,让您可以为 Cascade 本身粘贴第三方 LLM 基础 URL。
这一点很重要,因为安全的 Flatkey 模式不是假装 Windsurf 有一个文档中未显示的本机提供商字段。请将 Flatkey 用于围绕 Windsurf 驱动项目的 OpenAI 兼容 SDK 和应用流量:测试脚本、代理工具、后端服务、CLI 工作流以及已经调用聊天完成(Chat Completions)风格端点的应用程序代码。
Flatkey 为这些流量提供一个密钥、一个 OpenAI 兼容的基础 URL、模型路由、使用情况可见性和账单审查。Windsurf 仍然是编码环境;Flatkey 则成为您的项目代码使用的 API 路由。
Windsurf OpenAI 兼容 API 设置快速解答
在进行配置前,请使用此决策表。
| 目标 | 配置位置 | 切勿混淆 |
|---|---|---|
| 更改 Cascade 使用的模型 | 使用 Windsurf 或 Devin Desktop 模型选择功能。 | 不要将 Flatkey LLM 基础 URL 粘贴到 MCP 服务器字段中。 |
| 路由您的应用的 OpenAI 格式请求 | 使用 Flatkey 密钥和基础 URL 配置您的应用、CLI、测试脚本或 SDK 客户端。 | 这会更改应用流量,而不是 Cascade 的内部模型选择器。 |
| 向 Cascade 添加外部工具 | 在 Windsurf 设置或 mcp_config.json 中配置 MCP 服务器。 | MCP serverUrl 是工具服务器的 URL,而不是 LLM 聊天完成(Chat Completions)的基础 URL。 |
| 证明编码代理工作负载的使用情况和成本 | 分别保存 Flatkey 请求日志/使用情况以及 Windsurf 或 Devin 的使用记录。 | 不要假定 Windsurf ACU 或信用额度等同于外部 API 使用量。 |
实用的 Windsurf OpenAI 兼容 API 路径是:让 Windsurf 帮助编辑代码,但通过 Flatkey 路由代码的模型调用。这使得 Windsurf OpenAI 兼容 API 设置可审计,因为编码环境、API 密钥和生产路由各自都有明确的所有者。
Windsurf 和 Devin 官方文档实际支持的功能
当前的公开文档支持三个事实,这些事实构成了本指南的基础。
| 官方文档领域 | 对本设置的意义 |
|---|---|
| Cascade 模型选择 | Cascade 有自己的模型选择器。请用它来选择 Windsurf 或 Devin Desktop 内部的助手。 |
| 使用情况和信用 | Windsurf/Devin 使用情况核算涵盖本地代理,如 Cascade、Devin CLI 和 Devin Local。这与您自己的应用发送到 Flatkey 的调用是分开的。 |
| MCP 服务器 | Cascade 可以通过 stdio、HTTP 或 SSE 使用 MCP 服务器。远程 HTTP MCP 使用 serverUrl 或 url 字段。该字段用于工具服务器,而不是用于替换 Cascade 背后的 LLM 提供商。 |
因此,一篇关于 Windsurf OpenAI 兼容 API 的文章不应该说“打开 Windsurf 设置并添加 Flatkey 作为自定义 OpenAI 提供商”,除非您正在使用的实时文档或产品 UI 明确显示了该功能。一个更安全的生产指南是配置 Windsurf 生成的代码和工具。
第 1 步:创建 Flatkey 密钥并选择路由
在 Flatkey 中,为此工作负载创建一个密钥,并选择一个与您计划调用的端点系列相匹配的模型别名。对于聊天完成(Chat Completions)风格的路由,请将 API 根路径和端点分开:
FLATKEY_API_KEY=sk-fk-your-key
FLATKEY_BASE_URL=https://router.flatkey.ai/v1
FLATKEY_MODEL=your-current-flatkey-model-alias对于直接的 curl 调用,请添加端点路径:
curl "$FLATKEY_BASE_URL/chat/completions" \
-H "Authorization: Bearer $FLATKEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "'"$FLATKEY_MODEL"'",
"messages": [
{ "role": "user", "content": "请准确回复:flatkey route ok" }
]
}'不要同时将 https://router.flatkey.ai/v1 和 /chat/completions 作为基础 URL 提供给 SDK。SDK 基础 URL 通常应在 /v1 处停止;直接的 curl 请求使用完整的端点。
第 2 步:将路由放入 SDK 客户端工厂
最有用的 Windsurf OpenAI 兼容 API 设置是一个小型的客户端边界,Windsurf 可以帮助安全地编辑它。将密钥保存在环境变量中,并保持模型别名可配置。
Python 模板:
import os
from openai import OpenAI
def make_llm_client() -> OpenAI:
return OpenAI(
api_key=os.environ["FLATKEY_API_KEY"],
base_url=os.environ.get("FLATKEY_BASE_URL", "https://router.flatkey.ai/v1"),
)
client = make_llm_client()
response = client.chat.completions.create(
model=os.environ["FLATKEY_MODEL"],
messages=[
{"role": "user", "content": "请准确回复:sdk route ok"}
],
)
print(response.choices[0].message.content)
print(response.usage)Node 模板:
import OpenAI from "openai";
export function makeLlmClient() {
return new OpenAI({
apiKey: process.env.FLATKEY_API_KEY,
baseURL: process.env.FLATKEY_BASE_URL ?? "https://router.flatkey.ai/v1",
});
}
const client = makeLlmClient();
const response = await client.chat.completions.create({
model: process.env.FLATKEY_MODEL!,
messages: [
{ role: "user", content: "Reply with exactly: sdk route ok" },
],
});
console.log(response.choices[0]?.message?.content);
console.log(response.usage);在根据您已安装的 SDK 版本、当前的 Flatkey 密钥、当前的模型别名和端点系列对这些代码片段进行测试之前,请将它们视为模板。如果您的应用程序已经有一个基础 URL 包装器,请更新该包装器,而不是将 Flatkey 变量分散到各个控制器和脚本中。
有关特定于 SDK 的迁移详细信息,请将本指南与 Flatkey 的 Cursor OpenAI 兼容 API 设置和 Claude Code API 路由器设置指南结合使用。
第 3 步:要求 Windsurf 进行代码更改,而不是持有密钥
Windsurf 对于在整个代码库中应用迁移很有用,但提示应限制工作范围。
更新 LLM 客户端设置,以便所有 OpenAI 兼容的聊天请求都使用:
- FLATKEY_API_KEY 作为持有者令牌
- FLATKEY_BASE_URL 作为 API 根
- FLATKEY_MODEL 作为模型别名
不要硬编码密钥。
不要更改提示、业务逻辑或重试策略。
仅更新客户端工厂和验证路由所需的最小测试。这将 Windsurf OpenAI 兼容 API 的工作范围限定在配置上,而不是一次广泛的重构。
第 4 步:保持 MCP 配置分离
这是最常见的设置错误。Windsurf 的 MCP 配置将 Cascade 连接到工具。远程 MCP 条目可能如下所示:
{
"mcpServers": {
"internal-docs": {
"serverUrl": "https://tools.example.com/mcp"
}
}
}那个 serverUrl 不是您放置 https://router.flatkey.ai/v1 的地方。MCP 服务器可以向 Cascade 公开工具,如果您以这种方式构建它们,这些工具可以在内部调用 Flatkey。但 MCP 传输配置和 OpenAI 兼容的模型路由是不同的层。
使用以下划分:
| 层 | URL 属于此处 | 示例 |
|---|---|---|
| 应用模型流量 | OpenAI 兼容 API 基础 URL | https://router.flatkey.ai/v1 |
| 直接端点请求 | 完整聊天端点 | $FLATKEY_BASE_URL/chat/completions |
| Cascade 工具集成 | MCP 服务器 URL | https://tools.example.com/mcp |
| Windsurf 内部助手 | 内置模型选择 | Cascade 模型菜单 |
如果您的 MCP 服务器调用模型,请将 Flatkey 密钥放在 MCP 服务器端,而不是 Windsurf 客户端配置中,除非您的安全模型明确允许本地开发者凭据。
第 5 步:保存验证包
只有当您能证明路由正常工作并且可以回滚时,Windsurf OpenAI 兼容 API 迁移才算准备就绪。Windsurf OpenAI 兼容 API 验证包的要点是使第一次路由更改足够小,以便工程、财务和运营部门可以共同检查。
| 检查项 | 通过条件 | 要保存的证据 |
|---|---|---|
| 身份验证 | 请求返回模型响应,而不是 401 或 403。 | 经过编辑的 curl 命令、HTTP 状态、响应 ID(如果存在)。 |
| 基础 URL | 没有重复的 /v1/v1 或缺失的端点路径。 | 最终解析的基础 URL 和直接端点测试。 |
| 模型别名 | 请求的别名映射到可用的 Flatkey 路由。 | 模型别名、端点系列和账户可见的目录说明。 |
| 用量 | 请求出现在 Flatkey 用量或请求日志中。 | 用量、模型和令牌或单位字段的屏幕截图/导出。 |
| 成本审查 | 财务或运营部门可以将支出追溯到密钥/工作负载。 | 用量行、余额影响、发票路径或请求日志。 |
| 回滚 | 一次配置更改即可将流量返回到先前的路由。 | 先前的基础 URL、先前的密钥所有者、先前的模型别名。 |
对于更深入的用量字段,请在第一次冒烟测试成功后,使用令牌用量仪表板指南。
第 6 步:在普通聊天后测试流式传输和工具
不要从最难的路由开始。首先验证一个非流式聊天请求。然后将流式传输和工具调用作为独立的部分进行测试。
流式传输证明:
curl -N "$FLATKEY_BASE_URL/chat/completions" \
-H "Authorization: Bearer $FLATKEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "'"$FLATKEY_MODEL"'",
"stream": true,
"messages": [
{ "role": "user", "content": "Count from one to five." }
]
}'工具调用证明应在尝试生产工具集之前使用一个微小的函数模式:
{
"type": "function",
"function": {
"name": "lookup_ticket",
"description": "Return a test ticket status.",
"parameters": {
"type": "object",
"properties": {
"ticket_id": { "type": "string" }
},
"required": ["ticket_id"]
}
}
}如果普通聊天通过但流式传输或工具失败,那么您就不再是调试基本 URL。您正在检查该功能的路由能力、模型支持、SDK 解析或网关行为。
故障排除表
| 症状 | 可能的原因 | 检查内容 |
|---|---|---|
401 或 403 | 密钥错误、缺少 bearer 标头、密钥已吊销或环境错误。 | 打印加载了哪个环境变量,切勿打印密钥。 |
404 | 端点路径错误或基本路径重复。 | 将 SDK 基本 URL 与直接 curl 端点进行比较。 |
| 找不到模型 | 此密钥或端点系列的别名不存在。 | 在 Flatkey 的当前目录和您的账户中确认模型别名。 |
| Cascade 忽略 Flatkey | 您更改了应用程序代码,而不是 Cascade 的内部模型选择器。 | 确定目标是应用程序流量还是 Windsurf 自己的助手。 |
| MCP 可用但模型调用不可用 | MCP 服务器 URL 和 LLM API 基本 URL 混淆了。 | 将 MCP 传输配置与模型调用配置分开。 |
| 缺少用量 | 请求绕过了 Flatkey,或者日志按密钥/项目/日期进行了筛选。 | 按时间戳、密钥、模型别名和环境进行搜索。 |
最终核对清单
在增加流量之前,请确认:
- 目标是围绕 Windsurf 的应用程序、脚本或工具流量,而不是未记录的原生 Cascade 提供商设置。
FLATKEY_API_KEY、FLATKEY_BASE_URL和FLATKEY_MODEL在源代码控制之外进行配置。- 直接 curl 对
$FLATKEY_BASE_URL/chat/completions有效。 - 应用程序的 SDK 工厂使用相同的密钥、基本 URL 和模型别名。
- 流式传输和工具与普通聊天分开测试。
- Flatkey 用量或请求日志显示测试请求。
- 在生产流量转移之前,记下回滚值。
Windsurf OpenAI 兼容 API 设置在明确边界时非常有用:Windsurf 帮助您构建和修改代码,而 Flatkey 则路由该代码发出的 OpenAI 兼容调用。当您准备好通过一个密钥路由这些调用时,获取一个 Flatkey 密钥并从一个低风险的冒烟测试开始。



