效率翻倍:用 147API 把大模型接入 VS Code 与 Cursor(OpenAI 兼容接口)

4 阅读6分钟

摘要:这篇文章写给想把“IDE 里用模型”做成稳定工程的人。思路是先用 147API(OpenAI 接口聚合管理)把上游渠道和 key 管理收口,再用 Continue 扩展在 VS Code / Cursor 里配置同一份 config.yamlapiBase + apiKey),做到可复制、可维护。文中包含 Kotlin 的最小连通性测试,以及排查 401/403/404/超时的顺序。


你在 IDE 里用大模型,体验好不好,往往不取决于“模型有多强”,而取决于两件事:

  • 能不能稳定接入(团队里每个人都能用,同一套配置能复用)
  • 能不能把 Key、渠道、配额这类“接入层问题”从业务代码里剥离出来

这篇文章参考了 CSDN 上那篇“把 Claude Code 接入 VS Code 与 Cursor”的写法(见文末链接),但我把思路换成更通用、更偏工程的做法:用 147API(147ai.com)这种 OpenAI 接口聚合管理工具,先把上游渠道收口,再把 IDE 接入做成一份可复制的配置。


适用人群

  • 你希望团队里所有人用同一套 IDE 接入方式
  • 你不想把“换渠道、换 key、控额、限流”写进每个业务项目里
  • 你更喜欢“配置化”而不是“到处改代码”

0. 先说明白:本文讲的是哪条路线

本文主线是:

  • 你已经有一个 OpenAI 兼容的统一接入(例如 147API),对外提供形如 .../v1 的接口
  • IDE 侧用 Continue 扩展来连接这个接口(VS Code / Cursor 都能装扩展)

Continue 官方文档明确支持为 OpenAI API compatible provider 配置 apiBase(也就是自定义 /v1 的入口)与 apiKey(见文末参考链接)。

至于“Claude Code 官方扩展”的路线(Anthropic 的那套 VS Code/Cursor 扩展),它更偏官方直连与官方第三方(Bedrock/Vertex/Foundry)接入;如果你要走这条路,建议直接按 Claude Code 官方文档来(也在文末参考里)。


