@jeffreycao/copilot-api 1.13.6 → 1.13.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +399 -403
- package/README.zh-CN.md +400 -404
- package/dist/auth-CfRmN-aH.js +2 -0
- package/dist/{auth-HSvAnhak.js → auth-D0Oc4jsb.js} +11 -4
- package/dist/auth-D0Oc4jsb.js.map +1 -0
- package/dist/{config-DODTXsGz.js → config-Dm9cU9KP.js} +7 -2
- package/dist/config-Dm9cU9KP.js.map +1 -0
- package/dist/{debug-CjJqlHl_.js → debug-JJUz1hBb.js} +2 -2
- package/dist/{debug-CjJqlHl_.js.map → debug-JJUz1hBb.js.map} +1 -1
- package/dist/main.js +3 -3
- package/dist/{server-Cuy2sQrU.js → server-JtVsUm_H.js} +89 -50
- package/dist/server-JtVsUm_H.js.map +1 -0
- package/dist/{start-CXcuZf8x.js → start-CDw9cq41.js} +5 -29
- package/dist/start-CDw9cq41.js.map +1 -0
- package/dist/{token-Bi8n0f86.js → token-CejO9iGT.js} +3 -5
- package/dist/token-CejO9iGT.js.map +1 -0
- package/package.json +1 -1
- package/dist/auth-CtydxYcd.js +0 -2
- package/dist/auth-HSvAnhak.js.map +0 -1
- package/dist/config-DODTXsGz.js.map +0 -1
- package/dist/server-Cuy2sQrU.js.map +0 -1
- package/dist/start-CXcuZf8x.js.map +0 -1
- package/dist/token-Bi8n0f86.js.map +0 -1
package/README.zh-CN.md
CHANGED
|
@@ -33,9 +33,7 @@ AI gateway 会从同一个本地端点暴露 OpenAI / Anthropic 兼容 API,让
|
|
|
33
33
|
- **面向 Claude 的更原生 Copilot 路由**:优先使用原生 `/v1/messages`,保留 Claude 风格工具流,支持 Anthropic beta 能力、通过 Responses-capable 模型支持 Claude WebSearch,并保留 subagent / session 标记。
|
|
34
34
|
- **Claude Code 与 OpenCode 集成**:兼容 Claude Code 与 OpenCode,也支持通过 `@ai-sdk/anthropic` 直接作为 Anthropic provider 使用。
|
|
35
35
|
- **灵活的认证与部署选项**:支持交互式登录、直接 token、个人 / Business / Enterprise、GitHub Enterprise、opencode OAuth 和自定义数据目录。
|
|
36
|
-
- **本地控制与可观测性**:提供使用量看板、速率限制、手动审批,以及调试时显示 token 的能力。
|
|
37
36
|
- **多 provider 路由**:可暴露 `/:provider/...` 路由,也可在顶层 API 上使用 `model: "provider/model"`。
|
|
38
|
-
- **更好的 token 与上下文管理**:支持精确 Claude token 计数,以及面向长对话的 GPT 上下文压缩。
|
|
39
37
|
|
|
40
38
|
## 前置要求
|
|
41
39
|
|
|
@@ -58,6 +56,22 @@ bun install
|
|
|
58
56
|
bun run start start
|
|
59
57
|
```
|
|
60
58
|
|
|
59
|
+
## 从源码运行
|
|
60
|
+
|
|
61
|
+
本项目可以通过多种方式从源码运行:
|
|
62
|
+
|
|
63
|
+
### 开发模式
|
|
64
|
+
|
|
65
|
+
```sh
|
|
66
|
+
bun run dev start
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 生产模式
|
|
70
|
+
|
|
71
|
+
```sh
|
|
72
|
+
bun run start start
|
|
73
|
+
```
|
|
74
|
+
|
|
61
75
|
## 通过 npx 使用
|
|
62
76
|
|
|
63
77
|
你可以直接用 npx 运行本项目:
|
|
@@ -90,6 +104,29 @@ npx @jeffreycao/copilot-api@latest auth login --provider dashscope
|
|
|
90
104
|
npx @jeffreycao/copilot-api@latest start
|
|
91
105
|
```
|
|
92
106
|
|
|
107
|
+
## 配合 Docker 使用
|
|
108
|
+
|
|
109
|
+
构建镜像:
|
|
110
|
+
|
|
111
|
+
```sh
|
|
112
|
+
docker build -t copilot-api .
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
通过 bind mount 运行容器,让认证数据在重启后保留:
|
|
116
|
+
|
|
117
|
+
```sh
|
|
118
|
+
mkdir -p ./copilot-data
|
|
119
|
+
docker run -p 4141:4141 -v $(pwd)/copilot-data:/root/.local/share/copilot-api copilot-api
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
这会把宿主机上的 `./copilot-data` 映射到容器内的 `/root/.local/share/copilot-api`,用于持久化 GitHub 认证数据、provider 配置和其他 gateway 状态。
|
|
123
|
+
|
|
124
|
+
也可以直接通过环境变量传入 GitHub token:
|
|
125
|
+
|
|
126
|
+
```sh
|
|
127
|
+
docker run -p 4141:4141 -e GH_TOKEN=your_github_token_here copilot-api
|
|
128
|
+
```
|
|
129
|
+
|
|
93
130
|
## Electron 桌面应用
|
|
94
131
|
|
|
95
132
|
如果你更喜欢图形界面,仓库里还提供了位于 `desktop/` 的 Electron 桌面应用。它支持 GitHub Copilot 登录、OpenAI Codex OAuth,以及 DeepSeek、DashScope、OpenRouter 或自定义 provider 的 API Key 配置。授权或配置 provider 后,可以一键启动或停止本地代理,并在界面里直接查看本地端点、鉴权 Header、可用模型、额度和日志。
|
|
@@ -111,117 +148,395 @@ https://github.com/caozhiyuan/copilot-api/releases
|
|
|
111
148
|
<img src="./docs/screenshots/desktop-token-usage.png" alt="Copilot API 桌面应用 Token 用量页" width="49%" />
|
|
112
149
|
</p>
|
|
113
150
|
|
|
114
|
-
##
|
|
151
|
+
## 与 Claude Code 一起使用
|
|
115
152
|
|
|
116
|
-
|
|
153
|
+
这个 AI gateway 可以为 [Claude Code](https://docs.anthropic.com/en/claude-code) 提供后端能力。Claude Code 是 Anthropic 提供的实验性面向开发者的对话式 AI 助手。
|
|
154
|
+
|
|
155
|
+
有两种方式可以把 Claude Code 配置为使用这个 AI gateway:
|
|
156
|
+
|
|
157
|
+
### 通过 `--claude-code` 标志进行交互式配置
|
|
158
|
+
|
|
159
|
+
执行带 `--claude-code` 的 `start` 命令开始:
|
|
117
160
|
|
|
118
161
|
```sh
|
|
119
|
-
|
|
162
|
+
npx @jeffreycao/copilot-api@latest start --claude-code
|
|
120
163
|
```
|
|
121
164
|
|
|
122
|
-
|
|
165
|
+
你会被提示选择一个主模型,以及一个用于后台任务的 "small, fast" 模型。选择完成后,会有一条命令被复制到剪贴板中。该命令会设置 Claude Code 使用这个 AI gateway 所需的环境变量。
|
|
123
166
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
167
|
+
在新的终端中粘贴并执行这条命令,即可启动 Claude Code。
|
|
168
|
+
|
|
169
|
+
<a id="manual-configuration-with-settingsjson"></a>
|
|
170
|
+
|
|
171
|
+
### 通过 `settings.json` 手动配置
|
|
172
|
+
|
|
173
|
+
另一种方式是在项目根目录中创建 `.claude/settings.json` 文件,并写入 Claude Code 所需的环境变量。这样你就不需要每次都运行交互式配置了。
|
|
174
|
+
|
|
175
|
+
下面是一个 `.claude/settings.json` 示例:
|
|
176
|
+
|
|
177
|
+
```json
|
|
178
|
+
{
|
|
179
|
+
"env": {
|
|
180
|
+
"ANTHROPIC_BASE_URL": "http://localhost:4141",
|
|
181
|
+
"ANTHROPIC_AUTH_TOKEN": "dummy",
|
|
182
|
+
"ANTHROPIC_MODEL": "deepseek/deepseek-v4-pro",
|
|
183
|
+
"ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek/deepseek-v4-pro",
|
|
184
|
+
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek/deepseek-v4-flash",
|
|
185
|
+
"DISABLE_NON_ESSENTIAL_MODEL_CALLS": "1",
|
|
186
|
+
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
|
|
187
|
+
"CLAUDE_CODE_ATTRIBUTION_HEADER": "0",
|
|
188
|
+
"CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION": "false",
|
|
189
|
+
"CLAUDE_CODE_DISABLE_TERMINAL_TITLE": "true",
|
|
190
|
+
"CLAUDE_CODE_ENABLE_AWAY_SUMMARY": "0"
|
|
191
|
+
},
|
|
192
|
+
"permissions": {
|
|
193
|
+
"deny": [
|
|
194
|
+
"mcp__ide__executeCode"
|
|
195
|
+
]
|
|
196
|
+
}
|
|
197
|
+
}
|
|
127
198
|
```
|
|
128
199
|
|
|
129
|
-
|
|
200
|
+
- 请根据需要替换 `ANTHROPIC_MODEL`、`ANTHROPIC_DEFAULT_OPUS_MODEL`、`ANTHROPIC_DEFAULT_SONNET_MODEL` 和 `ANTHROPIC_DEFAULT_HAIKU_MODEL`。配置完成后,请安装 claude code 插件,见 [插件集成](#plugin-integrations)。
|
|
201
|
+
- 将 `CLAUDE_CODE_ATTRIBUTION_HEADER` 设为 `0` 可以阻止 Claude Code 在 system prompt 中附加计费和版本信息,从而避免 prompt cache 失效。
|
|
202
|
+
- 关闭 `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` 和 `CLAUDE_CODE_ENABLE_AWAY_SUMMARY` 可以避免不必要地消耗额度。
|
|
203
|
+
- Claude Code WebSearch 已支持纯搜索请求。Copilot 路径请保持全局 `messageApiWebSearchModel` 指向 Responses-capable GPT 模型或 `provider/model` 别名;provider 路由请使用原生 Anthropic provider 或 `openai-responses` provider。只有在你明确想禁止这类流量时,才需要把 `WebSearch` 加到 `permissions.deny`。
|
|
204
|
+
- 如果使用的不是 Claude 模型,请不要启用 `ENABLE_TOOL_SEARCH`。如果使用的是 Claude 模型,则可以启用 `ENABLE_TOOL_SEARCH`。当前 Claude Code 使用的是客户端 tool search 模式,在该模式下每次加载 defer tools 都需要额外请求一次。
|
|
205
|
+
- `CLAUDE_CODE_AUTO_COMPACT_WINDOW`:设置用于自动压缩计算的上下文容量(以 token 为单位)。默认使用模型自身的上下文窗口:标准模型为 200K,扩展上下文模型为 1M。使用 1M 上下文模型(如 `claude-opus-4-6[1m]`)时,可设置一个较低的值(如 `500000`)将窗口视为 500K 用于压缩计算。该值受限于模型的实际上下文窗口上限。`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` 会基于此值的百分比生效。设置此变量可将压缩阈值与状态栏的 `used_percentage` 解耦(后者始终使用模型的完整上下文窗口)。
|
|
130
206
|
|
|
131
|
-
|
|
207
|
+
更多选项见:[Claude Code settings](https://docs.anthropic.com/en/docs/claude-code/settings#environment-variables)
|
|
208
|
+
|
|
209
|
+
也可以参考 IDE 集成说明:[Add Claude Code to your IDE](https://docs.anthropic.com/en/docs/claude-code/ide-integrations)
|
|
210
|
+
|
|
211
|
+
## 与 OpenCode 一起使用
|
|
212
|
+
|
|
213
|
+
OpenCode 已经有直接的 GitHub Copilot provider。本节适用于你希望让 OpenCode 通过 `@ai-sdk/anthropic` 指向这个 AI gateway,并复用本 README 前面提到的 agent 行为时。
|
|
214
|
+
|
|
215
|
+
### 最小配置
|
|
216
|
+
|
|
217
|
+
使用 OpenCode OAuth app 启动 AI gateway:
|
|
132
218
|
|
|
133
219
|
```sh
|
|
134
|
-
|
|
220
|
+
npx @jeffreycao/copilot-api@latest auth --oauth-app=opencode
|
|
221
|
+
npx @jeffreycao/copilot-api@latest start
|
|
135
222
|
```
|
|
136
223
|
|
|
137
|
-
|
|
224
|
+
然后让 OpenCode 通过 `@ai-sdk/anthropic` 指向这个 AI gateway。
|
|
138
225
|
|
|
139
|
-
|
|
226
|
+
示例 `~/.config/opencode/opencode.json`:
|
|
140
227
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
228
|
+
```json
|
|
229
|
+
{
|
|
230
|
+
"$schema": "https://opencode.ai/config.json",
|
|
231
|
+
"provider": {
|
|
232
|
+
"local": {
|
|
233
|
+
"npm": "@ai-sdk/anthropic",
|
|
234
|
+
"name": "My Local",
|
|
235
|
+
"options": {
|
|
236
|
+
"baseURL": "http://localhost:4141/v1",
|
|
237
|
+
"apiKey": "dummy"
|
|
238
|
+
},
|
|
239
|
+
"models": {
|
|
240
|
+
"gpt-5.4": {
|
|
241
|
+
"name": "gpt-5.4",
|
|
242
|
+
"modalities": {
|
|
243
|
+
"input": ["text", "image"],
|
|
244
|
+
"output": ["text"]
|
|
245
|
+
},
|
|
246
|
+
"limit": {
|
|
247
|
+
"context": 300000,
|
|
248
|
+
"output": 128000
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
"claude-sonnet-4.6": {
|
|
252
|
+
"id": "claude-sonnet-4.6",
|
|
253
|
+
"name": "claude-sonnet-4.6",
|
|
254
|
+
"modalities": {
|
|
255
|
+
"input": ["text", "image"],
|
|
256
|
+
"output": ["text"]
|
|
257
|
+
},
|
|
258
|
+
"limit": {
|
|
259
|
+
"context": 200000,
|
|
260
|
+
"output": 32000
|
|
261
|
+
},
|
|
262
|
+
"options": {
|
|
263
|
+
"thinking": {
|
|
264
|
+
"type": "adaptive"
|
|
265
|
+
},
|
|
266
|
+
"effort": "max"
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
```
|
|
144
274
|
|
|
145
|
-
|
|
275
|
+
这些字段的重要性:
|
|
146
276
|
|
|
147
|
-
|
|
277
|
+
- `npm: "@ai-sdk/anthropic"` 是关键。OpenCode 会以 Anthropic Messages 语义与这个 AI gateway 通信,而不是把一切扁平化为 OpenAI Chat Completions。
|
|
278
|
+
- `options.baseURL` 应设为 `http://localhost:4141/v1`;Anthropic SDK 会自动补上 `/messages`、`/models` 和 `/messages/count_tokens`。
|
|
279
|
+
- 如果你在此代理中启用了 `auth.apiKeys`,请把 `dummy` 替换为真实 key;否则任意占位值都可以。
|
|
148
280
|
|
|
149
|
-
|
|
281
|
+
## 与 Codex 一起使用
|
|
150
282
|
|
|
151
|
-
|
|
152
|
-
| --- | --- | --- | --- |
|
|
153
|
-
| --api-home | API home 目录路径(设置 `COPILOT_API_HOME`) | 无 | 无 |
|
|
154
|
-
| --oauth-app | OAuth app 标识符(设置 `COPILOT_API_OAUTH_APP`) | 无 | 无 |
|
|
155
|
-
| --enterprise-url | GitHub Enterprise URL(设置 `COPILOT_API_ENTERPRISE_URL`) | 无 | 无 |
|
|
283
|
+
这个 AI gateway 也可以为 Codex 提供后端能力。
|
|
156
284
|
|
|
157
|
-
###
|
|
285
|
+
### Codex `config.toml` 参考配置
|
|
158
286
|
|
|
159
|
-
|
|
287
|
+
把以下 `[model_providers.copilot_api]` 段加入你的 Codex `~/.codex/config.toml`:
|
|
160
288
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
| --wait | 达到速率限制时等待,而不是直接报错 | false | -w |
|
|
168
|
-
| --github-token | 直接提供 GitHub token(必须通过 `auth` 子命令生成) | 无 | -g |
|
|
169
|
-
| --claude-code | 生成一个使用 Copilot API 配置启动 Claude Code 的命令 | false | -c |
|
|
170
|
-
| --show-token | 在获取和刷新时显示 GitHub 与 Copilot token | false | 无 |
|
|
171
|
-
| --proxy-env | 从环境变量初始化代理 | false | 无 |
|
|
289
|
+
```toml
|
|
290
|
+
model_provider = "copilot_api"
|
|
291
|
+
model_reasoning_summary = "auto"
|
|
292
|
+
model_verbosity = "medium"
|
|
293
|
+
model_context_window = 272000
|
|
294
|
+
model_auto_compact_token_limit = 244800
|
|
172
295
|
|
|
173
|
-
|
|
296
|
+
[model_providers.copilot_api]
|
|
297
|
+
name = "OpenAI"
|
|
298
|
+
base_url = "http://localhost:4141"
|
|
299
|
+
env_key = "GITHUB_COPILOT_API_KEY"
|
|
300
|
+
requires_openai_auth = true
|
|
301
|
+
supports_websockets = false
|
|
302
|
+
wire_api = "responses"
|
|
303
|
+
request_max_retries = 3
|
|
304
|
+
stream_max_retries = 1
|
|
305
|
+
stream_idle_timeout_ms = 300000
|
|
174
306
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
| --provider | 要登录或配置的 provider(`copilot`、`codex`、`deepseek`、`dashscope`、`openrouter` 或 `custom`) | 交互选择 | 无 |
|
|
178
|
-
| --verbose | 启用详细日志 | false | -v |
|
|
179
|
-
| --show-token | 认证时显示 GitHub token | false | 无 |
|
|
307
|
+
[features]
|
|
308
|
+
remote_compaction_v2 = true
|
|
180
309
|
|
|
181
|
-
|
|
310
|
+
[analytics]
|
|
311
|
+
enabled = false
|
|
312
|
+
```
|
|
182
313
|
|
|
183
|
-
|
|
314
|
+
> [!NOTE]
|
|
315
|
+
> 此配置仅限于 Codex 与 GitHub Copilot provider。`name` 一定要配置为 `"OpenAI"`。它可以缓解 Codex local compact 不命中缓存的问题。如果你已开启 `useResponsesApiContextManagement`(Responses API context management 压缩),通常不会走到 `remote_compaction_v2` 或者 local compact,但如果工具返回 tokens 过大,仍有可能触发。
|
|
184
316
|
|
|
185
|
-
|
|
317
|
+
## GPT Tool Search
|
|
186
318
|
|
|
187
|
-
|
|
319
|
+
对于 `gpt-5.4+` 这类 GPT Responses 模型,这个 AI gateway 可以通过一个很小的 MCP bridge 暴露 Responses `tool_search`。Claude Code 和 opencode 都可以使用同一个 bridge,前提是客户端会加载 MCP server,并且 Anthropic Messages 流量会经过这个 AI gateway。
|
|
188
320
|
|
|
189
|
-
|
|
190
|
-
| --- | --- | --- | --- |
|
|
191
|
-
| --json | 以 JSON 输出调试信息 | false | 无 |
|
|
321
|
+
GPT 模型不要设置 Claude Code 原生的 `ENABLE_TOOL_SEARCH`。这个开关启用的是 Claude Code 自己的客户端 tool search 模式,可能导致 deferred 工具定义不再转发给 AI gateway。这个 AI gateway 需要完整的工具定义,这样才能只保留那一小组常驻加载工具,其余工具统一转换为 Responses deferred namespace。
|
|
192
322
|
|
|
193
|
-
|
|
323
|
+
如果你安装了 `tool-search@copilot-api-marketplace`,Claude Code 会自动带上这个 MCP bridge,可以跳过下面这段 Claude Code MCP 手动配置。
|
|
194
324
|
|
|
195
|
-
|
|
325
|
+
请把 tool search bridge 加到 Claude Code 使用的 MCP 配置中:
|
|
196
326
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
"
|
|
203
|
-
"
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
"
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
327
|
+
```json
|
|
328
|
+
{
|
|
329
|
+
"mcpServers": {
|
|
330
|
+
"tool_search": {
|
|
331
|
+
"type": "stdio",
|
|
332
|
+
"command": "npx",
|
|
333
|
+
"args": ["-y", "@jeffreycao/copilot-api@latest", "mcp"]
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
请把 tool search bridge 加到 opencode 使用的 MCP 配置中:
|
|
340
|
+
|
|
341
|
+
```json
|
|
342
|
+
{
|
|
343
|
+
"mcp": {
|
|
344
|
+
"tool_search": {
|
|
345
|
+
"type": "local",
|
|
346
|
+
"command": ["npx", "-y", "@jeffreycao/copilot-api@latest", "mcp"]
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
本地开发时可以将命令换成 `bun`,参数换成 `["run", "./src/main.ts", "mcp"]`。
|
|
353
|
+
|
|
354
|
+
AI gateway 内部现在会把 OpenAI Responses `tool_search` 配置成 client-executed 模式。deferred tools 仍然会作为可搜索 namespace 暴露给模型,但会明确要求模型直接返回下一步要加载的精确工具名列表。
|
|
355
|
+
|
|
356
|
+
该 bridge 使用直接工具选择,不做 query 搜索。工具入参是 `names`,值为逗号分隔的精确 deferred 工具名,例如 `TaskList,TaskGet,mcp__fetch__fetch`。
|
|
357
|
+
|
|
358
|
+
<a id="plugin-integrations"></a>
|
|
359
|
+
|
|
360
|
+
## 插件集成
|
|
361
|
+
|
|
362
|
+
本项目为 Claude Code 和 opencode 提供了插件集成。
|
|
363
|
+
|
|
364
|
+
#### Claude Code 插件集成(基于 marketplace)
|
|
365
|
+
|
|
366
|
+
Claude Code 集成现在拆分为两个插件:
|
|
367
|
+
|
|
368
|
+
- `agent-inject` 会在 `SubagentStart` 时注入 `__SUBAGENT_MARKER__...`,以便 AI gateway 推导 `x-initiator: agent`。
|
|
369
|
+
- `tool-search` 会注册用于 GPT Responses deferred tool loading 的 `tool_search` MCP bridge。
|
|
370
|
+
|
|
371
|
+
- 本仓库中的 marketplace catalog:`.claude-plugin/marketplace.json`
|
|
372
|
+
- 本仓库中的插件源码:`plugin/claude/agent-inject`、`plugin/claude/tool-search`
|
|
373
|
+
|
|
374
|
+
远程添加 marketplace:
|
|
375
|
+
|
|
376
|
+
```sh
|
|
377
|
+
/plugin marketplace add https://github.com/caozhiyuan/copilot-api.git
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
从 marketplace 安装插件:
|
|
381
|
+
|
|
382
|
+
```sh
|
|
383
|
+
/plugin install agent-inject@copilot-api-marketplace
|
|
384
|
+
/plugin install tool-search@copilot-api-marketplace
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
安装后,`agent-inject` 会在 `SubagentStart` 时注入 `__SUBAGENT_MARKER__...`,AI gateway 会利用它推导 `x-initiator: agent`。
|
|
388
|
+
|
|
389
|
+
`agent-inject` 还会注册一个 `UserPromptSubmit` hook,并返回 `{"continue": true}`;同时它也可以通过环境变量注入 `SessionStart` reminder 规则:
|
|
390
|
+
|
|
391
|
+
- `CLAUDE_PLUGIN_ENABLE_QUESTION_RULES=1` 会自动为 Claude Code 启用两条关于使用 `question` 工具的提醒。你也可以把同样的提醒手动写进 `CLAUDE.md`;见 [CLAUDE.md 或 AGENTS.md 推荐内容](#claudemd-or-agentsmd-recommended-content)。
|
|
392
|
+
- `CLAUDE_PLUGIN_ENABLE_NO_BACKGROUND_AGENTS_RULE=1` 会启用关于避免在 agent hooks 中使用 `run_in_background: true` 的提醒。
|
|
393
|
+
|
|
394
|
+
`tool-search` 插件内置了 [GPT Tool Search](#gpt-tool-search) 一节描述的同一个 MCP bridge,因此安装该插件后,Claude Code 用户无需再手动配置 `tool_search` server。
|
|
395
|
+
|
|
396
|
+
#### Opencode 插件
|
|
397
|
+
|
|
398
|
+
subagent 标记生成器被打包为一个 opencode 插件,位于 `plugin/opencode/subagent-marker.js`。
|
|
399
|
+
|
|
400
|
+
**安装方式:**
|
|
401
|
+
|
|
402
|
+
将插件文件复制到你的 opencode 插件目录:
|
|
403
|
+
|
|
404
|
+
```sh
|
|
405
|
+
# 克隆或下载本仓库后复制该插件
|
|
406
|
+
cp plugin/opencode/subagent-marker.js ~/.config/opencode/plugins/
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
或者手动在 `~/.config/opencode/plugins/subagent-marker.js` 创建该文件,并填入插件内容。
|
|
410
|
+
|
|
411
|
+
**功能:**
|
|
412
|
+
|
|
413
|
+
- 跟踪 subagent 创建的子会话
|
|
414
|
+
- 自动在 subagent 聊天消息前添加 marker system reminder(`__SUBAGENT_MARKER__...`)
|
|
415
|
+
- 设置 `x-session-id` 请求头以跟踪会话
|
|
416
|
+
- 让这个 AI gateway 能够把来自 subagent 的请求识别为 `x-initiator: agent`
|
|
417
|
+
|
|
418
|
+
该插件会挂接到 `session.created`、`session.deleted`、`chat.message` 和 `chat.headers` 事件上,以无缝提供 subagent marker 能力。
|
|
419
|
+
|
|
420
|
+
## 使用量查看器
|
|
421
|
+
|
|
422
|
+
服务启动后,控制台会输出一个 Copilot 使用量看板 URL。这个看板是一个用于监控 API 用量的 Web 界面。
|
|
423
|
+
|
|
424
|
+
1. 启动服务。例如使用 npx:
|
|
425
|
+
```sh
|
|
426
|
+
npx @jeffreycao/copilot-api@latest start
|
|
427
|
+
```
|
|
428
|
+
2. 服务会输出一个 usage viewer 的 URL。将它复制到浏览器中打开,形式大致如下:
|
|
429
|
+
`http://localhost:4141/usage-viewer?endpoint=http://localhost:4141/usage`
|
|
430
|
+
- 如果你在 Windows 上使用 `start.bat` 脚本,这个页面会自动打开。
|
|
431
|
+
|
|
432
|
+
看板提供了更易读的 Copilot 用量视图:
|
|
433
|
+
|
|
434
|
+
> token usage 历史记录需要 Bun 或 Node.js >= 22.13.0。Node.js < 22.13.0 时服务会正常运行,但 token usage 存储会被禁用。
|
|
435
|
+
|
|
436
|
+
- **API Endpoint URL**:通过 URL 查询参数指定 API endpoints,默认指向本地服务。支持手动切换为其他兼容 endpoints。
|
|
437
|
+
- **x-api-key 认证**:如果启用了 API Key 认证,可填入 `x-api-key` 请求头。密钥会持久化保存在浏览器本地存储中。
|
|
438
|
+
- **Period 选择器**:支持 Day / Week / Month 三种时间范围,切换时 URL 参数会自动同步,方便收藏和分享。
|
|
439
|
+
- **Fetch Data**:点击 "Refresh" 按钮加载或刷新使用数据。页面加载时也会自动拉取数据。
|
|
440
|
+
- **Copilot Quotas 额度**:通过进度条展示 Chat、Completions 等不同服务的额度使用情况,悬停可查看已用/剩余详情。
|
|
441
|
+
- **Token Usage 指标卡片**:汇总当前周期的 Total、Input、Output、Cache Read、Cache Write、Requests 和预估费用。
|
|
442
|
+
- **趋势图(Week / Month)**:提供按模型和指标筛选的折线趋势图,点击数据点可查看单日用量明细。
|
|
443
|
+
- **Model Breakdown 表格**:按模型维度列出周期内的请求数、输入/输出/缓存 token 和预计费用。
|
|
444
|
+
- **Request Events 分页列表**:按时间排序的请求事件记录,支持分页浏览,含时间戳、模型、请求 ID 和 token 用量。
|
|
445
|
+
- **Detailed Information**:展示 API 返回的完整 JSON 响应,便于深入分析所有可用统计数据。
|
|
446
|
+
- **URL-based Configuration**:也可通过 `endpoint` 和 `period` 查询参数直接指定 API 端点与时间范围。例如:
|
|
447
|
+
`http://localhost:4141/usage-viewer?endpoint=http://your-api-server/usage&period=week`
|
|
448
|
+
|
|
449
|
+
### Usage Viewer 截图
|
|
450
|
+
|
|
451
|
+
<p align="center">
|
|
452
|
+
<img src="./docs/screenshots/usage-viewer.png" alt="Copilot API Usage Viewer 页面" width="900" />
|
|
453
|
+
</p>
|
|
454
|
+
|
|
455
|
+
## 命令结构
|
|
456
|
+
|
|
457
|
+
Copilot API 现在使用子命令结构,主要命令包括:
|
|
458
|
+
|
|
459
|
+
- `start`:启动 AI gateway 服务。如果已有 GitHub token,则启用 Copilot 路径;如果没有 GitHub token,但存在至少一个启用中的 provider,则按 provider-only 模式启动;如果两者都没有,会引导你配置 provider。
|
|
460
|
+
- `auth`:仅执行 provider 登录或配置流程,不启动服务。可用于 GitHub Copilot 登录、Codex OAuth,或第三方 provider API key 配置。
|
|
461
|
+
- `debug`:显示诊断信息,包括版本、运行时详情、文件路径以及认证状态,便于排障与支持。
|
|
462
|
+
|
|
463
|
+
## 命令行选项
|
|
464
|
+
|
|
465
|
+
### 全局选项
|
|
466
|
+
|
|
467
|
+
以下选项可用于任意子命令。若在子命令之前传入,请使用 `--key=value` 形式:
|
|
468
|
+
|
|
469
|
+
| 选项 | 说明 | 默认值 | 别名 |
|
|
470
|
+
| --- | --- | --- | --- |
|
|
471
|
+
| --api-home | API home 目录路径(设置 `COPILOT_API_HOME`) | 无 | 无 |
|
|
472
|
+
| --oauth-app | OAuth app 标识符(设置 `COPILOT_API_OAUTH_APP`) | 无 | 无 |
|
|
473
|
+
| --enterprise-url | GitHub Enterprise URL(设置 `COPILOT_API_ENTERPRISE_URL`) | 无 | 无 |
|
|
474
|
+
|
|
475
|
+
### Start 命令选项
|
|
476
|
+
|
|
477
|
+
以下是 `start` 命令可用的命令行选项:
|
|
478
|
+
|
|
479
|
+
| 选项 | 说明 | 默认值 | 别名 |
|
|
480
|
+
| --- | --- | --- | --- |
|
|
481
|
+
| --port | 监听端口 | 4141 | -p |
|
|
482
|
+
| --verbose | 启用详细日志 | false | -v |
|
|
483
|
+
| --github-token | 直接提供 GitHub token(必须通过 `auth` 子命令生成) | 无 | -g |
|
|
484
|
+
| --claude-code | 生成一个使用 Copilot API 配置启动 Claude Code 的命令 | false | -c |
|
|
485
|
+
| --show-token | 在获取和刷新时显示 GitHub 与 Copilot token | false | 无 |
|
|
486
|
+
| --proxy-env | 从环境变量初始化代理 | false | 无 |
|
|
487
|
+
|
|
488
|
+
### Auth 命令选项
|
|
489
|
+
|
|
490
|
+
| 选项 | 说明 | 默认值 | 别名 |
|
|
491
|
+
| --- | --- | --- | --- |
|
|
492
|
+
| --provider | 要登录或配置的 provider(`copilot`、`codex`、`opencode-go`、`deepseek`、`dashscope`、`openrouter` 或 `custom`) | 交互选择 | 无 |
|
|
493
|
+
| --verbose | 启用详细日志 | false | -v |
|
|
494
|
+
| --show-token | 认证时显示 GitHub token | false | 无 |
|
|
495
|
+
|
|
496
|
+
只有在需要启用 GitHub Copilot provider 时,才需要执行 `copilot-api auth login --provider copilot`。使用 `codex` 或第三方 provider-only 模式不要求配置 Copilot。
|
|
497
|
+
|
|
498
|
+
使用 `copilot-api auth login --provider deepseek`、`--provider dashscope`、`--provider openrouter` 或 `--provider opencode-go` 可以通过 CLI 快速新增或更新这些常用第三方 provider。DeepSeek 会提示输入掩码显示的 `apiKey`、provider `type`(默认 `anthropic`),以及默认 `https://api.deepseek.com/anthropic` 的 `baseUrl`。DashScope 会提示输入掩码显示的 `apiKey`、provider `type`(默认 `openai-compatible`)和预填默认值的 `baseUrl`。OpenRouter 只提示输入掩码显示的 `apiKey` 和预填默认值的 `baseUrl`,并固定写入 `type: "anthropic"`。OpenCode Go 只提示输入掩码显示的 `apiKey` 和预填默认值的 `baseUrl`,并固定写入 `type: "openai-compatible"`(baseUrl `https://opencode.ai/zen/go`)。配置并启用 provider 后,`copilot-api start` 可在没有 GitHub token 的情况下启动。
|
|
499
|
+
|
|
500
|
+
使用 `copilot-api auth login --provider custom` 可以通过 CLI 新增或更新其他第三方 provider。命令会依次提示输入 provider name、项目支持的 type(`anthropic`、`openai-compatible` 或 `openai-responses`)、`baseUrl`、掩码显示的 `apiKey` 和 `authType`;`authType` 可保持 type 默认值,也可选择 `x-api-key` / `authorization`。
|
|
501
|
+
|
|
502
|
+
### Debug 命令选项
|
|
503
|
+
|
|
504
|
+
| 选项 | 说明 | 默认值 | 别名 |
|
|
505
|
+
| --- | --- | --- | --- |
|
|
506
|
+
| --json | 以 JSON 输出调试信息 | false | 无 |
|
|
507
|
+
|
|
508
|
+
<a id="configuration-configjson"></a>
|
|
509
|
+
|
|
510
|
+
## 配置(config.json)
|
|
511
|
+
|
|
512
|
+
- **位置:** Linux/macOS 为 `~/.local/share/copilot-api/config.json`,Windows 为 `%USERPROFILE%\.local\share\copilot-api\config.json`。
|
|
513
|
+
- **默认结构:**
|
|
514
|
+
```json
|
|
515
|
+
{
|
|
516
|
+
"auth": {
|
|
517
|
+
"apiKeys": [],
|
|
518
|
+
"adminApiKey": "<startup 自动生成>"
|
|
519
|
+
},
|
|
520
|
+
"providers": {},
|
|
521
|
+
"modelMappings": {},
|
|
522
|
+
"extraPrompts": {
|
|
523
|
+
"gpt-5-mini": "<built-in exploration prompt>",
|
|
524
|
+
"gpt-5.3-codex": "<built-in commentary prompt>",
|
|
525
|
+
"gpt-5.4-mini": "<built-in commentary prompt>",
|
|
526
|
+
"gpt-5.4": "<built-in commentary prompt>",
|
|
527
|
+
"gpt-5.5": "<built-in commentary prompt>"
|
|
528
|
+
},
|
|
529
|
+
"smallModel": "gpt-5-mini",
|
|
530
|
+
"useResponsesApiContextManagement": true,
|
|
531
|
+
"modelResponsesApiCompactThresholds": {
|
|
532
|
+
"gpt-5.4": 217600,
|
|
533
|
+
"gpt-5.5": 217600
|
|
534
|
+
},
|
|
535
|
+
"modelReasoningEfforts": {
|
|
536
|
+
"gpt-5-mini": "low",
|
|
537
|
+
"gpt-5.3-codex": "xhigh",
|
|
538
|
+
"gpt-5.4-mini": "xhigh",
|
|
539
|
+
"gpt-5.4": "xhigh",
|
|
225
540
|
"gpt-5.5": "xhigh"
|
|
226
541
|
},
|
|
227
542
|
"useMessagesApi": true,
|
|
@@ -244,11 +559,12 @@ Copilot API 现在使用子命令结构,主要命令包括:
|
|
|
244
559
|
- `temperature`:可选,当请求未指定时使用的默认温度。
|
|
245
560
|
- `topP`:可选,当请求未指定时使用的默认 `top_p`。
|
|
246
561
|
- `topK`:可选,当请求未指定时使用的默认 `top_k`。
|
|
247
|
-
- `extraBody`:可选,按模型合入上游请求体的动态字段;请求体显式同名字段优先。OpenAI 兼容 provider 可用它配置 `enable_thinking`、`preserve_thinking`、`reasoning_effort` 等字段。`thinking_budget` 是 OpenAI 兼容 provider 的特殊覆盖项:配置在 `extraBody` 后,会在 Anthropic `thinking.budget_tokens`
|
|
562
|
+
- `extraBody`:可选,按模型合入上游请求体的动态字段;请求体显式同名字段优先。OpenAI 兼容 provider 可用它配置 `enable_thinking`、`preserve_thinking`、`reasoning_effort` 等字段。`thinking_budget` 是 OpenAI 兼容 provider 的特殊覆盖项:配置在 `extraBody` 后,会在 Anthropic `thinking.budget_tokens` 翻译之后强制写入,并覆盖请求派生出的预算值。对于 provider name 为 `dashscope` 或 `baseUrl` 包含 `aliyuncs.com` 的 provider,请求派生的 `thinking_budget`(来自 Anthropic `thinking.budget_tokens`)会转发给上游;其他 OpenAI 兼容 provider 会移除请求派生的 `thinking_budget`,但 `extraBody` 中的 `thinking_budget` 仍然生效。
|
|
248
563
|
- `pricing`:可选,按模型配置 token 单价,币种使用 provider 的 `pricingCurrency`,单位为每 100 万 tokens。支持 `input`、`output`、`cachedInput`(隐式缓存读)、`explicitCachedInput`(显式缓存读)和 `cacheCreationInput`。如需按输入 token 总量分档,可用带 `maxInputTokens` 的 `tiers`。
|
|
249
|
-
- `contextCache`:可选,OpenAI 兼容 provider 默认 `
|
|
564
|
+
- `contextCache`:可选,provider name 为 `dashscope` 或 `baseUrl` 包含 `aliyuncs.com` 时默认 `true`,其他 OpenAI 兼容 provider 默认 `false`。用于启用阿里云百炼/DashScope 的显式缓存(explicit context cache),会按其 Context Cache 格式在最多 4 个 content block 上注入 `cache_control: { "type": "ephemeral" }`。缓存断点策略与 opencode 主链路保持一致:前 2 条 system 消息 + 最后 2 条非 system 消息。标记字符串 content 时会把 `system` / `user` / `assistant` / `tool` 消息转换为 text content part 数组;已有数组 content 则标记最后一个 part。如果模型本身已经支持隐式缓存,或上游不支持该显式缓存扩展字段,可在模型配置中设为 `false`。支持相同显式缓存扩展的非 DashScope provider 可设为 `true`。
|
|
250
565
|
- `supportPdf`:可选,控制该模型是否支持 PDF/document content。默认 `false`,不支持时会把 PDF 转成提示文本;设为 `true` 时会把 PDF/document 转成 OpenAI Chat Completions 的 file part。
|
|
251
566
|
- `toolContentSupportType`:可选,配置该模型的 tool result content 支持能力,值为 `array`、`image`、`pdf` 的数组。provider 侧未配置时默认只发送 string tool content。若 `supportPdf` 为 `true` 但这里不包含 `pdf`,tool result 里的 file part 会被转成 user role 消息。Copilot 主链路不使用这个 provider 默认,仍按 array + image 且不支持 PDF 的能力处理。
|
|
567
|
+
- `type`:可选,按模型覆盖 provider 的协议类型。支持 `anthropic`、`openai-compatible` 和 `openai-responses`。设置后,provider 的 `/v1/messages` 路由会使用该模型的 type 替代 provider 级别的 type 进行请求路由、认证头解析和上游端点选择。适用于 OpenCode Go 等上游对不同模型同时支持 OpenAI 兼容和 Anthropic Messages API 的 provider。覆盖 type 时,认证头按覆盖后 type 的默认值解析(Anthropic 默认 `x-api-key`;OpenAI 兼容/Responses 默认 `authorization`)。
|
|
252
568
|
|
|
253
569
|
DashScope 模型配置示例:
|
|
254
570
|
```json
|
|
@@ -302,7 +618,7 @@ Copilot API 现在使用子命令结构,主要命令包括:
|
|
|
302
618
|
}
|
|
303
619
|
}
|
|
304
620
|
```
|
|
305
|
-
内置 token 价格覆盖 Codex GPT 模型(USD)、DashScope `qwen3.7-max`、`qwen3.7-plus`、`glm-5.1`、`glm-5.2`(CNY
|
|
621
|
+
内置 token 价格覆盖 Codex GPT 模型(USD)、DashScope `qwen3.7-max`、`qwen3.7-plus`、`glm-5.1`、`glm-5.2`(CNY),DeepSeek `deepseek-v4-flash`、`deepseek-v4-pro`、`deepseek-chat`、`deepseek-reasoner`(CNY),以及 OpenCode Go 模型(`glm-5.2`、`deepseek-v4-flash`、`deepseek-v4-pro`、`kimi-k2.7-code`、`mimo-v2.5`、`mimo-v2.5-pro`、`qwen3.7-plus`、`qwen3.7-max`、`minimax-m2.5`、`minimax-m3`,USD)。用户配置的 `pricing` 优先于内置价格。DashScope 若上游 usage 中出现 `cache_creation_input_tokens` 字段,cached tokens 按显式缓存读价计费;否则 `cachedInput` 作为隐式缓存读价。DeepSeek 的 `prompt_cache_hit_tokens` 会归入 cached input,`prompt_cache_miss_tokens` 会归入普通 input。
|
|
306
622
|
- **smallModel:** 无工具预热消息的回退模型(例如 Claude Code 的探测请求);默认是 `gpt-5-mini`。
|
|
307
623
|
- **useResponsesApiContextManagement:** 当为 `true` 时,代理会为 Responses API 附加 `context_management` 压缩指令。默认值为 `true`。如需全局关闭,可设为 `false`。启用后,请求体会带上 `context_management`,并在后续轮次中仅保留最新的压缩承载内容,因此特别适合长任务场景。
|
|
308
624
|
- **modelResponsesApiCompactThresholds:** 按模型覆盖 Responses API 的 `compact_threshold`,仅在代理自动附加 `context_management` 时使用。它的优先级高于 `resolveResponsesCompactThreshold` 基于 `max_prompt_tokens * ratio` 的兜底阈值。默认将 `gpt-5.4` 和 `gpt-5.5` 设为 `217600`(`272000 * 0.8`)。未列出的模型继续使用原有兜底逻辑。
|
|
@@ -422,328 +738,8 @@ curl http://localhost:4141/dashscope/v1/messages \
|
|
|
422
738
|
-d '{"model":"qwen3.6-plus","max_tokens":1024,"messages":[{"role":"user","content":"hello"}]}'
|
|
423
739
|
```
|
|
424
740
|
|
|
425
|
-
## 与 Claude Code 一起使用
|
|
426
|
-
|
|
427
|
-
这个 AI gateway 可以为 [Claude Code](https://docs.anthropic.com/en/claude-code) 提供后端能力。Claude Code 是 Anthropic 提供的实验性面向开发者的对话式 AI 助手。
|
|
428
|
-
|
|
429
|
-
有两种方式可以把 Claude Code 配置为使用这个 AI gateway:
|
|
430
|
-
|
|
431
|
-
### 通过 `--claude-code` 标志进行交互式配置
|
|
432
|
-
|
|
433
|
-
执行带 `--claude-code` 的 `start` 命令开始:
|
|
434
|
-
|
|
435
|
-
```sh
|
|
436
|
-
npx @jeffreycao/copilot-api@latest start --claude-code
|
|
437
|
-
```
|
|
438
|
-
|
|
439
|
-
你会被提示选择一个主模型,以及一个用于后台任务的 “small, fast” 模型。选择完成后,会有一条命令被复制到剪贴板中。该命令会设置 Claude Code 使用这个 AI gateway 所需的环境变量。
|
|
440
|
-
|
|
441
|
-
在新的终端中粘贴并执行这条命令,即可启动 Claude Code。
|
|
442
|
-
|
|
443
|
-
<a id="manual-configuration-with-settingsjson"></a>
|
|
444
|
-
|
|
445
|
-
### 通过 `settings.json` 手动配置
|
|
446
|
-
|
|
447
|
-
另一种方式是在项目根目录中创建 `.claude/settings.json` 文件,并写入 Claude Code 所需的环境变量。这样你就不需要每次都运行交互式配置了。
|
|
448
|
-
|
|
449
|
-
下面是一个 `.claude/settings.json` 示例:
|
|
450
|
-
|
|
451
|
-
```json
|
|
452
|
-
{
|
|
453
|
-
"env": {
|
|
454
|
-
"ANTHROPIC_BASE_URL": "http://localhost:4141",
|
|
455
|
-
"ANTHROPIC_AUTH_TOKEN": "dummy",
|
|
456
|
-
"ANTHROPIC_MODEL": "deepseek/deepseek-v4-pro",
|
|
457
|
-
"ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek/deepseek-v4-pro",
|
|
458
|
-
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek/deepseek-v4-flash",
|
|
459
|
-
"DISABLE_NON_ESSENTIAL_MODEL_CALLS": "1",
|
|
460
|
-
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
|
|
461
|
-
"CLAUDE_CODE_ATTRIBUTION_HEADER": "0",
|
|
462
|
-
"CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION": "false",
|
|
463
|
-
"CLAUDE_CODE_DISABLE_TERMINAL_TITLE": "true",
|
|
464
|
-
"CLAUDE_CODE_ENABLE_AWAY_SUMMARY": "0"
|
|
465
|
-
},
|
|
466
|
-
"permissions": {
|
|
467
|
-
"deny": [
|
|
468
|
-
"mcp__ide__executeCode"
|
|
469
|
-
]
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
```
|
|
473
|
-
|
|
474
|
-
- 请根据需要替换 `ANTHROPIC_MODEL`、`ANTHROPIC_DEFAULT_OPUS_MODEL`、`ANTHROPIC_DEFAULT_SONNET_MODEL` 和 `ANTHROPIC_DEFAULT_HAIKU_MODEL`。配置完成后,请安装 claude code 插件,见 [插件集成](#plugin-integrations)。
|
|
475
|
-
- 将 `CLAUDE_CODE_ATTRIBUTION_HEADER` 设为 `0` 可以阻止 Claude Code 在 system prompt 中附加计费和版本信息,从而避免 prompt cache 失效。
|
|
476
|
-
- 关闭 `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` 和 `CLAUDE_CODE_ENABLE_AWAY_SUMMARY` 可以避免不必要地消耗额度。
|
|
477
|
-
- Claude Code WebSearch 已支持纯搜索请求。Copilot 路径请保持全局 `messageApiWebSearchModel` 指向 Responses-capable GPT 模型或 `provider/model` 别名;provider 路由请使用原生 Anthropic provider 或 `openai-responses` provider。只有在你明确想禁止这类流量时,才需要把 `WebSearch` 加到 `permissions.deny`。
|
|
478
|
-
- 如果使用的不是 Claude 模型,请不要启用 `ENABLE_TOOL_SEARCH`。如果使用的是 Claude 模型,则可以启用 `ENABLE_TOOL_SEARCH`。当前 Claude Code 使用的是客户端 tool search 模式,在该模式下每次加载 defer tools 都需要额外请求一次。
|
|
479
|
-
- `CLAUDE_CODE_AUTO_COMPACT_WINDOW`:设置用于自动压缩计算的上下文容量(以 token 为单位)。默认使用模型自身的上下文窗口:标准模型为 200K,扩展上下文模型为 1M。使用 1M 上下文模型(如 `claude-opus-4-6[1m]`)时,可设置一个较低的值(如 `500000`)将窗口视为 500K 用于压缩计算。该值受限于模型的实际上下文窗口上限。`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` 会基于此值的百分比生效。设置此变量可将压缩阈值与状态栏的 `used_percentage` 解耦(后者始终使用模型的完整上下文窗口)。
|
|
480
|
-
|
|
481
|
-
更多选项见:[Claude Code settings](https://docs.anthropic.com/en/docs/claude-code/settings#environment-variables)
|
|
482
|
-
|
|
483
|
-
也可以参考 IDE 集成说明:[Add Claude Code to your IDE](https://docs.anthropic.com/en/docs/claude-code/ide-integrations)
|
|
484
|
-
|
|
485
|
-
## GPT Tool Search
|
|
486
|
-
|
|
487
|
-
对于 `gpt-5.4+` 这类 GPT Responses 模型,这个 AI gateway 可以通过一个很小的 MCP bridge 暴露 Responses `tool_search`。Claude Code 和 opencode 都可以使用同一个 bridge,前提是客户端会加载 MCP server,并且 Anthropic Messages 流量会经过这个 AI gateway。
|
|
488
|
-
|
|
489
|
-
GPT 模型不要设置 Claude Code 原生的 `ENABLE_TOOL_SEARCH`。这个开关启用的是 Claude Code 自己的客户端 tool search 模式,可能导致 deferred 工具定义不再转发给 AI gateway。这个 AI gateway 需要完整的工具定义,这样才能只保留那一小组常驻加载工具,其余工具统一转换为 Responses deferred namespace。
|
|
490
|
-
|
|
491
|
-
如果你安装了 `tool-search@copilot-api-marketplace`,Claude Code 会自动带上这个 MCP bridge,可以跳过下面这段 Claude Code MCP 手动配置。
|
|
492
|
-
|
|
493
|
-
请把 tool search bridge 加到 Claude Code 使用的 MCP 配置中:
|
|
494
|
-
|
|
495
|
-
```json
|
|
496
|
-
{
|
|
497
|
-
"mcpServers": {
|
|
498
|
-
"tool_search": {
|
|
499
|
-
"type": "stdio",
|
|
500
|
-
"command": "npx",
|
|
501
|
-
"args": ["-y", "@jeffreycao/copilot-api@latest", "mcp"]
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
```
|
|
506
|
-
|
|
507
|
-
请把 tool search bridge 加到 opencode 使用的 MCP 配置中:
|
|
508
|
-
|
|
509
|
-
```json
|
|
510
|
-
{
|
|
511
|
-
"mcp": {
|
|
512
|
-
"tool_search": {
|
|
513
|
-
"type": "local",
|
|
514
|
-
"command": ["npx", "-y", "@jeffreycao/copilot-api@latest", "mcp"]
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
本地开发时可以将命令换成 `bun`,参数换成 `["run", "./src/main.ts", "mcp"]`。
|
|
521
|
-
|
|
522
|
-
AI gateway 内部现在会把 OpenAI Responses `tool_search` 配置成 client-executed 模式。deferred tools 仍然会作为可搜索 namespace 暴露给模型,但会明确要求模型直接返回下一步要加载的精确工具名列表。
|
|
523
|
-
|
|
524
|
-
该 bridge 使用直接工具选择,不做 query 搜索。工具入参是 `names`,值为逗号分隔的精确 deferred 工具名,例如 `TaskList,TaskGet,mcp__fetch__fetch`。
|
|
525
|
-
|
|
526
|
-
## 与 OpenCode 一起使用
|
|
527
|
-
|
|
528
|
-
OpenCode 已经有直接的 GitHub Copilot provider。本节适用于你希望让 OpenCode 通过 `@ai-sdk/anthropic` 指向这个 AI gateway,并复用本 README 前面提到的 agent 行为时。
|
|
529
|
-
|
|
530
|
-
### 最小配置
|
|
531
|
-
|
|
532
|
-
使用 OpenCode OAuth app 启动 AI gateway:
|
|
533
|
-
|
|
534
|
-
```sh
|
|
535
|
-
npx @jeffreycao/copilot-api@latest auth --oauth-app=opencode
|
|
536
|
-
npx @jeffreycao/copilot-api@latest start
|
|
537
|
-
```
|
|
538
|
-
|
|
539
|
-
然后让 OpenCode 通过 `@ai-sdk/anthropic` 指向这个 AI gateway。
|
|
540
|
-
|
|
541
|
-
示例 `~/.config/opencode/opencode.json`:
|
|
542
|
-
|
|
543
|
-
```json
|
|
544
|
-
{
|
|
545
|
-
"$schema": "https://opencode.ai/config.json",
|
|
546
|
-
"provider": {
|
|
547
|
-
"local": {
|
|
548
|
-
"npm": "@ai-sdk/anthropic",
|
|
549
|
-
"name": "My Local",
|
|
550
|
-
"options": {
|
|
551
|
-
"baseURL": "http://localhost:4141/v1",
|
|
552
|
-
"apiKey": "dummy"
|
|
553
|
-
},
|
|
554
|
-
"models": {
|
|
555
|
-
"gpt-5.4": {
|
|
556
|
-
"name": "gpt-5.4",
|
|
557
|
-
"modalities": {
|
|
558
|
-
"input": ["text", "image"],
|
|
559
|
-
"output": ["text"]
|
|
560
|
-
},
|
|
561
|
-
"limit": {
|
|
562
|
-
"context": 300000,
|
|
563
|
-
"output": 128000
|
|
564
|
-
}
|
|
565
|
-
},
|
|
566
|
-
"claude-sonnet-4.6": {
|
|
567
|
-
"id": "claude-sonnet-4.6",
|
|
568
|
-
"name": "claude-sonnet-4.6",
|
|
569
|
-
"modalities": {
|
|
570
|
-
"input": ["text", "image"],
|
|
571
|
-
"output": ["text"]
|
|
572
|
-
},
|
|
573
|
-
"limit": {
|
|
574
|
-
"context": 200000,
|
|
575
|
-
"output": 32000
|
|
576
|
-
},
|
|
577
|
-
"options": {
|
|
578
|
-
"thinking": {
|
|
579
|
-
"type": "adaptive"
|
|
580
|
-
},
|
|
581
|
-
"effort": "max"
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
```
|
|
589
|
-
|
|
590
|
-
这些字段的重要性:
|
|
591
|
-
|
|
592
|
-
- `npm: "@ai-sdk/anthropic"` 是关键。OpenCode 会以 Anthropic Messages 语义与这个 AI gateway 通信,而不是把一切扁平化为 OpenAI Chat Completions。
|
|
593
|
-
- `options.baseURL` 应设为 `http://localhost:4141/v1`;Anthropic SDK 会自动补上 `/messages`、`/models` 和 `/messages/count_tokens`。
|
|
594
|
-
- `model`、`small_model` 与 `agent.*.model` 让你可以把 `gpt-5.4` 用于 build/plan,同时把探索和后台工作路由到 `gpt-5-mini`。
|
|
595
|
-
- 如果你在此代理中启用了 `auth.apiKeys`,请把 `dummy` 替换为真实 key;否则任意占位值都可以。
|
|
596
|
-
|
|
597
|
-
## 与 Codex 一起使用
|
|
598
|
-
|
|
599
|
-
这个 AI gateway 也可以为 Codex 提供后端能力。
|
|
600
|
-
|
|
601
|
-
### Codex `config.toml` 参考配置
|
|
602
|
-
|
|
603
|
-
把以下 `[model_providers.copilot_api]` 段加入你的 Codex `~/.codex/config.toml`:
|
|
604
|
-
|
|
605
|
-
```toml
|
|
606
|
-
model_provider = "copilot_api"
|
|
607
|
-
model_reasoning_summary = "auto"
|
|
608
|
-
model_verbosity = "medium"
|
|
609
|
-
model_context_window = 272000
|
|
610
|
-
model_auto_compact_token_limit = 244800
|
|
611
|
-
|
|
612
|
-
[model_providers.copilot_api]
|
|
613
|
-
name = "OpenAI"
|
|
614
|
-
base_url = "http://localhost:4141"
|
|
615
|
-
env_key = "GITHUB_COPILOT_API_KEY"
|
|
616
|
-
requires_openai_auth = true
|
|
617
|
-
supports_websockets = false
|
|
618
|
-
wire_api = "responses"
|
|
619
|
-
request_max_retries = 3
|
|
620
|
-
stream_max_retries = 1
|
|
621
|
-
stream_idle_timeout_ms = 300000
|
|
622
|
-
|
|
623
|
-
[features]
|
|
624
|
-
remote_compaction_v2 = true
|
|
625
|
-
|
|
626
|
-
[analytics]
|
|
627
|
-
enabled = false
|
|
628
|
-
```
|
|
629
|
-
|
|
630
|
-
> [!NOTE]
|
|
631
|
-
> 此配置仅限于 Codex 与 GitHub Copilot provider。`name` 一定要配置为 `"OpenAI"`。它可以缓解 Codex local compact 不命中缓存的问题。如果你已开启 `useResponsesApiContextManagement`(Responses API context management 压缩),通常不会走到 `remote_compaction_v2` 或者 local compact,但如果工具返回 tokens 过大,仍有可能触发。
|
|
632
|
-
|
|
633
|
-
<a id="plugin-integrations"></a>
|
|
634
|
-
|
|
635
|
-
## 插件集成
|
|
636
|
-
|
|
637
|
-
本项目为 Claude Code 和 opencode 提供了插件集成。
|
|
638
|
-
|
|
639
|
-
#### Claude Code 插件集成(基于 marketplace)
|
|
640
|
-
|
|
641
|
-
Claude Code 集成现在拆分为两个插件:
|
|
642
|
-
|
|
643
|
-
- `agent-inject` 会在 `SubagentStart` 时注入 `__SUBAGENT_MARKER__...`,以便 AI gateway 推导 `x-initiator: agent`。
|
|
644
|
-
- `tool-search` 会注册用于 GPT Responses deferred tool loading 的 `tool_search` MCP bridge。
|
|
645
|
-
|
|
646
|
-
- 本仓库中的 marketplace catalog:`.claude-plugin/marketplace.json`
|
|
647
|
-
- 本仓库中的插件源码:`plugin/claude/agent-inject`、`plugin/claude/tool-search`
|
|
648
|
-
|
|
649
|
-
远程添加 marketplace:
|
|
650
|
-
|
|
651
|
-
```sh
|
|
652
|
-
/plugin marketplace add https://github.com/caozhiyuan/copilot-api.git
|
|
653
|
-
```
|
|
654
|
-
|
|
655
|
-
从 marketplace 安装插件:
|
|
656
|
-
|
|
657
|
-
```sh
|
|
658
|
-
/plugin install agent-inject@copilot-api-marketplace
|
|
659
|
-
/plugin install tool-search@copilot-api-marketplace
|
|
660
|
-
```
|
|
661
|
-
|
|
662
|
-
安装后,`agent-inject` 会在 `SubagentStart` 时注入 `__SUBAGENT_MARKER__...`,AI gateway 会利用它推导 `x-initiator: agent`。
|
|
663
|
-
|
|
664
|
-
`agent-inject` 还会注册一个 `UserPromptSubmit` hook,并返回 `{"continue": true}`;同时它也可以通过环境变量注入 `SessionStart` reminder 规则:
|
|
665
|
-
|
|
666
|
-
- `CLAUDE_PLUGIN_ENABLE_QUESTION_RULES=1` 会自动为 Claude Code 启用两条关于使用 `question` 工具的提醒。你也可以把同样的提醒手动写进 `CLAUDE.md`;见 [CLAUDE.md 或 AGENTS.md 推荐内容](#claudemd-or-agentsmd-recommended-content)。
|
|
667
|
-
- `CLAUDE_PLUGIN_ENABLE_NO_BACKGROUND_AGENTS_RULE=1` 会启用关于避免在 agent hooks 中使用 `run_in_background: true` 的提醒。
|
|
668
|
-
|
|
669
|
-
`tool-search` 插件内置了 [GPT Tool Search](#gpt-tool-search) 一节描述的同一个 MCP bridge,因此安装该插件后,Claude Code 用户无需再手动配置 `tool_search` server。
|
|
670
|
-
|
|
671
|
-
#### Opencode 插件
|
|
672
|
-
|
|
673
|
-
subagent 标记生成器被打包为一个 opencode 插件,位于 `plugin/opencode/subagent-marker.js`。
|
|
674
|
-
|
|
675
|
-
**安装方式:**
|
|
676
|
-
|
|
677
|
-
将插件文件复制到你的 opencode 插件目录:
|
|
678
|
-
|
|
679
|
-
```sh
|
|
680
|
-
# 克隆或下载本仓库后复制该插件
|
|
681
|
-
cp plugin/opencode/subagent-marker.js ~/.config/opencode/plugins/
|
|
682
|
-
```
|
|
683
|
-
|
|
684
|
-
或者手动在 `~/.config/opencode/plugins/subagent-marker.js` 创建该文件,并填入插件内容。
|
|
685
|
-
|
|
686
|
-
**功能:**
|
|
687
|
-
|
|
688
|
-
- 跟踪 subagent 创建的子会话
|
|
689
|
-
- 自动在 subagent 聊天消息前添加 marker system reminder(`__SUBAGENT_MARKER__...`)
|
|
690
|
-
- 设置 `x-session-id` 请求头以跟踪会话
|
|
691
|
-
- 让这个 AI gateway 能够把来自 subagent 的请求识别为 `x-initiator: agent`
|
|
692
|
-
|
|
693
|
-
该插件会挂接到 `session.created`、`session.deleted`、`chat.message` 和 `chat.headers` 事件上,以无缝提供 subagent marker 能力。
|
|
694
|
-
|
|
695
|
-
## 使用量查看器
|
|
696
|
-
|
|
697
|
-
服务启动后,控制台会输出一个 Copilot 使用量看板 URL。这个看板是一个用于监控 API 用量的 Web 界面。
|
|
698
|
-
|
|
699
|
-
1. 启动服务。例如使用 npx:
|
|
700
|
-
```sh
|
|
701
|
-
npx @jeffreycao/copilot-api@latest start
|
|
702
|
-
```
|
|
703
|
-
2. 服务会输出一个 usage viewer 的 URL。将它复制到浏览器中打开,形式大致如下:
|
|
704
|
-
`http://localhost:4141/usage-viewer?endpoint=http://localhost:4141/usage`
|
|
705
|
-
- 如果你在 Windows 上使用 `start.bat` 脚本,这个页面会自动打开。
|
|
706
|
-
|
|
707
|
-
看板提供了更易读的 Copilot 用量视图:
|
|
708
|
-
|
|
709
|
-
> token usage 历史记录需要 Bun 或 Node.js >= 22.13.0。Node.js < 22.13.0 时服务会正常运行,但 token usage 存储会被禁用。
|
|
710
|
-
|
|
711
|
-
- **API Endpoint URL**:看板会通过 URL 查询参数,默认从本地服务端点拉取数据。你也可以把这个 URL 改成任意其他兼容 API 端点。
|
|
712
|
-
- **Fetch Data**:点击 “Fetch” 按钮即可加载或刷新使用数据。页面首次加载时也会自动拉取。
|
|
713
|
-
- **Usage Quotas**:使用进度条汇总展示 Chat、Completions 等不同服务的额度使用情况。
|
|
714
|
-
- **Detailed Information**:可查看 API 返回的完整 JSON,以便深入分析所有可用统计信息。
|
|
715
|
-
- **URL-based Configuration**:你也可以直接通过 URL 查询参数指定 API 端点,便于收藏或分享。例如:
|
|
716
|
-
`http://localhost:4141/usage-viewer?endpoint=http://your-api-server/usage`
|
|
717
|
-
|
|
718
|
-
### Usage Viewer 截图
|
|
719
|
-
|
|
720
|
-
<p align="center">
|
|
721
|
-
<img src="./docs/screenshots/usage-viewer.png" alt="Copilot API Usage Viewer 页面" width="900" />
|
|
722
|
-
</p>
|
|
723
|
-
|
|
724
|
-
## 从源码运行
|
|
725
|
-
|
|
726
|
-
本项目可以通过多种方式从源码运行:
|
|
727
|
-
|
|
728
|
-
### 开发模式
|
|
729
|
-
|
|
730
|
-
```sh
|
|
731
|
-
bun run dev start
|
|
732
|
-
```
|
|
733
|
-
|
|
734
|
-
### 生产模式
|
|
735
|
-
|
|
736
|
-
```sh
|
|
737
|
-
bun run start start
|
|
738
|
-
```
|
|
739
|
-
|
|
740
741
|
## 使用建议
|
|
741
742
|
|
|
742
|
-
- 为避免触发 GitHub Copilot 速率限制,可以使用以下参数:
|
|
743
|
-
- `--manual`:为每个请求启用手动审批,让你完全控制何时发送请求。
|
|
744
|
-
- `--rate-limit <seconds>`:强制请求之间至少保持一定秒数的间隔。例如 `copilot-api start --rate-limit 30` 会确保两次请求之间至少间隔 30 秒。
|
|
745
|
-
- `--wait`:与 `--rate-limit` 配合使用。在命中速率限制时,服务会等待冷却结束,而不是直接返回错误。对于不会自动重试的客户端,这会很有帮助。
|
|
746
|
-
|
|
747
743
|
<a id="claudemd-or-agentsmd-recommended-content"></a>
|
|
748
744
|
|
|
749
745
|
### CLAUDE.md 或 AGENTS.md 推荐内容
|