测试时用的是nvidia 免费api,国内访问延迟较高
https://build.nvidia.com/
由于这个延迟高,为了解决这个因延迟导致每次测试api联通性超时的问题,进行了如下工作:
1、cliproxyapi服务端项目
cliproxyapi 地址 :https://github.com/router-for-me/CLIProxyAPI
cp ./config.example.yaml ./config.yaml

// 修改以下几个配置
allow-remote: true
secret-key: "1111"
api-keys:
- "xxxxxxxxxx"
- "your-api-key-2"
- "your-api-key-3"
- Go 版本 :必须使用 Go 1.26 或更高版本
- 配置文件 :首次运行前必须创建 config.yaml
go version
如果版本低于1.26,升级一下:brew update go
go version
go mod download
go run ./cmd/server
### 修改 1:增强 APICall 错误日志和错误提示
**文件:** `internal/api/handlers/management/api_tools.go`
**行数:** 第 194-227 行
**修改类型:** 功能增强
#### 修改前
```go
resp, errDo := httpClient.Do(req)
if errDo != nil {
log.WithError(errDo).Debug("management APICall request failed")
c.JSON(http.StatusBadGateway, gin.H{"error": "request failed"})
return
}
```
#### 修改后
```go
resp, errDo := httpClient.Do(req)
if errDo != nil {
// 记录详细日志
log.WithFields(log.Fields{
"error": errDo.Error(),
"url": urlStr,
"method": method,
"auth": authIndex,
}).Error("management APICall request failed")
// 分类错误信息
var userMessage string
errMsg := errDo.Error()
switch {
case strings.Contains(errMsg, "timeout"):
userMessage = "请求超时:连接上游服务器超时(600秒),请检查网络或稍后重试"
case strings.Contains(errMsg, "connection refused"):
userMessage = "连接被拒绝:上游服务器拒绝连接,请检查 URL 和网络"
case strings.Contains(errMsg, "no such host"):
userMessage = "DNS 解析失败:无法解析域名,请检查 URL"
case strings.Contains(errMsg, "network is unreachable"):
userMessage = "网络不可达:请检查网络连接和代理设置"
case strings.Contains(errMsg, "proxy"):
userMessage = "代理错误:代理服务器连接失败"
default:
userMessage = fmt.Sprintf("请求失败:%s", errMsg)
}
c.JSON(http.StatusBadGateway, gin.H{
"error": userMessage,
"detail": errMsg,
})
return
}
```
#### 改动说明
| 改动项 | 说明 |
|--------|------|
| **日志级别提升** | 从 `Debug` 提升到 `Error`,确保错误信息默认输出到控制台 |
| **结构化日志** | 添加 `error`、`url`、`method`、`auth` 字段,方便排查问题 |
| **错误分类** | 根据错误类型返回不同的中文友好提示 |
| **前端错误信息** | 返回 `error`(用户友好提示)和 `detail`(详细技术信息)两个字段 |
#### 错误分类对照表
| 错误类型 | 前端显示 |
|---------|---------|
| 超时 | "请求超时:连接上游服务器超时(600秒),请检查网络或稍后重试" |
| 连接被拒 | "连接被拒绝:上游服务器拒绝连接,请检查 URL 和网络" |
| DNS 失败 | "DNS 解析失败:无法解析域名,请检查 URL" |
| 网络不可达 | "网络不可达:请检查网络连接和代理设置" |
| 代理错误 | "代理错误:代理服务器连接失败" |
| 其他错误 | "请求失败:[具体错误信息]" |
---
### 修改 2:增加 APICall 超时时间
**文件:** `internal/api/handlers/management/api_tools.go`
**行数:** 第 23 行
**修改类型:** 配置调整
#### 修改前
```go
const defaultAPICallTimeout = 60 * time.Second
```
#### 修改后
```go
const defaultAPICallTimeout = 600 * time.Second
```
#### 改动说明
| 改动项 | 说明 |
|--------|------|
| **超时时间** | 从 60 秒增加到 600 秒(10 分钟) |
| **影响范围** | 所有通过管理面板 `APICall` 接口发起的请求 |
| **适用场景** | NVIDIA 等响应较慢的国际 API 测试连接 |
---
2、cliproxyapi前端项目
cliproxyapi 前端地址: https://github.com/router-for-me/Cli-Proxy-API-Management-Center
## 1. 依赖包修复
### 问题描述
项目启动时 Vite 报错,提示以下依赖包未安装但代码中有引用:
- `react-router`
- `@codemirror/search`
- `@codemirror/view`
- `@codemirror/state`
### 变更内容
```bash
pnpm add @codemirror/search @codemirror/view @codemirror/state react-router
```
### 涉及文件
- `package.json` - 添加了以下依赖:
- `@codemirror/search` ^6.7.0
- `@codemirror/state` ^6.6.0
- `@codemirror/view` ^6.41.1
- `react-router` ^7.14.2
### 变更原因
这些依赖包是项目中以下文件所必需的:
- `react-router`: `src/hooks/useUnsavedChangesGuard.ts`
- `@codemirror/search`: `src/components/config/ConfigSourceEditor.tsx`
- `@codemirror/view`: `src/components/config/ConfigSourceEditor.tsx`
- `@codemirror/state`: `src/components/config/DiffModal.tsx`
---
## 2. 测试模型请求超时时间调整
### 变更描述
将 AI 提供商测试功能的请求超时时间从 30 秒延长至 10 分钟(600 秒)。
### 涉及文件
#### 2.1 AiProvidersOpenAIEditPage.tsx
**文件路径**: `src/pages/AiProvidersOpenAIEditPage.tsx`
**变更内容**:
```typescript
// 修改前
const OPENAI_TEST_TIMEOUT_MS = 30_000;
// 修改后
const OPENAI_TEST_TIMEOUT_MS = 600_000;
```
**影响范围**:
- OpenAI 提供商的单个密钥测试
- OpenAI 提供商的"一键测试全部密钥"功能
**超时提示语**: 超时提示会自动计算显示为"测试请求超时(600秒)",无需额外修改语言文件。
---
#### 2.2 AiProvidersClaudeEditPage.tsx
**文件路径**: `src/pages/AiProvidersClaudeEditPage.tsx`
**变更内容**:
```typescript
// 修改前
const CLAUDE_TEST_TIMEOUT_MS = 30_000;
// 修改后
const CLAUDE_TEST_TIMEOUT_MS = 600_000;
```
**影响范围**:
- Claude 提供商的连通性测试
**超时提示语**: 超时提示会自动计算显示为"测试请求超时(600秒)",无需额外修改语言文件。
---
## 变更统计
| 类型 | 数量 | 说明 |
|------|------|------|
| 依赖添加 | 4 个 | 修复缺失的运行时依赖 |
| 常量修改 | 2 处 | 测试超时时间调整 |
---
npm install pnpm -g
pnpm i
pnpm dev
为了让两个项目可以联调,需要增加一下配置
// vite.config.ts
export default defineConfig({
// ......
server: {
proxy: {
'/v0/management': {
target: 'http://localhost:8317',
changeOrigin: true,
},
},
}
});
由于执行pnpm dev之后

