清夏晚风

OpenAI兼容API代理 for Z.ai GLM-4.5

这是一个为Z.ai GLM-4.5模型提供OpenAI兼容API接口的代理服务器。它允许你使用标准的OpenAI API格式与Z.ai的GLM-4.5模型进行交互,支持流式和非流式响应。

注意: 本项目来自fork OpenAI-Compatible-API-Proxy-for-Z二次开发

✨ 主要功能

  • 🔄 OpenAI API兼容: 完全兼容OpenAI的API格式,无需修改客户端代码
  • 🌊 流式响应支持: 支持实时流式输出,提供更好的用户体验
  • 🔐 身份验证: 支持API密钥验证,确保服务安全
  • 🛠️ 灵活配置: 通过环境变量进行灵活配置
  • 🐳 Docker支持: 提供Docker镜像,便于部署
  • 🌍 CORS支持: 支持跨域请求,便于前端集成
  • 📝 思考过程展示: 智能处理并展示模型的思考过程
  • 📊 实时监控仪表板: 提供Web仪表板,实时显示API转发情况和统计信息

🚀 快速开始

环境要求

  • Go 1.23 或更高版本
  • Z.ai 的访问令牌

本地部署

  1. 克隆仓库

    1
    2
    git clone https://github.com/your-username/ZtoApi.git
    cd ZtoApi
  2. 配置环境变量

    1
    2
    cp config.env .env.local
    # 编辑 .env.local 文件,设置你的 ZAI_TOKEN
  3. 启动服务

    1
    2
    3
    4
    5
    # 使用启动脚本(推荐)
    ./start.sh

    # 或直接运行
    go run main.go
  4. 测试服务

    1
    curl http://localhost:9090/v1/models
  5. 访问API文档

    启动服务后,可以通过浏览器访问以下地址查看完整的API文档:

    1
    http://localhost:9090/docs

    API文档提供了以下功能:

    • 详细的API端点说明
    • 请求参数和响应格式
    • 多种编程语言的使用示例(Python、cURL、JavaScript)
    • 错误处理说明
  6. 访问Dashboard

    启动服务后,可以通过浏览器访问以下地址查看实时监控仪表板:

    1
    http://localhost:9090/dashboard

    Dashboard提供了以下功能:

    • 实时显示API请求统计信息(总请求数、成功请求数、失败请求数、平均响应时间)
    • 显示最近100条请求的详细信息(时间、方法、路径、状态码、耗时、客户端IP)
    • 数据每5秒自动刷新一次

Docker部署

  1. 构建镜像

    1
    docker build -t zto-api .
  2. 运行容器

    1
    2
    3
    4
    docker run -p 9090:9090 \
    -e ZAI_TOKEN=your_z_ai_token \
    -e DEFAULT_KEY=your_api_key \
    zto-api

Render部署

  1. Fork这个仓库到你的GitHub账户

  2. 在Render上创建新的Web Service:

    • 连接你的GitHub仓库
    • 选择Docker作为环境
    • 设置以下环境变量:
    • ZAI_TOKEN: Z.ai 的访问令牌 (可选,不提供将自动获取随机匿名token)
    • DEFAULT_KEY: 客户端API密钥 (可选,默认: sk-your-key)
    • MODEL_NAME: 显示的模型名称 (可选,默认: GLM-4.5)
    • PORT: 服务监听端口 (Render会自动设置)
  3. 部署完成后,使用Render提供的URL作为OpenAI API的base_url

⚙️ 环境变量配置

本项目支持通过环境变量进行配置,提供灵活的部署和运行选项。

🚀 快速开始

1. 使用启动脚本(推荐)

macOS/Linux:

1
./start.sh

Windows:

1
start.bat

2. 手动设置环境变量

macOS/Linux:

1
2
3
4
export ZAI_TOKEN="your_z_ai_token_here"
export DEFAULT_KEY="sk-your-custom-key"
export PORT="9090"
go run main.go

Windows:

1
2
3
4
set ZAI_TOKEN=your_z_ai_token_here
set DEFAULT_KEY=sk-your-custom-key
set PORT=9090
go run main.go

3. Docker运行

1
2
3
4
5
docker run -p 9090:9090 \
-e ZAI_TOKEN=your_z_ai_token_here \
-e DEFAULT_KEY=sk-your-custom-key \
-e PORT=9090 \
zto-api

📋 环境变量列表

🔑 必需配置

无必需配置。所有配置都有合理的默认值。

⚙️ 可选配置

变量名 说明 默认值 示例
ZAI_TOKEN Z.ai 访问令牌 空(自动获取随机匿名token) eyJhbGciOiJFUzI1NiIs...

⚙️ 可选配置

变量名 说明 默认值 示例
DEFAULT_KEY 客户端API密钥 sk-your-key sk-my-api-key
MODEL_NAME 显示模型名称 GLM-4.5 GLM-4.5-Pro
PORT 服务监听端口 9090 9000
DEBUG_MODE 调试模式开关 true false
DEFAULT_STREAM 默认流式响应 true false
DASHBOARD_ENABLED Dashboard功能开关 true false
ENABLE_THINKING 思考功能开关 false true

