VS Code 的 Copilot 对话接入中转站:用 Custom Endpoint 添加自己的模型
按 VS Code 官方文档整理:在语言模型管理里添加 Custom Endpoint,填中转站的地址、key 和模型名,就能在 VS Code 的对话里用中转站的模型,不需要 GitHub 账号和 Copilot 订阅。讲清配置文件怎么写、地址和认证头怎么定,以及哪些功能不走这条线路。
本文根据公开分享整理,本站尚未实测。操作前请对照文末的原始来源。
本页目录(10 节)
VS Code 的对话(Copilot Chat)可以用自己的 key 添加模型,官方把这个功能叫 BYOK(Bring Your Own Key)。其中的 Custom Endpoint 供应商能连接任何兼容的接口,接中转站用的就是它:
- 命令面板运行
Chat: Manage Language Models; - 点 Add Models,选 Custom Endpoint;
- 填分组名、显示名和 API key,选接口类型;
- 在打开的
chatLanguageModels.json里写上模型名和中转站地址,保存。
官方文档写明了两点,和很多旧教程的说法不一样:
- 不需要 GitHub 账号,也不需要 Copilot 订阅。 自己添加的模型在没有登录 GitHub 的情况下也能用。
- 不需要另装扩展。 Custom Endpoint 是 VS Code 自带的,它取代了已经弃用的 “OpenAI Compatible” 供应商,
github.copilot.chat.customOAIModels这个设置也已弃用。
先说清楚范围。官方文档的原话是,BYOK 只作用于对话和后台的辅助任务。下面这些仍然需要 GitHub 账号,不走中转站:
- 行内补全(写代码时自动出现的灰色建议);
- 语义搜索,以及依赖 embeddings 的功能。
如果你还没弄清中转站是什么、有哪些风险,先读中转站是什么和用中转站有什么风险;选站可以看中转站排行榜。
开始之前:从中转站拿到三样东西
| 需要什么 | 说明 |
|---|---|
| 接口地址 | 以及它是哪一种接口,见下面第二步 |
| 模型名 | 中转站模型页上写的名字,一字不差 |
| API key | 在中转站的控制台创建,多数站只显示一次 |
1打开语言模型管理
两个入口,任选一个:
- 命令面板(
Ctrl+Shift+P,macOS 是Cmd+Shift+P)里运行Chat: Manage Language Models; - 在对话框的模型选择器里点齿轮图标 Manage Language Models。
2添加 Custom Endpoint
按官方文档的顺序:
- 点 Add Models,在列表里选 Custom Endpoint。
- 填分组名。它是模型选择器里显示的分组标签,以后可以改。
- 填显示名和中转站的 API key。
- 选接口类型,三选一:
| 接口类型 | 配置里的写法 | 什么时候选 |
|---|---|---|
| Chat Completions | chat-completions |
中转站提供 OpenAI 兼容接口。最通用,也是默认值 |
| Responses | responses |
模型只能走 OpenAI 的 Responses 接口时 |
| Messages | messages |
用 Claude,中转站提供 Anthropic 原生接口时 |
官方提醒:要确认模型支持你选的接口类型。
3在配置文件里写模型
选完接口类型,VS Code 会打开 chatLanguageModels.json。把模型的信息填进去再保存。
用 Claude、走 Anthropic 原生接口的例子:
[
{
"name": "我的中转站",
"vendor": "customendpoint",
"apiKey": "${input:myRelayKey}",
"apiType": "messages",
"models": [
{
"id": "claude-sonnet-5-5",
"name": "Claude Sonnet 5.5(中转站)",
"url": "https://你的中转站地址/v1/messages",
"toolCalling": true,
"vision": true,
"maxInputTokens": 136000,
"maxOutputTokens": 64000
}
]
}
]
走 OpenAI 兼容接口时,把 apiType 换成 chat-completions,url 换成 https://你的中转站地址/v1/chat/completions,id 换成对应的模型名,比如 gpt-6.1-sol。
几个字段的含义:
| 字段 | 说明 |
|---|---|
vendor |
固定写 customendpoint |
apiKey |
官方建议用输入变量 ${input:名字} 引用 key,不要把 key 的原文写进这个文件 |
id |
发给接口的模型名,照中转站的模型页写 |
name |
模型选择器里显示的名字,自己起 |
url |
模型的接口地址,见下一节 |
toolCalling |
模型支持工具调用时设 true。智能体模式靠它 |
vision |
模型支持看图时设 true |
maxInputTokens、maxOutputTokens |
最多输入、输出多少 token |
两个数字要按你用的模型来填,例子里的只是示意。官方的规则是:两者之和不能超过模型的上下文长度,通常把 maxInputTokens 设成上下文长度减去 maxOutputTokens。也可以直接写 contextWindow(输入加输出的总长度),省掉 maxInputTokens,VS Code 会自己减。
保存后,在对话的模型选择器里选这个模型。官方的提示:新加的模型没有马上出现时,重启 VS Code。
地址和认证头怎么定
这两处是接中转站时最容易出错的地方。
地址
官方文档的规则:
url里已经带了接口路径(/chat/completions、/responses或/messages)时,原样使用。- 没带时,VS Code 按接口类型补上路径;地址末尾不是
/v1这样的版本号时,还会先补一个/v1。比如接口类型是 Responses,https://my-host.example.com会变成https://my-host.example.com/v1/responses。
官方的建议是写完整的地址,把接口路径也带上,免得有歧义。中转站的路径不是标准的 /v1/... 时更要这样写。
认证头
默认按接口类型决定 key 放在哪个请求头里:
| 接口类型 | 默认的请求头 |
|---|---|
| Messages | x-api-key |
| Chat Completions、Responses | Authorization: Bearer <key> |
有的中转站的 Anthropic 接口只认 Authorization: Bearer。这时在模型上加 requestHeaders 改掉默认值:
"requestHeaders": {
"Authorization": "Bearer ${apiKey}"
}
${apiKey} 会在发请求时换成你配置的 key,key 本身仍然不用写进文件。官方文档说明,自己提供了常见的认证头之后,VS Code 不会再发默认的那个,不会出现两个凭据打架的情况。
没有登录 GitHub 时:辅助任务也要指定模型
除了对话本身,VS Code 还会在后台用轻量的模型做一些辅助任务:起标题、写提交说明、写 PR 描述、判断意图等。这些默认用 Copilot 自带的模型。
没有登录 GitHub 时,这些自带的模型不可用,对话视图里会出现一条提示让你配置。两种办法:
- 把
chat.byokUtilityModelDefault设成 Main Agent Model,辅助任务就用你选的那个主模型; - 或者分别设
chat.utilityModel和chat.utilitySmallModel。后者用于提交说明、重命名建议这类又快又轻的任务,官方建议给它配一个便宜的快模型。
用贵的模型当主模型时,第二种更省:辅助任务很频繁,没必要都用主模型来跑。
公司账号可能被管理员关掉
官方文档说明,Copilot Business 和 Enterprise 的用户能不能用自己的 key,由组织管理员在 GitHub.com 的 Copilot 策略里决定,对应的策略叫 “Bring Your Own Language Model Key in VS Code”。菜单里找不到添加模型的入口时,先问管理员。
和中转站文档里的做法有什么不同
有的中转站的接入文档用的是另一条路:装一个第三方扩展 “OAI Compatible Provider for Copilot”,在扩展里填地址和 key。按那份说明,这个扩展要求有 Copilot 个人版的订阅,不支持 Business 和 Enterprise。
本文按 VS Code 官方文档写的是自带的 Custom Endpoint:不用装扩展,也不要求订阅。两种做法改的都只是对话,补全都不受影响。
常见问题
| 现象 | 检查什么 |
|---|---|
| 模型选择器里没有新加的模型 | 配置文件有没有保存、JSON 有没有写错;重启 VS Code |
返回 404 |
url 是否写了完整的路径,路径和接口类型是否对应 |
返回 401 |
key 是否正确;中转站要的请求头和默认的是否一致,不一致就加 requestHeaders |
| 提示模型不存在 | id 是否和中转站的模型名完全一致 |
| 能对话,智能体模式不动手 | toolCalling 是否为 true;这个模型在中转站那边是否支持工具调用 |
| 贴图片模型看不到 | vision 是否为 true |
| 长对话到后面报错 | maxInputTokens 加 maxOutputTokens 是否超过了模型的上下文长度 |
| 对话正常,但不自动起标题、不能生成提交说明 | 没有登录 GitHub 时要给辅助任务指定模型,见上文 |
| 补全还是 Copilot 原来的 | 补全不走这里,这是官方写明的范围 |
| 找不到添加模型的入口 | 公司账号可能被管理员的策略关掉了 |
接上之后
- 验证拿到的是不是真模型。 能回答不等于给你的是它声称的模型。用同一把 key 到 Veridrop 检测一次,背景见中转站怎么掺假。
- 你的代码会经过中转站。 对话里引用的文件内容会发给模型。涉及公司代码的项目,先想清楚能不能走第三方,见用中转站有什么风险。
- 其他编辑器里的接法:Cline 接入中转站、Zed 接入中转站;Cursor 的情况不一样,见 Cursor 能不能接中转站。