所以访问的前端地址为:http://localhost:5173/#/

3、测试联通后,如何给claudecode中使用
3.1如果不借助ccswitch,直接给claudecode使用的话
需要在~/.claude/settings.json按如下配置
配置env
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "这里填写你后台复制的API密钥",
"ANTHROPIC_BASE_URL": "http://127.0.0.1:8317",
"ANTHROPIC_MODEL": "z-ai/glm4.7",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "z-ai/glm4.7"
}
}
3.2 如果搭配ccswitch,给claudecode使用的话
必须注意 关掉路由

这个必须关掉,即不能是这种打开绿色的状态
模型选自定义的就行


注意这里一定要选择Anthropic Messages(原生)
为什么呢?
因为原理如下
当cliproxyapi 直接 和 claudecode交互
正向请求流:
Claude Code 原始请求 (Anthropic 格式) ➡️ cliproxyapi 本地代理 (拦截 & 改写 Key/Body/模型名) ➡️ 转换成目标 API 格式请求 (如 OpenAI 格式) ➡️ 目标大模型服务器
反向响应流:
目标大模型服务器 ➡️ 返回目标格式响应 (如 OpenAI 格式) ➡️ cliproxyapi 本地代理 (解析 & 逆向翻译) ➡️ 转换成 Anthropic 格式响应 ➡️ Claude Code 正常渲染输出
加入ccswitch后的流程应该是如下样子
正向请求流:
Claude Code 原始请求 (Anthropic 格式) ➡️ ccswitch (拦截路由 & 切换目标模型/配置) ➡️ cliproxyapi 本地代理 (接收 & 改写 Key/Body) ➡️ 转换成目标 API 格式请求 (如 OpenAI 格式) ➡️ 目标大模型服务器
反向响应流:
目标大模型服务器 ➡️ 返回目标格式响应 (如 OpenAI 格式) ➡️ cliproxyapi 本地代理 (解析 & 逆向翻译) ➡️ 转换成 Anthropic 格式响应 ➡️ ccswitch (透传响应) ➡️ Claude Code 正常渲染输出
简单理解各层职责:
-
ccswitch:决定“找谁说话”(负责在 Claude、GPT-4、DeepSeek 等不同配置间无缝切换)
-
cliproxyapi:决定“怎么说对方能听懂”(负责协议翻译和密钥替换,把 Claude 的话翻译给其他模型听)


345

被折叠的 条评论
为什么被折叠?



