这是一个为Z.ai GLM-4.5模型提供OpenAI兼容API接口的代理服务器。它允许你使用标准的OpenAI API格式与Z.ai的GLM-4.5模型进行交互,支持流式和非流式响应。
注意: 本项目来自fork OpenAI-Compatible-API-Proxy-for-Z二次开发
克隆仓库
git clone https://github.com/your-username/ZtoApi.git
cd ZtoApi
配置环境变量
cp config.env .env.local
# 编辑 .env.local 文件,设置你的 ZAI_TOKEN
启动服务
# 使用启动脚本(推荐)
./start.sh
# 或直接运行
go run main.go
测试服务
curl http://localhost:9090/v1/models
访问API文档
启动服务后,可以通过浏览器访问以下地址查看完整的API文档:
http://localhost:9090/docs
API文档提供了以下功能:
访问Dashboard
启动服务后,可以通过浏览器访问以下地址查看实时监控仪表板:
http://localhost:9090/dashboard
Dashboard提供了以下功能:
构建镜像
docker build -t zto-api .
运行容器
docker run -p 9090:9090 \
-e ZAI_TOKEN=your_z_ai_token \
-e DEFAULT_KEY=your_api_key \
zto-api
Fork这个仓库到你的GitHub账户
在Render上创建新的Web Service:
ZAI_TOKEN: Z.ai 的访问令牌 (可选,不提供将使用匿名token)DEFAULT_KEY: 客户端API密钥 (可选,默认: sk-your-key)MODEL_NAME: 显示的模型名称 (可选,默认: GLM-4.5)PORT: 服务监听端口 (Render会自动设置)部署完成后,使用Render提供的URL作为OpenAI API的base_url
本项目支持通过环境变量进行配置,提供灵活的部署和运行选项。
macOS/Linux:
./start.sh
Windows:
start.bat
macOS/Linux:
export ZAI_TOKEN="your_z_ai_token_here"
export DEFAULT_KEY="sk-your-custom-key"
export PORT="9090"
go run main.go
Windows:
set ZAI_TOKEN=your_z_ai_token_here
set DEFAULT_KEY=sk-your-custom-key
set PORT=9090
go run main.go
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 |
| 变量名 | 说明 | 默认值 | 示例 |
|---|---|---|---|
UPSTREAM_URL | 上游API地址 | https://chat.z.ai/api/chat/completions | 自定义URL |
.env.local - 本地环境配置(推荐).env - 环境配置config.env - 配置模板# 复制配置文件
cp config.env .env.local
# 编辑配置文件
nano .env.local
Authorization 头部的 Bearer token本项目支持自动获取匿名token,无需手动配置。当 ANON_TOKEN_ENABLED 常量为 true 时,系统会自动为每次对话获取不同的匿名token,避免共享记忆。
# .env.local
ZAI_TOKEN=eyJhbGciOiJFUzI1NiIs...
DEFAULT_KEY=sk-my-secret-key
MODEL_NAME=GLM-4.5-Pro
PORT=9000
DEBUG_MODE=false
# .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
# .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
本项目提供了一个Web仪表板,用于实时监控API转发情况和统计信息。
启动服务后,通过浏览器访问以下地址:
http://localhost:9090/dashboard
通过 DASHBOARD_ENABLED 环境变量控制Dashboard功能的开启和关闭:
# 启用Dashboard(默认)
DASHBOARD_ENABLED=true
# 禁用Dashboard
DASHBOARD_ENABLED=false
修改环境变量后,需要重启服务使配置生效:
# 停止当前服务
Ctrl+C
# 重新启动
./start.sh
.env.local 添加到 .gitignorechmod +x start.sh)THINK_TAGS_MODE 常量调整显示方式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="")
# 非流式请求
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
}'
const fetch = require('node-fetch');
async function chatWithGLM(message, stream = false) {
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({
model: 'GLM-4.5',
messages: [{ role: 'user', content: message }],
stream: stream
})
});
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);
连接失败
curl http://localhost:9090/v1/modelshttp://localhost:9090/docs认证失败
DEFAULT_KEY 环境变量设置Authorization 格式正确Z.ai Token无效
ZAI_TOKEN 环境变量设置思考过程显示异常
DEBUG_MODE 是否启用端口被占用: 修改 PORT 环境变量或停止占用端口的服务
权限不足: 确保启动脚本有执行权限
配置未生效: 重启服务或检查配置文件语法
流式响应问题: 确认 DEFAULT_STREAM 设置正确,检查客户端是否支持流式响应
启用调试模式以获取详细日志:
export DEBUG_MODE=true
go run main.go
如果遇到网络连接问题,可以尝试:
UPSTREAM_URL 可访问curl https://chat.z.ai/api/chat/completions
DEBUG_MODE=falsehttp.Client 超时设置欢迎提交 Issue 和 Pull Request!请确保:
git checkout -b feature/new-featuregit commit -am 'Add new feature'git push origin feature/new-feature本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。
本项目与 Z.ai 官方无关,使用前请确保遵守 Z.ai 的服务条款。开发者不对因使用本项目而产生的任何问题负责。 本项目与 Z.ai 官方无关,使用前请确保遵守 Z.ai 的服务条款。开发者不对因使用本项目而产生的任何问题负责。 本项目与 Z.ai 官方无关,使用前请确保遵守 Z.ai 的服务条款。开发者不对因使用本项目而产生的任何问题负责。
如有问题或建议,请通过以下方式联系:
Content type
Image
Digest
sha256:606de101b…
Size
9.1 MB
Last updated
12 months ago
docker pull orangeqiu/ztoapi