🔧 高级配置

变量名 说明 默认值 示例
UPSTREAM_URL 上游API地址 https://chat.z.ai/api/chat/completions 自定义URL

📁 配置文件

支持的配置文件(按优先级排序)

  1. .env.local - 本地环境配置(推荐)
  2. .env - 环境配置
  3. config.env - 配置模板

配置文件示例

1
2
3
4
5
# 复制配置文件
cp config.env .env.local

# 编辑配置文件
nano .env.local

🔐 获取 Z.ai Token

方法1:浏览器开发者工具

  1. 登录 Z.ai
  2. 打开浏览器开发者工具(F12)
  3. 切换到 Network 标签页
  4. 发送一条消息
  5. 在请求中找到 Authorization 头部的 Bearer token

方法2:Cookie 方式

  1. 登录 Z.ai 后,在开发者工具中查看 Cookies
  2. 找到包含认证信息的 cookie

方法3:匿名Token

本项目支持自动获取匿名token,无需手动配置。当 ZAI_TOKEN 环境变量未设置时,系统会自动为每次对话获取不同的随机匿名token,避免共享记忆。这种机制使得项目即使用户没有提供 Z.ai 的访问令牌也能正常工作。

🎯 使用示例

基本配置

1
2
3
4
5
6
# .env.local
ZAI_TOKEN=eyJhbGciOiJFUzI1NiIs...
DEFAULT_KEY=sk-my-secret-key
MODEL_NAME=GLM-4.5-Pro
PORT=9000
DEBUG_MODE=false

生产环境配置

1
2
3
4
5
6
7
# .env.production
ZAI_TOKEN=your_production_token
DEFAULT_KEY=sk-production-key
MODEL_NAME=GLM-4.5
PORT=9090
DEBUG_MODE=false
DEFAULT_STREAM=true

开发环境配置

1
2
3
4
5
6
7
8
# .env.development
ZAI_TOKEN=your_dev_token
DEFAULT_KEY=sk-dev-key
MODEL_NAME=GLM-4.5-Dev
PORT=8080
DEBUG_MODE=true
DEFAULT_STREAM=true
DASHBOARD_ENABLED=true

📊 Dashboard功能

本项目提供了一个Web仪表板,用于实时监控API转发情况和统计信息。

功能特点

  • 实时显示API请求统计信息(总请求数、成功请求数、失败请求数、平均响应时间)
  • 显示最近100条请求的详细信息(时间、方法、路径、状态码、耗时、客户端IP)
  • 数据每5秒自动刷新一次
  • 响应式设计,支持各种设备访问

访问方式

启动服务后,通过浏览器访问以下地址:

1
http://localhost:9090/dashboard

配置选项

通过 DASHBOARD_ENABLED 环境变量控制Dashboard功能的开启和关闭:

1
2
3
4
5
# 启用Dashboard(默认)
DASHBOARD_ENABLED=true

# 禁用Dashboard
DASHBOARD_ENABLED=false

使用场景

  • 开发调试: 实时查看API请求情况,便于调试和问题排查
  • 性能监控: 监控API响应时间和成功率,评估系统性能
  • 安全审计: 查看请求来源和频率,发现异常访问模式

🔄 重启服务

修改环境变量后,需要重启服务使配置生效:

1
2
3
4
5
# 停止当前服务
Ctrl+C

# 重新启动
./start.sh

🚨 注意事项

  1. Token 安全: 不要将真实的 Z.ai token 提交到代码仓库
  2. 配置文件: 建议将 .env.local 添加到 .gitignore
  3. 权限设置: 确保启动脚本有执行权限 (chmod +x start.sh)
  4. 端口冲突: 确保配置的端口没有被其他服务占用
  5. 匿名Token: 当未设置 ZAI_TOKEN 时,系统会自动获取随机匿名token,每次对话都会有独立的上下文,无需手动配置即可使用
  6. 思考过程: 项目会自动处理模型的思考过程,可通过 ENABLE_THINKING 环境变量或请求参数 enable_thinking 控制是否启用

📖 API使用示例

Python示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import openai

# 配置客户端
client = openai.OpenAI(
api_key="your-api-key", # 对应 DEFAULT_KEY
base_url="http://localhost:9090/v1"
)

# 非流式请求
response = client.chat.completions.create(
model="GLM-4.5",
messages=[{"role": "user", "content": "你好,请介绍一下自己"}]
)

print(response.choices[0].message.content)

# 流式请求
response = client.chat.completions.create(
model="GLM-4.5",
messages=[{"role": "user", "content": "请写一首关于春天的诗"}],
stream=True
)

for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")

# 启用思考功能的请求
response = client.chat.completions.create(
model="GLM-4.5",
messages=[{"role": "user", "content": "请分析一下这个问题"}],
enable_thinking=True
)

