@jeffreycao/copilot-api 1.13.6 → 1.13.7
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 +393 -395
- package/README.zh-CN.md +394 -396
- package/dist/auth-BlEMGJZf.js +2 -0
- package/dist/{auth-HSvAnhak.js → auth-DDTGPBsT.js} +2 -2
- package/dist/{auth-HSvAnhak.js.map → auth-DDTGPBsT.js.map} +1 -1
- package/dist/main.js +2 -2
- package/dist/{server-Cuy2sQrU.js → server-Bh5h_1pZ.js} +2 -39
- package/dist/server-Bh5h_1pZ.js.map +1 -0
- package/dist/{start-CXcuZf8x.js → start-JmZKtMkn.js} +4 -28
- package/dist/start-JmZKtMkn.js.map +1 -0
- package/dist/{token-Bi8n0f86.js → token-BOovYuN5.js} +2 -4
- package/dist/token-BOovYuN5.js.map +1 -0
- package/package.json +1 -1
- package/dist/auth-CtydxYcd.js +0 -2
- 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
|
@@ -58,6 +58,22 @@ bun install
|
|
|
58
58
|
bun run start start
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
+
## 从源码运行
|
|
62
|
+
|
|
63
|
+
本项目可以通过多种方式从源码运行:
|
|
64
|
+
|
|
65
|
+
### 开发模式
|
|
66
|
+
|
|
67
|
+
```sh
|
|
68
|
+
bun run dev start
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 生产模式
|
|
72
|
+
|
|
73
|
+
```sh
|
|
74
|
+
bun run start start
|
|
75
|
+
```
|
|
76
|
+
|
|
61
77
|
## 通过 npx 使用
|
|
62
78
|
|
|
63
79
|
你可以直接用 npx 运行本项目:
|
|
@@ -90,6 +106,29 @@ npx @jeffreycao/copilot-api@latest auth login --provider dashscope
|
|
|
90
106
|
npx @jeffreycao/copilot-api@latest start
|
|
91
107
|
```
|
|
92
108
|
|
|
109
|
+
## 配合 Docker 使用
|
|
110
|
+
|
|
111
|
+
构建镜像:
|
|
112
|
+
|
|
113
|
+
```sh
|
|
114
|
+
docker build -t copilot-api .
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
通过 bind mount 运行容器,让认证数据在重启后保留:
|
|
118
|
+
|
|
119
|
+
```sh
|
|
120
|
+
mkdir -p ./copilot-data
|
|
121
|
+
docker run -p 4141:4141 -v $(pwd)/copilot-data:/root/.local/share/copilot-api copilot-api
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
这会把宿主机上的 `./copilot-data` 映射到容器内的 `/root/.local/share/copilot-api`,用于持久化 GitHub 认证数据、provider 配置和其他 gateway 状态。
|
|
125
|
+
|
|
126
|
+
也可以直接通过环境变量传入 GitHub token:
|
|
127
|
+
|
|
128
|
+
```sh
|
|
129
|
+
docker run -p 4141:4141 -e GH_TOKEN=your_github_token_here copilot-api
|
|
130
|
+
```
|
|
131
|
+
|
|
93
132
|
## Electron 桌面应用
|
|
94
133
|
|
|
95
134
|
如果你更喜欢图形界面,仓库里还提供了位于 `desktop/` 的 Electron 桌面应用。它支持 GitHub Copilot 登录、OpenAI Codex OAuth,以及 DeepSeek、DashScope、OpenRouter 或自定义 provider 的 API Key 配置。授权或配置 provider 后,可以一键启动或停止本地代理,并在界面里直接查看本地端点、鉴权 Header、可用模型、额度和日志。
|
|
@@ -111,114 +150,393 @@ https://github.com/caozhiyuan/copilot-api/releases
|
|
|
111
150
|
<img src="./docs/screenshots/desktop-token-usage.png" alt="Copilot API 桌面应用 Token 用量页" width="49%" />
|
|
112
151
|
</p>
|
|
113
152
|
|
|
114
|
-
##
|
|
153
|
+
## 与 Claude Code 一起使用
|
|
115
154
|
|
|
116
|
-
|
|
155
|
+
这个 AI gateway 可以为 [Claude Code](https://docs.anthropic.com/en/claude-code) 提供后端能力。Claude Code 是 Anthropic 提供的实验性面向开发者的对话式 AI 助手。
|
|
156
|
+
|
|
157
|
+
有两种方式可以把 Claude Code 配置为使用这个 AI gateway:
|
|
158
|
+
|
|
159
|
+
### 通过 `--claude-code` 标志进行交互式配置
|
|
160
|
+
|
|
161
|
+
执行带 `--claude-code` 的 `start` 命令开始:
|
|
117
162
|
|
|
118
163
|
```sh
|
|
119
|
-
|
|
164
|
+
npx @jeffreycao/copilot-api@latest start --claude-code
|
|
120
165
|
```
|
|
121
166
|
|
|
122
|
-
|
|
167
|
+
你会被提示选择一个主模型,以及一个用于后台任务的 "small, fast" 模型。选择完成后,会有一条命令被复制到剪贴板中。该命令会设置 Claude Code 使用这个 AI gateway 所需的环境变量。
|
|
123
168
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
169
|
+
在新的终端中粘贴并执行这条命令,即可启动 Claude Code。
|
|
170
|
+
|
|
171
|
+
<a id="manual-configuration-with-settingsjson"></a>
|
|
172
|
+
|
|
173
|
+
### 通过 `settings.json` 手动配置
|
|
174
|
+
|
|
175
|
+
另一种方式是在项目根目录中创建 `.claude/settings.json` 文件,并写入 Claude Code 所需的环境变量。这样你就不需要每次都运行交互式配置了。
|
|
176
|
+
|
|
177
|
+
下面是一个 `.claude/settings.json` 示例:
|
|
178
|
+
|
|
179
|
+
```json
|
|
180
|
+
{
|
|
181
|
+
"env": {
|
|
182
|
+
"ANTHROPIC_BASE_URL": "http://localhost:4141",
|
|
183
|
+
"ANTHROPIC_AUTH_TOKEN": "dummy",
|
|
184
|
+
"ANTHROPIC_MODEL": "deepseek/deepseek-v4-pro",
|
|
185
|
+
"ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek/deepseek-v4-pro",
|
|
186
|
+
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek/deepseek-v4-flash",
|
|
187
|
+
"DISABLE_NON_ESSENTIAL_MODEL_CALLS": "1",
|
|
188
|
+
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
|
|
189
|
+
"CLAUDE_CODE_ATTRIBUTION_HEADER": "0",
|
|
190
|
+
"CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION": "false",
|
|
191
|
+
"CLAUDE_CODE_DISABLE_TERMINAL_TITLE": "true",
|
|
192
|
+
"CLAUDE_CODE_ENABLE_AWAY_SUMMARY": "0"
|
|
193
|
+
},
|
|
194
|
+
"permissions": {
|
|
195
|
+
"deny": [
|
|
196
|
+
"mcp__ide__executeCode"
|
|
197
|
+
]
|
|
198
|
+
}
|
|
199
|
+
}
|
|
127
200
|
```
|
|
128
201
|
|
|
129
|
-
|
|
202
|
+
- 请根据需要替换 `ANTHROPIC_MODEL`、`ANTHROPIC_DEFAULT_OPUS_MODEL`、`ANTHROPIC_DEFAULT_SONNET_MODEL` 和 `ANTHROPIC_DEFAULT_HAIKU_MODEL`。配置完成后,请安装 claude code 插件,见 [插件集成](#plugin-integrations)。
|
|
203
|
+
- 将 `CLAUDE_CODE_ATTRIBUTION_HEADER` 设为 `0` 可以阻止 Claude Code 在 system prompt 中附加计费和版本信息,从而避免 prompt cache 失效。
|
|
204
|
+
- 关闭 `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` 和 `CLAUDE_CODE_ENABLE_AWAY_SUMMARY` 可以避免不必要地消耗额度。
|
|
205
|
+
- Claude Code WebSearch 已支持纯搜索请求。Copilot 路径请保持全局 `messageApiWebSearchModel` 指向 Responses-capable GPT 模型或 `provider/model` 别名;provider 路由请使用原生 Anthropic provider 或 `openai-responses` provider。只有在你明确想禁止这类流量时,才需要把 `WebSearch` 加到 `permissions.deny`。
|
|
206
|
+
- 如果使用的不是 Claude 模型,请不要启用 `ENABLE_TOOL_SEARCH`。如果使用的是 Claude 模型,则可以启用 `ENABLE_TOOL_SEARCH`。当前 Claude Code 使用的是客户端 tool search 模式,在该模式下每次加载 defer tools 都需要额外请求一次。
|
|
207
|
+
- `CLAUDE_CODE_AUTO_COMPACT_WINDOW`:设置用于自动压缩计算的上下文容量(以 token 为单位)。默认使用模型自身的上下文窗口:标准模型为 200K,扩展上下文模型为 1M。使用 1M 上下文模型(如 `claude-opus-4-6[1m]`)时,可设置一个较低的值(如 `500000`)将窗口视为 500K 用于压缩计算。该值受限于模型的实际上下文窗口上限。`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` 会基于此值的百分比生效。设置此变量可将压缩阈值与状态栏的 `used_percentage` 解耦(后者始终使用模型的完整上下文窗口)。
|
|
130
208
|
|
|
131
|
-
|
|
209
|
+
更多选项见:[Claude Code settings](https://docs.anthropic.com/en/docs/claude-code/settings#environment-variables)
|
|
210
|
+
|
|
211
|
+
也可以参考 IDE 集成说明:[Add Claude Code to your IDE](https://docs.anthropic.com/en/docs/claude-code/ide-integrations)
|
|
212
|
+
|
|
213
|
+
## 与 OpenCode 一起使用
|
|
214
|
+
|
|
215
|
+
OpenCode 已经有直接的 GitHub Copilot provider。本节适用于你希望让 OpenCode 通过 `@ai-sdk/anthropic` 指向这个 AI gateway,并复用本 README 前面提到的 agent 行为时。
|
|
216
|
+
|
|
217
|
+
### 最小配置
|
|
218
|
+
|
|
219
|
+
使用 OpenCode OAuth app 启动 AI gateway:
|
|
132
220
|
|
|
133
221
|
```sh
|
|
134
|
-
|
|
222
|
+
npx @jeffreycao/copilot-api@latest auth --oauth-app=opencode
|
|
223
|
+
npx @jeffreycao/copilot-api@latest start
|
|
135
224
|
```
|
|
136
225
|
|
|
137
|
-
|
|
226
|
+
然后让 OpenCode 通过 `@ai-sdk/anthropic` 指向这个 AI gateway。
|
|
138
227
|
|
|
139
|
-
|
|
228
|
+
示例 `~/.config/opencode/opencode.json`:
|
|
140
229
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
230
|
+
```json
|
|
231
|
+
{
|
|
232
|
+
"$schema": "https://opencode.ai/config.json",
|
|
233
|
+
"provider": {
|
|
234
|
+
"local": {
|
|
235
|
+
"npm": "@ai-sdk/anthropic",
|
|
236
|
+
"name": "My Local",
|
|
237
|
+
"options": {
|
|
238
|
+
"baseURL": "http://localhost:4141/v1",
|
|
239
|
+
"apiKey": "dummy"
|
|
240
|
+
},
|
|
241
|
+
"models": {
|
|
242
|
+
"gpt-5.4": {
|
|
243
|
+
"name": "gpt-5.4",
|
|
244
|
+
"modalities": {
|
|
245
|
+
"input": ["text", "image"],
|
|
246
|
+
"output": ["text"]
|
|
247
|
+
},
|
|
248
|
+
"limit": {
|
|
249
|
+
"context": 300000,
|
|
250
|
+
"output": 128000
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
"claude-sonnet-4.6": {
|
|
254
|
+
"id": "claude-sonnet-4.6",
|
|
255
|
+
"name": "claude-sonnet-4.6",
|
|
256
|
+
"modalities": {
|
|
257
|
+
"input": ["text", "image"],
|
|
258
|
+
"output": ["text"]
|
|
259
|
+
},
|
|
260
|
+
"limit": {
|
|
261
|
+
"context": 200000,
|
|
262
|
+
"output": 32000
|
|
263
|
+
},
|
|
264
|
+
"options": {
|
|
265
|
+
"thinking": {
|
|
266
|
+
"type": "adaptive"
|
|
267
|
+
},
|
|
268
|
+
"effort": "max"
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
```
|
|
144
276
|
|
|
145
|
-
|
|
277
|
+
这些字段的重要性:
|
|
146
278
|
|
|
147
|
-
|
|
279
|
+
- `npm: "@ai-sdk/anthropic"` 是关键。OpenCode 会以 Anthropic Messages 语义与这个 AI gateway 通信,而不是把一切扁平化为 OpenAI Chat Completions。
|
|
280
|
+
- `options.baseURL` 应设为 `http://localhost:4141/v1`;Anthropic SDK 会自动补上 `/messages`、`/models` 和 `/messages/count_tokens`。
|
|
281
|
+
- `model`、`small_model` 与 `agent.*.model` 让你可以把 `gpt-5.4` 用于 build/plan,同时把探索和后台工作路由到 `gpt-5-mini`。
|
|
282
|
+
- 如果你在此代理中启用了 `auth.apiKeys`,请把 `dummy` 替换为真实 key;否则任意占位值都可以。
|
|
148
283
|
|
|
149
|
-
|
|
284
|
+
## 与 Codex 一起使用
|
|
150
285
|
|
|
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`) | 无 | 无 |
|
|
286
|
+
这个 AI gateway 也可以为 Codex 提供后端能力。
|
|
156
287
|
|
|
157
|
-
###
|
|
288
|
+
### Codex `config.toml` 参考配置
|
|
158
289
|
|
|
159
|
-
|
|
290
|
+
把以下 `[model_providers.copilot_api]` 段加入你的 Codex `~/.codex/config.toml`:
|
|
160
291
|
|
|
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 | 无 |
|
|
292
|
+
```toml
|
|
293
|
+
model_provider = "copilot_api"
|
|
294
|
+
model_reasoning_summary = "auto"
|
|
295
|
+
model_verbosity = "medium"
|
|
296
|
+
model_context_window = 272000
|
|
297
|
+
model_auto_compact_token_limit = 244800
|
|
172
298
|
|
|
173
|
-
|
|
299
|
+
[model_providers.copilot_api]
|
|
300
|
+
name = "OpenAI"
|
|
301
|
+
base_url = "http://localhost:4141"
|
|
302
|
+
env_key = "GITHUB_COPILOT_API_KEY"
|
|
303
|
+
requires_openai_auth = true
|
|
304
|
+
supports_websockets = false
|
|
305
|
+
wire_api = "responses"
|
|
306
|
+
request_max_retries = 3
|
|
307
|
+
stream_max_retries = 1
|
|
308
|
+
stream_idle_timeout_ms = 300000
|
|
174
309
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
| --provider | 要登录或配置的 provider(`copilot`、`codex`、`deepseek`、`dashscope`、`openrouter` 或 `custom`) | 交互选择 | 无 |
|
|
178
|
-
| --verbose | 启用详细日志 | false | -v |
|
|
179
|
-
| --show-token | 认证时显示 GitHub token | false | 无 |
|
|
310
|
+
[features]
|
|
311
|
+
remote_compaction_v2 = true
|
|
180
312
|
|
|
181
|
-
|
|
313
|
+
[analytics]
|
|
314
|
+
enabled = false
|
|
315
|
+
```
|
|
182
316
|
|
|
183
|
-
|
|
317
|
+
> [!NOTE]
|
|
318
|
+
> 此配置仅限于 Codex 与 GitHub Copilot provider。`name` 一定要配置为 `"OpenAI"`。它可以缓解 Codex local compact 不命中缓存的问题。如果你已开启 `useResponsesApiContextManagement`(Responses API context management 压缩),通常不会走到 `remote_compaction_v2` 或者 local compact,但如果工具返回 tokens 过大,仍有可能触发。
|
|
184
319
|
|
|
185
|
-
|
|
320
|
+
## GPT Tool Search
|
|
186
321
|
|
|
187
|
-
|
|
322
|
+
对于 `gpt-5.4+` 这类 GPT Responses 模型,这个 AI gateway 可以通过一个很小的 MCP bridge 暴露 Responses `tool_search`。Claude Code 和 opencode 都可以使用同一个 bridge,前提是客户端会加载 MCP server,并且 Anthropic Messages 流量会经过这个 AI gateway。
|
|
188
323
|
|
|
189
|
-
|
|
190
|
-
| --- | --- | --- | --- |
|
|
191
|
-
| --json | 以 JSON 输出调试信息 | false | 无 |
|
|
324
|
+
GPT 模型不要设置 Claude Code 原生的 `ENABLE_TOOL_SEARCH`。这个开关启用的是 Claude Code 自己的客户端 tool search 模式,可能导致 deferred 工具定义不再转发给 AI gateway。这个 AI gateway 需要完整的工具定义,这样才能只保留那一小组常驻加载工具,其余工具统一转换为 Responses deferred namespace。
|
|
192
325
|
|
|
193
|
-
|
|
326
|
+
如果你安装了 `tool-search@copilot-api-marketplace`,Claude Code 会自动带上这个 MCP bridge,可以跳过下面这段 Claude Code MCP 手动配置。
|
|
194
327
|
|
|
195
|
-
|
|
328
|
+
请把 tool search bridge 加到 Claude Code 使用的 MCP 配置中:
|
|
196
329
|
|
|
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
|
-
|
|
330
|
+
```json
|
|
331
|
+
{
|
|
332
|
+
"mcpServers": {
|
|
333
|
+
"tool_search": {
|
|
334
|
+
"type": "stdio",
|
|
335
|
+
"command": "npx",
|
|
336
|
+
"args": ["-y", "@jeffreycao/copilot-api@latest", "mcp"]
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
请把 tool search bridge 加到 opencode 使用的 MCP 配置中:
|
|
343
|
+
|
|
344
|
+
```json
|
|
345
|
+
{
|
|
346
|
+
"mcp": {
|
|
347
|
+
"tool_search": {
|
|
348
|
+
"type": "local",
|
|
349
|
+
"command": ["npx", "-y", "@jeffreycao/copilot-api@latest", "mcp"]
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
本地开发时可以将命令换成 `bun`,参数换成 `["run", "./src/main.ts", "mcp"]`。
|
|
356
|
+
|
|
357
|
+
AI gateway 内部现在会把 OpenAI Responses `tool_search` 配置成 client-executed 模式。deferred tools 仍然会作为可搜索 namespace 暴露给模型,但会明确要求模型直接返回下一步要加载的精确工具名列表。
|
|
358
|
+
|
|
359
|
+
该 bridge 使用直接工具选择,不做 query 搜索。工具入参是 `names`,值为逗号分隔的精确 deferred 工具名,例如 `TaskList,TaskGet,mcp__fetch__fetch`。
|
|
360
|
+
|
|
361
|
+
<a id="plugin-integrations"></a>
|
|
362
|
+
|
|
363
|
+
## 插件集成
|
|
364
|
+
|
|
365
|
+
本项目为 Claude Code 和 opencode 提供了插件集成。
|
|
366
|
+
|
|
367
|
+
#### Claude Code 插件集成(基于 marketplace)
|
|
368
|
+
|
|
369
|
+
Claude Code 集成现在拆分为两个插件:
|
|
370
|
+
|
|
371
|
+
- `agent-inject` 会在 `SubagentStart` 时注入 `__SUBAGENT_MARKER__...`,以便 AI gateway 推导 `x-initiator: agent`。
|
|
372
|
+
- `tool-search` 会注册用于 GPT Responses deferred tool loading 的 `tool_search` MCP bridge。
|
|
373
|
+
|
|
374
|
+
- 本仓库中的 marketplace catalog:`.claude-plugin/marketplace.json`
|
|
375
|
+
- 本仓库中的插件源码:`plugin/claude/agent-inject`、`plugin/claude/tool-search`
|
|
376
|
+
|
|
377
|
+
远程添加 marketplace:
|
|
378
|
+
|
|
379
|
+
```sh
|
|
380
|
+
/plugin marketplace add https://github.com/caozhiyuan/copilot-api.git
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
从 marketplace 安装插件:
|
|
384
|
+
|
|
385
|
+
```sh
|
|
386
|
+
/plugin install agent-inject@copilot-api-marketplace
|
|
387
|
+
/plugin install tool-search@copilot-api-marketplace
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
安装后,`agent-inject` 会在 `SubagentStart` 时注入 `__SUBAGENT_MARKER__...`,AI gateway 会利用它推导 `x-initiator: agent`。
|
|
391
|
+
|
|
392
|
+
`agent-inject` 还会注册一个 `UserPromptSubmit` hook,并返回 `{"continue": true}`;同时它也可以通过环境变量注入 `SessionStart` reminder 规则:
|
|
393
|
+
|
|
394
|
+
- `CLAUDE_PLUGIN_ENABLE_QUESTION_RULES=1` 会自动为 Claude Code 启用两条关于使用 `question` 工具的提醒。你也可以把同样的提醒手动写进 `CLAUDE.md`;见 [CLAUDE.md 或 AGENTS.md 推荐内容](#claudemd-or-agentsmd-recommended-content)。
|
|
395
|
+
- `CLAUDE_PLUGIN_ENABLE_NO_BACKGROUND_AGENTS_RULE=1` 会启用关于避免在 agent hooks 中使用 `run_in_background: true` 的提醒。
|
|
396
|
+
|
|
397
|
+
`tool-search` 插件内置了 [GPT Tool Search](#gpt-tool-search) 一节描述的同一个 MCP bridge,因此安装该插件后,Claude Code 用户无需再手动配置 `tool_search` server。
|
|
398
|
+
|
|
399
|
+
#### Opencode 插件
|
|
400
|
+
|
|
401
|
+
subagent 标记生成器被打包为一个 opencode 插件,位于 `plugin/opencode/subagent-marker.js`。
|
|
402
|
+
|
|
403
|
+
**安装方式:**
|
|
404
|
+
|
|
405
|
+
将插件文件复制到你的 opencode 插件目录:
|
|
406
|
+
|
|
407
|
+
```sh
|
|
408
|
+
# 克隆或下载本仓库后复制该插件
|
|
409
|
+
cp plugin/opencode/subagent-marker.js ~/.config/opencode/plugins/
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
或者手动在 `~/.config/opencode/plugins/subagent-marker.js` 创建该文件,并填入插件内容。
|
|
413
|
+
|
|
414
|
+
**功能:**
|
|
415
|
+
|
|
416
|
+
- 跟踪 subagent 创建的子会话
|
|
417
|
+
- 自动在 subagent 聊天消息前添加 marker system reminder(`__SUBAGENT_MARKER__...`)
|
|
418
|
+
- 设置 `x-session-id` 请求头以跟踪会话
|
|
419
|
+
- 让这个 AI gateway 能够把来自 subagent 的请求识别为 `x-initiator: agent`
|
|
420
|
+
|
|
421
|
+
该插件会挂接到 `session.created`、`session.deleted`、`chat.message` 和 `chat.headers` 事件上,以无缝提供 subagent marker 能力。
|
|
422
|
+
|
|
423
|
+
## 使用量查看器
|
|
424
|
+
|
|
425
|
+
服务启动后,控制台会输出一个 Copilot 使用量看板 URL。这个看板是一个用于监控 API 用量的 Web 界面。
|
|
426
|
+
|
|
427
|
+
1. 启动服务。例如使用 npx:
|
|
428
|
+
```sh
|
|
429
|
+
npx @jeffreycao/copilot-api@latest start
|
|
430
|
+
```
|
|
431
|
+
2. 服务会输出一个 usage viewer 的 URL。将它复制到浏览器中打开,形式大致如下:
|
|
432
|
+
`http://localhost:4141/usage-viewer?endpoint=http://localhost:4141/usage`
|
|
433
|
+
- 如果你在 Windows 上使用 `start.bat` 脚本,这个页面会自动打开。
|
|
434
|
+
|
|
435
|
+
看板提供了更易读的 Copilot 用量视图:
|
|
436
|
+
|
|
437
|
+
> token usage 历史记录需要 Bun 或 Node.js >= 22.13.0。Node.js < 22.13.0 时服务会正常运行,但 token usage 存储会被禁用。
|
|
438
|
+
|
|
439
|
+
- **API Endpoint URL**:通过 URL 查询参数指定 API endpoints,默认指向本地服务。支持手动切换为其他兼容 endpoints。
|
|
440
|
+
- **x-api-key 认证**:如果启用了 API Key 认证,可填入 `x-api-key` 请求头。密钥会持久化保存在浏览器本地存储中。
|
|
441
|
+
- **Period 选择器**:支持 Day / Week / Month 三种时间范围,切换时 URL 参数会自动同步,方便收藏和分享。
|
|
442
|
+
- **Fetch Data**:点击 "Refresh" 按钮加载或刷新使用数据。页面加载时也会自动拉取数据。
|
|
443
|
+
- **Copilot Quotas 额度**:通过进度条展示 Chat、Completions 等不同服务的额度使用情况,悬停可查看已用/剩余详情。
|
|
444
|
+
- **Token Usage 指标卡片**:汇总当前周期的 Total、Input、Output、Cache Read、Cache Write、Requests 和预估费用。
|
|
445
|
+
- **趋势图(Week / Month)**:提供按模型和指标筛选的折线趋势图,点击数据点可查看单日用量明细。
|
|
446
|
+
- **Model Breakdown 表格**:按模型维度列出周期内的请求数、输入/输出/缓存 token 和预计费用。
|
|
447
|
+
- **Request Events 分页列表**:按时间排序的请求事件记录,支持分页浏览,含时间戳、模型、请求 ID 和 token 用量。
|
|
448
|
+
- **Detailed Information**:展示 API 返回的完整 JSON 响应,便于深入分析所有可用统计数据。
|
|
449
|
+
- **URL-based Configuration**:也可通过 `endpoint` 和 `period` 查询参数直接指定 API 端点与时间范围。例如:
|
|
450
|
+
`http://localhost:4141/usage-viewer?endpoint=http://your-api-server/usage&period=week`
|
|
451
|
+
|
|
452
|
+
### Usage Viewer 截图
|
|
453
|
+
|
|
454
|
+
<p align="center">
|
|
455
|
+
<img src="./docs/screenshots/usage-viewer.png" alt="Copilot API Usage Viewer 页面" width="900" />
|
|
456
|
+
</p>
|
|
457
|
+
|
|
458
|
+
## 命令结构
|
|
459
|
+
|
|
460
|
+
Copilot API 现在使用子命令结构,主要命令包括:
|
|
461
|
+
|
|
462
|
+
- `start`:启动 AI gateway 服务。如果已有 GitHub token,则启用 Copilot 路径;如果没有 GitHub token,但存在至少一个启用中的 provider,则按 provider-only 模式启动;如果两者都没有,会引导你配置 provider。
|
|
463
|
+
- `auth`:仅执行 provider 登录或配置流程,不启动服务。可用于 GitHub Copilot 登录、Codex OAuth,或第三方 provider API key 配置。
|
|
464
|
+
- `debug`:显示诊断信息,包括版本、运行时详情、文件路径以及认证状态,便于排障与支持。
|
|
465
|
+
|
|
466
|
+
## 命令行选项
|
|
467
|
+
|
|
468
|
+
### 全局选项
|
|
469
|
+
|
|
470
|
+
以下选项可用于任意子命令。若在子命令之前传入,请使用 `--key=value` 形式:
|
|
471
|
+
|
|
472
|
+
| 选项 | 说明 | 默认值 | 别名 |
|
|
473
|
+
| --- | --- | --- | --- |
|
|
474
|
+
| --api-home | API home 目录路径(设置 `COPILOT_API_HOME`) | 无 | 无 |
|
|
475
|
+
| --oauth-app | OAuth app 标识符(设置 `COPILOT_API_OAUTH_APP`) | 无 | 无 |
|
|
476
|
+
| --enterprise-url | GitHub Enterprise URL(设置 `COPILOT_API_ENTERPRISE_URL`) | 无 | 无 |
|
|
477
|
+
|
|
478
|
+
### Start 命令选项
|
|
479
|
+
|
|
480
|
+
以下是 `start` 命令可用的命令行选项:
|
|
481
|
+
|
|
482
|
+
| 选项 | 说明 | 默认值 | 别名 |
|
|
483
|
+
| --- | --- | --- | --- |
|
|
484
|
+
| --port | 监听端口 | 4141 | -p |
|
|
485
|
+
| --verbose | 启用详细日志 | false | -v |
|
|
486
|
+
| --github-token | 直接提供 GitHub token(必须通过 `auth` 子命令生成) | 无 | -g |
|
|
487
|
+
| --claude-code | 生成一个使用 Copilot API 配置启动 Claude Code 的命令 | false | -c |
|
|
488
|
+
| --show-token | 在获取和刷新时显示 GitHub 与 Copilot token | false | 无 |
|
|
489
|
+
| --proxy-env | 从环境变量初始化代理 | false | 无 |
|
|
490
|
+
|
|
491
|
+
### Auth 命令选项
|
|
492
|
+
|
|
493
|
+
| 选项 | 说明 | 默认值 | 别名 |
|
|
494
|
+
| --- | --- | --- | --- |
|
|
495
|
+
| --provider | 要登录或配置的 provider(`copilot`、`codex`、`deepseek`、`dashscope`、`openrouter` 或 `custom`) | 交互选择 | 无 |
|
|
496
|
+
| --verbose | 启用详细日志 | false | -v |
|
|
497
|
+
| --show-token | 认证时显示 GitHub token | false | 无 |
|
|
498
|
+
|
|
499
|
+
只有在需要启用 GitHub Copilot provider 时,才需要执行 `copilot-api auth login --provider copilot`。使用 `codex` 或第三方 provider-only 模式不要求配置 Copilot。
|
|
500
|
+
|
|
501
|
+
使用 `copilot-api auth login --provider deepseek`、`--provider dashscope` 或 `--provider openrouter` 可以通过 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"`。配置并启用 provider 后,`copilot-api start` 可在没有 GitHub token 的情况下启动。
|
|
502
|
+
|
|
503
|
+
使用 `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`。
|
|
504
|
+
|
|
505
|
+
### Debug 命令选项
|
|
506
|
+
|
|
507
|
+
| 选项 | 说明 | 默认值 | 别名 |
|
|
508
|
+
| --- | --- | --- | --- |
|
|
509
|
+
| --json | 以 JSON 输出调试信息 | false | 无 |
|
|
510
|
+
|
|
511
|
+
<a id="configuration-configjson"></a>
|
|
512
|
+
|
|
513
|
+
## 配置(config.json)
|
|
514
|
+
|
|
515
|
+
- **位置:** Linux/macOS 为 `~/.local/share/copilot-api/config.json`,Windows 为 `%USERPROFILE%\.local\share\copilot-api\config.json`。
|
|
516
|
+
- **默认结构:**
|
|
517
|
+
```json
|
|
518
|
+
{
|
|
519
|
+
"auth": {
|
|
520
|
+
"apiKeys": [],
|
|
521
|
+
"adminApiKey": "<startup 自动生成>"
|
|
522
|
+
},
|
|
523
|
+
"providers": {},
|
|
524
|
+
"modelMappings": {},
|
|
525
|
+
"extraPrompts": {
|
|
526
|
+
"gpt-5-mini": "<built-in exploration prompt>",
|
|
527
|
+
"gpt-5.3-codex": "<built-in commentary prompt>",
|
|
528
|
+
"gpt-5.4-mini": "<built-in commentary prompt>",
|
|
529
|
+
"gpt-5.4": "<built-in commentary prompt>",
|
|
530
|
+
"gpt-5.5": "<built-in commentary prompt>"
|
|
531
|
+
},
|
|
532
|
+
"smallModel": "gpt-5-mini",
|
|
533
|
+
"useResponsesApiContextManagement": true,
|
|
534
|
+
"modelResponsesApiCompactThresholds": {
|
|
535
|
+
"gpt-5.4": 217600,
|
|
536
|
+
"gpt-5.5": 217600
|
|
537
|
+
},
|
|
538
|
+
"modelReasoningEfforts": {
|
|
539
|
+
"gpt-5-mini": "low",
|
|
222
540
|
"gpt-5.3-codex": "xhigh",
|
|
223
541
|
"gpt-5.4-mini": "xhigh",
|
|
224
542
|
"gpt-5.4": "xhigh",
|
|
@@ -422,328 +740,8 @@ curl http://localhost:4141/dashscope/v1/messages \
|
|
|
422
740
|
-d '{"model":"qwen3.6-plus","max_tokens":1024,"messages":[{"role":"user","content":"hello"}]}'
|
|
423
741
|
```
|
|
424
742
|
|
|
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
743
|
## 使用建议
|
|
741
744
|
|
|
742
|
-
- 为避免触发 GitHub Copilot 速率限制,可以使用以下参数:
|
|
743
|
-
- `--manual`:为每个请求启用手动审批,让你完全控制何时发送请求。
|
|
744
|
-
- `--rate-limit <seconds>`:强制请求之间至少保持一定秒数的间隔。例如 `copilot-api start --rate-limit 30` 会确保两次请求之间至少间隔 30 秒。
|
|
745
|
-
- `--wait`:与 `--rate-limit` 配合使用。在命中速率限制时,服务会等待冷却结束,而不是直接返回错误。对于不会自动重试的客户端,这会很有帮助。
|
|
746
|
-
|
|
747
745
|
<a id="claudemd-or-agentsmd-recommended-content"></a>
|
|
748
746
|
|
|
749
747
|
### CLAUDE.md 或 AGENTS.md 推荐内容
|