1. 147API(能解决什么问题

我只引用官网能直接公开确认的信息:147ai.com 首页描述中提到它是 OpenAI 接口聚合管理,支持多种渠道(包含 Azure),可用于二次分发管理 key,并且提供单可执行文件与 Docker 镜像“一键部署、开箱即用”的形态(见文末参考链接)。

落到“IDE 接入”这个具体场景,它带来的价值通常是:

  • 把团队的 key 管理集中到一处,IDE 侧只配一个 key
  • 上游渠道的切换、倍率、限额等策略下沉到接入层(IDE/业务侧配置不频繁改)
  • 便于做审计与排查:哪个项目、哪个 key、哪个模型、耗了多少,一眼能追(前提是你自己在接入层做了日志/统计)

2. 准备工作

你需要:

  1. VS Code 或 Cursor(Cursor 也是基于 VS Code 扩展生态)
  2. 已部署好的 147API(或你自己的 OpenAI 兼容网关),并确认:
    • Base URL:形如 https://你的域名/v1
    • API Key:一串你用于鉴权的 key
  3. Continue 扩展(VS Code / Cursor 都可以安装)

如果你还没部署 147API:官网说明里已经提到有单文件与 Docker 镜像两种交付形态;部署方式、端口、反代、HTTPS 这些细节建议以你自己的实际环境与官网文档为准(见文末参考链接)。


3. VS Code 接入(Continue 方案)

3.1 安装 Continue 扩展

在 VS Code 里按 Cmd+Shift+X(Mac)或 Ctrl+Shift+X(Windows/Linux),搜索并安装 “Continue”。

3.2 打开本地配置文件 config.yaml

Continue 官方给了比较清晰的入口:

  • 打开 Continue Chat 侧边栏(VS Code 默认快捷键:cmd/ctrl + L
  • 在输入框上方找到配置下拉(Agent selector)
  • 选择 “Local Config”,点旁边的齿轮图标,会打开本地 config.yaml
  • config.yaml 默认位置:~/.continue/config.yaml(macOS/Linux),或 %USERPROFILE%\\.continue\\config.yaml(Windows)

以上位置与打开方式,来自 Continue 官方文档(见文末参考链接)。

3.3 写一份最小可用配置(OpenAI 兼容接口)

把下面这段放进你的 config.yaml(按你自己的 147API 地址与 key 改掉两处占位符即可):

name: 147API Local
version: 0.0.1
schema: v1

models:
  - name: 147API (OpenAI Compatible)
    provider: openai
    model: <你的模型ID或别名>
    apiBase: https://<你的147API域名>/v1
    apiKey: <你的147API_API_KEY>

这里用到的字段(provider: openaiapiBaseapiKey)是 Continue 官方文档对 “OpenAI API compatible providers” 的标准写法(见文末参考链接)。

3.4 最快验证:列模型 / 发一句话

Continue 配好后,你最简单的验证方式就是在 Continue 的聊天里问一句“介绍一下你自己,并输出当前模型名”,看看能否正常返回。

如果你更希望用“接口层面”的方式验证(排除 IDE 干扰),可以用 Kotlin 写一个最小请求去打 /v1/models/v1/chat/completions。下面是一个偏“只测连通性”的 /v1/models 示例(OkHttp):

import okhttp3.OkHttpClient
import okhttp3.Request

fun main() {
  val baseUrl = System.getenv("OPENAI_API_BASE") ?: error("Missing OPENAI_API_BASE, e.g. https://xxx/v1")
  val apiKey = System.getenv("OPENAI_API_KEY") ?: error("Missing OPENAI_API_KEY")

  val client = OkHttpClient()
  val req = Request.Builder()
    .url(baseUrl.trimEnd('/') + "/models")
    .addHeader("Authorization", "Bearer $apiKey")
    .build()

  client.newCall(req).execute().use { resp ->
    val body = resp.body?.string().orEmpty()
    println("HTTP ${resp.code}")
    println(body)
  }
}

/v1/models 与鉴权方式(Authorization: Bearer ...)对应 OpenAI API Reference 的 Models 文档(见文末参考链接)。如果你的 147API 做了 OpenAI 兼容转发,这一步通常能快速确认“网关是否可达、key 是否有效”。


4. Cursor 接入(仍然建议用 Continue)

参考文里是“Cursor 里接 Claude Code”,但就 147API 这类 OpenAI 兼容接口而言,我更建议在 Cursor 里也直接装 Continue,这样 VS Code 与 Cursor 可以共用同一份 config.yaml,接入路径完全一致。

做法和 VS Code 一样:

  1. 在 Cursor 的扩展市场安装 Continue
  2. 打开 Continue 的 Local Config(config.yaml
  3. 填同一份 apiBaseapiKey

好处是:你不需要依赖 Cursor 自身对“自定义 OpenAI Base URL”的支持情况,也不用为两个 IDE 维护两套配置。


5. 常见坑与排查顺序(我建议按这个走)

5.1 401 / 403:先看 Key,再看转发鉴权

  • Key 写错、复制多了空格、权限没开,是最常见的
  • 有些网关把 key 放在自定义 Header(而不是 Bearer),这会导致 Continue/脚本鉴权失败

Continue 走 OpenAI provider 时,最通用的还是 Bearer 头;如果你用的是“非标准鉴权”,要么在网关层兼容 OpenAI 的鉴权方式,要么换能自定义 header 的客户端。

5.2 404:大概率是 apiBase 少了 /v1 或多了一层路径

Continue 文档里的 apiBase 示例就是 http://localhost:8000/v1,也就是 apiBase + /chat/completions 这种拼法(见参考链接)。所以:

  • apiBase 一般要以 /v1 结尾
  • 不要把 /v1/chat/completions 写进 apiBase

5.3 超时/卡顿:先从“上游渠道”定位,不要先怪 IDE

建议你至少做两件事:

  • 直接用 Kotlin/curl 打网关接口,确认“IDE 之外也慢”
  • 在网关层记录一次请求链路:上游是哪条渠道、耗时多少、是否重试、是否限流

6. 你可以把这套接入写成团队标准

如果你团队不止一个人用:

  • 把 Continue 的 config.yaml 模板(不含 key)放到内部文档
  • 让每个人只填自己的 key(或由管理员发放)
  • 统一规定:apiBase 只指向 147API,IDE 不直连任何上游

这类“接入层收口”的收益,会在你第一次需要切上游渠道、做限流、做审计的时候体现出来。