print(response.choices[0].message.content)

curl示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 非流式请求
curl -X POST http://localhost:9090/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{
"model": "GLM-4.5",
"messages": [{"role": "user", "content": "你好"}],
"stream": false
}'

# 流式请求
curl -X POST http://localhost:9090/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{
"model": "GLM-4.5",
"messages": [{"role": "user", "content": "你好"}],
"stream": true
}'

# 启用思考功能的请求
curl -X POST http://localhost:9090/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{
"model": "GLM-4.5",
"messages": [{"role": "user", "content": "请分析一下这个问题"}],
"enable_thinking": true
}'

JavaScript示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
const fetch = require('node-fetch');

async function chatWithGLM(message, stream = false, enableThinking = null) {
const requestBody = {
model: 'GLM-4.5',
messages: [{ role: 'user', content: message }],
stream: stream
};

// 如果指定了思考功能参数,则添加到请求中
if (enableThinking !== null) {
requestBody.enable_thinking = enableThinking;
}

const response = await fetch('http://localhost:9090/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your-api-key'
},
body: JSON.stringify(requestBody)
});

if (stream) {
// 处理流式响应
const reader = response.body.getReader();
const decoder = new TextDecoder();

while (true) {
const { done, value } = await reader.read();
if (done) break;

const chunk = decoder.decode(value);
const lines = chunk.split('\n');

for (const line of lines) {
if (line.startsWith('data: ')) {
const data = line.slice(6);
if (data === '[DONE]') {
console.log('\n流式响应完成');
return;
}

try {
const parsed = JSON.parse(data);
const content = parsed.choices[0]?.delta?.content;
if (content) {
process.stdout.write(content);
}
} catch (e) {
// 忽略解析错误
}
}
}
}
} else {
// 处理非流式响应
const data = await response.json();
console.log(data.choices[0].message.content);
}
}

// 使用示例
chatWithGLM('你好,请介绍一下JavaScript', false);

// 启用思考功能的示例
chatWithGLM('请分析一下这个问题', false, true);

🔧 故障排除

常见问题

  1. 连接失败

    • 检查服务是否正常运行:curl http://localhost:9090/v1/models
    • 访问API文档:http://localhost:9090/docs
    • 确认端口配置正确
  2. 认证失败

    • 检查 DEFAULT_KEY 环境变量设置
    • 确认请求头中的 Authorization 格式正确
  3. Z.ai Token无效

    • 检查 ZAI_TOKEN 环境变量设置
    • 确认Token未过期
  4. 思考过程显示异常

    • 检查 DEBUG_MODE 是否启用
    • 查看服务日志获取详细信息
  5. 端口被占用: 修改 PORT 环境变量或停止占用端口的服务

  6. 权限不足: 确保启动脚本有执行权限

  7. 配置未生效: 重启服务或检查配置文件语法

  8. 流式响应问题: 确认 DEFAULT_STREAM 设置正确,检查客户端是否支持流式响应

调试模式

启用调试模式以获取详细日志:

1
2
export DEBUG_MODE=true
go run main.go

网络问题排查

如果遇到网络连接问题,可以尝试:

  1. 检查防火墙设置
  2. 确认 UPSTREAM_URL 可访问
  3. 测试网络连通性:
    1
    curl https://chat.z.ai/api/chat/completions

性能优化

  1. 减少日志输出: 设置 DEBUG_MODE=false
  2. 调整超时时间: 修改代码中的 http.Client 超时设置
  3. 使用反向代理: 在生产环境中建议使用 Nginx 等反向代理

🤝 贡献指南

欢迎提交 Issue 和 Pull Request!请确保:

  1. 代码符合 Go 的代码风格
  2. 提交前运行测试
  3. 更新相关文档
  4. 遵循项目的代码结构和命名规范

开发流程

  1. Fork 本仓库
  2. 创建特性分支:git checkout -b feature/new-feature
  3. 提交更改:git commit -am 'Add new feature'
  4. 推送分支:git push origin feature/new-feature
  5. 提交 Pull Request

📄 许可证

本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。

⚠️ 免责声明

本项目与 Z.ai 官方无关,使用前请确保遵守 Z.ai 的服务条款。开发者不对因使用本项目而产生的任何问题负责。
本项目与 Z.ai 官方无关,使用前请确保遵守 Z.ai 的服务条款。开发者不对因使用本项目而产生的任何问题负责。
本项目与 Z.ai 官方无关,使用前请确保遵守 Z.ai 的服务条款。开发者不对因使用本项目而产生的任何问题负责。

📞 联系方式

如有问题或建议,请通过以下方式联系:

  • Title:
  • Author: 清夏晚风
  • Created at : 2026-01-14 14:55:07
  • Updated at : 2026-01-14 14:55:07
  • Link: https://blog.kimikkorow.eu.org/AI相关工具/API相关/网页转API代理/02.ZtoApi/
  • License: This work is licensed under CC BY-NC-SA 4.0.