ZtoApi 是一个高性能的 OpenAI 兼容 API 代理服务器,专为 Z.ai 的 GLM-4.5 和 GLM-4.5V 模型设计。使用 Deno 原生 HTTP API 实现,支持完整的流式和非流式响应,提供实时监控 Dashboard,让你能够无缝地将 Z.ai 的强大 AI 能力集成到现有的 OpenAI 客户端应用中。
- 🔄 完全 OpenAI 兼容: 支持标准 OpenAI API 格式,无需修改客户端代码
- 🌊 智能流式传输: 支持 Server-Sent Events (SSE) 实时流式响应
- 🧠 思考过程处理: 智能解析和展示 GLM-4.5 的推理思考过程
- 📊 实时监控面板: 内置 Web Dashboard,实时显示 API 调用统计和性能指标
- 🔐 安全身份验证: 支持 API 密钥验证和匿名 Token 自动获取
- ⚡ 高性能架构: 基于 Deno 原生 HTTP API,支持高并发请求处理
- 🌍 多平台部署: 支持 Deno Deploy 边缘计算和自托管部署
- 🛠️ 灵活配置: 通过环境变量进行全面配置管理
- 🔄 智能 Token 池管理: 支持多个 Token 轮换使用,自动切换失败的 Token,提升服务可用性
- 🖼️ 完整图像处理: 支持 base64 和远程 URL 图像上传,GLM-4.5V 专用 URL 格式转换
- 🔍 MCP 服务器支持: 深度网络搜索、高级搜索、编程助手、PPT 生成等高级功能
- 🧠 智能 Header 生成: 动态生成真实浏览器请求头和指纹参数,完美模拟真实用户请求
- ⚡ 高级模式检测: 自动识别思考模式、搜索模式、视觉模型能力
- 🔐 增强签名算法: 双层 HMAC-SHA256 签名,支持环境变量配置,提供企业级安全保护
ZtoApi 支持 Z.ai 的多个先进 AI 模型:
| 模型 ID | 模型名称 | 特性 |
|---|---|---|
| 0727-360B-API | GLM-4.5 | 通用对话、代码生成、思考过程 |
| glm-4.6 | GLM-4.6 | 🚀 增强模型,更强的推理和代码能力 |
| glm-4.5v | GLM-4.5V | 🎯 全方位多模态理解:图像、视频、文档、音频 |
| glm-4.6v | GLM-4.6V | 🚀 增强多模态:视觉理解 + 高级推理 |
| glm-4.7 | GLM-4.7 | 🆕 最新推理模型,更强的思考和编程能力 |
| glm-5 | GLM-5 | 🚀 下一代旗舰模型,全方位能力提升 |
| 0727-106B-API | GLM-4.5-Air | ⚡ 轻量级模型,快速响应 |
| 0808-360B-DR | 0808-360B-DR | 🔬 深度研究专用模型 |
⚠️ 关于工具调用: ZtoApi 已完整支持 OpenAI 格式的tools参数解析和转发,但实际工具调用功能受限于上游 Z.ai API。建议使用reasoning: true参数启用思考模式。
GLM-4.5 (0727-360B-API)
- ✅ 思考过程展示
- ✅ 🔄 智能 Token 池管理
- ✅ 🧠 智能 Header 生成
- ✅ 🖼️ 图像处理支持(上传后作为文件引用)
- ✅ 代码生成与分析
- ❌ 原生多模态理解
⚠️ 注意: MCP 工具调用功能受上游 API 限制,详见 GLM-5 说明。
GLM-4.6 (glm-4.6)
- ✅ 🚀 增强的思考过程展示
- ✅ 🔄 智能 Token 池管理
- ✅ 🧠 智能 Header 生成
- ✅ 🖼️ 图像处理支持(上传后作为文件引用)
- ✅ 🚀 顶级的代码生成与分析
- ❌ 原生多模态理解
⚠️ 注意: 深度搜索功能受上游 API 限制。
GLM-4.7 (glm-4.7) - 🆕 最新推理模型
- ✅ 🆕 更强的思考过程展示
- ✅ 🔄 智能 Token 池管理
- ✅ 🧠 智能 Header 生成
- ✅ 🖼️ 图像处理支持(上传后作为文件引用)
- ✅ 💎 卓越的代码生成与分析能力
- ✅ 🧠 增强的推理和逻辑能力
- ❌ 原生多模态理解
⚠️ 注意: 工具调用功能受上游 API 限制,详见 GLM-5 说明。
GLM-5 (glm-5) - 🚀 下一代旗舰模型
- ✅ 🚀 最强的思考过程展示
- ✅ 🔄 智能 Token 池管理
- ✅ 🧠 智能 Header 生成
- ✅ 🖼️ 图像处理支持(上传后作为文件引用)
- ✅ 💎 旗舰级代码生成与分析
- ✅ 🧠 顶级的推理和逻辑能力
- ✅ 🎯 全方位能力提升
- ❌ 原生多模态理解
⚠️ 关于工具调用: ZtoApi 已完整支持 OpenAI 格式的tools参数解析和转发,但实际工具调用功能受限于上游 Z.ai API。目前测试显示/api/v2/chat/completions端点可能未完全启用工具调用功能,建议使用reasoning: true参数启用思考模式以获得类似的推理能力。
GLM-4.5-Air (0727-106B-API) - ⚡ 轻量级模型
- ✅ 思考过程展示
- ✅ 🔄 智能 Token 池管理
- ✅ 🧠 智能 Header 生成
- ✅ ⚡ 快速响应,低延迟
- ✅ 适合日常对话和简单任务
- ❌ 原生多模态理解
0808-360B-DR (0808-360B-DR) - 🔬 深度研究专用
- ✅ 🔬 深度分析能力
- ✅ 🔄 智能 Token 池管理
- ✅ 🧠 智能 Header 生成
- ✅ 📚 适合复杂研究和深度分析
- ✅ 长文本理解和总结
- ❌ 原生多模态理解
⚠️ 注意: 深度搜索功能受上游 API 限制。
GLM-4.5V (glm-4.5v) - 全方位多模态理解
- ✅ 思考过程展示
- ✅ 🔄 智能 Token 池管理
- ✅ 🧠 智能 Header 生成
- ✅ 🖼️ 完整图像处理(直接在消息中处理)
- ✅ 图像理解与分析
- ✅ 视频内容分析
- ✅ 复杂图表解读
- ✅ 长文档处理
- ✅ 音频内容理解
- ❌ MCP 工具调用
GLM-4.6V (glm-4.6v) - 🚀 增强多模态模型
- ✅ 🚀 增强的思考过程展示
- ✅ 🔄 智能 Token 池管理
- ✅ 🧠 智能 Header 生成
- ✅ 🖼️ 完整图像处理(直接在消息中处理)
- ✅ 🚀 高级视觉理解能力
- ✅ 增强的图像、视频、文档、音频分析
- ✅ 更准确的细节识别
- ❌ MCP 工具调用
| 媒体类型 | 支持格式 | 应用场景 |
|---|---|---|
| 📷 图像 | JPEG, PNG, GIF, WebP | 图像描述、OCR、图表分析 |
| 🎥 视频 | MP4, AVI, MOV | 视频摘要、动作识别、场景分析 |
| 📄 文档 | PDF, DOC, TXT | 文档分析、信息提取、摘要生成 |
| 🎵 音频 | MP3, WAV, AAC | 语音转文字、音频分析、内容理解 |
⚠️ 重要提示: 多模态功能(图像、视频、文档、音频)需要正式的 Z.ai API Token,匿名 token 不支持多媒体处理。
新版 ZtoApi 支持高级 Token 池管理,大幅提升服务可用性和稳定性:
- 多 Token 轮换: 自动轮换使用多个 Token,避免单点故障
- 智能故障切换: 自动检测 Token 失败并切换到下一个可用 Token
- 匿名 Token 降级: 当所有配置 Token 都失效时,自动降级到匿名 Token
- Token 状态管理: 实时监控 Token 使用状态和失败次数
# 方式1:单个 Token(兼容旧版)
export ZAI_TOKEN="your-single-token"
# 方式2:多 Token 池(推荐)
export ZAI_TOKENS="token1,token2,token3"
# 方式3:混合配置(Token 池 + 匿名 Token 备用)
export ZAI_TOKENS="token1,token2"
# 匿名 Token 自动作为备用- 高可用部署: 生产环境避免单 Token 故障
- 负载均衡: 分散请求压力到多个 Token
- 开发测试: 快速切换不同权限级别的 Token
新版支持完整的图像上传、处理和 URL 转换流程:
- Base64 格式:
data:image/jpeg;base64,/9j/4AAQSk... - 远程 URL:
https://example.com/image.jpg - 自动格式检测: JPEG, PNG, GIF, WebP
- 图像上传: 自动上传到 Z.ai 服务器
- URL 转换: GLM-4.5V 专用格式
{file_id}_{filename} - 消息嵌入: 直接在消息中引用图像
- 错误处理: 完善的异常处理和重试机制
{
"model": "glm-4.5v",
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "分析这张图片" },
{
"type": "image_url",
"image_url": { "url": "data:image/jpeg;base64,..." }
}
]
}
]
}支持 Z.ai 的 Model Context Protocol (MCP) 高级功能:
| 服务器名称 | 功能描述 | 支持模型 | 状态 |
|---|---|---|---|
deep-web-search |
深度网络搜索 | GLM-4.5, GLM-4.6 | ✅ 可用 |
advanced-search |
高级搜索 | GLM-4.6 | ✅ 可用 |
vibe-coding |
编程助手 | GLM-4.5, GLM-4.6 | 🔒 隐藏特性 |
ppt-maker |
PPT 生成 | GLM-4.5, GLM-4.6 | 🔒 隐藏特性 |
image-search |
图像搜索 | GLM-4.5, GLM-4.6 | 🔒 隐藏特性 |
deep-research |
深度研究 | GLM-4.5, GLM-4.6 | 🔒 隐藏特性 |
- 思考模式检测: 自动识别 GLM-4.6 思考能力
- 搜索模式检测: 智能启用搜索功能
- 视觉模式检测: 完美支持 GLM-4.5V 多模态
动态生成真实浏览器请求头,完美模拟真实用户访问:
- Chrome 140: 最新 Chrome 浏览器
- Chrome 139: 稳定版 Chrome
- Firefox 126: Firefox 浏览器
- Safari macOS: macOS Safari
- Header 缓存: 5 分钟缓存,提升性能
- 随机选择: 随机选择浏览器配置
- 动态参数: 完整的浏览器指纹参数
- 基础头部: User-Agent, Accept, Accept-Language 等
- 安全头部: Sec-Fetch-* 系列,Sec-CH-UA 等
- 浏览器指纹: 屏幕分辨率、时区、语言等完整参数
与 Python 版本完全兼容的双层 HMAC-SHA256 签名算法:
- 双层签名: 第一层时间窗口 + 第二层内容签名
- 环境变量支持:
ZAI_SIGNING_SECRET自定义密钥 - 格式兼容: 支持 HEX 和 UTF-8 格式密钥
- 时间窗口: 5 分钟时间窗口,提升安全性
# 方式1:使用默认密钥(自动)
# 无需配置,自动使用内置密钥
# 方式2:环境变量(推荐)
export ZAI_SIGNING_SECRET="your-secret-key-here"
# 方式3:HEX 格式密钥
export ZAI_SIGNING_SECRET="6b65792d40404040292929282928283929292d787878782626262525252525"- ✅ 双层 HMAC-SHA256 签名机制,确保请求安全性
- ✅ 支持多种密钥格式(HEX、UTF-8)
- ✅ 完整的 JWT 多字段提取支持
- ✅ 智能密钥格式检测和转换
- ✅ 环境变量配置支持
要使用完整的多模态功能,需要获取正式的 Z.ai API Token:
- 访问 Z.ai 官网
- 注册账户并登录
- 在开发者设置中获取 API Token
- 将 Token 设置为
ZAI_TOKEN环境变量
- 打开 Z.ai 聊天界面
- 按 F12 打开开发者工具
- 切换到 "Application" 或 "存储" 标签
- 查看 Local Storage 中的认证 token
- 复制 token 值设置为环境变量
⚠️ 注意: 方式 2 获取的 token 可能有时效性,建议使用方式 1 获取长期有效的 API Token。
Deno Deploy 是一个全球分布式的边缘计算平台,非常适合部署 Deno 应用。
-
准备代码
- 确保你有一个 GitHub 仓库,包含
main.ts文件 - 将代码推送到 GitHub 仓库
- 确保你有一个 GitHub 仓库,包含
-
登录 Deno Deploy
- 访问 https://dash.deno.com/
- 使用 GitHub 账号登录
-
创建新项目
- 点击"New Project"按钮
- 选择你的 GitHub 仓库
- 选择包含
main.ts文件的分支
-
配置环境变量
- 在项目设置中,添加以下环境变量:
DEFAULT_KEY: 客户端 API 密钥(可选,默认: sk-your-key)ZAI_TOKEN: Z.ai 访问令牌(多模态功能必需,不提供仅支持文本对话)ZAI_TOKENS: 多 Token 池(高可用推荐,用逗号分隔多个 Token)ZAI_SIGNING_SECRET: 签名密钥(可选,用于自定义签名算法)DEBUG_MODE: 调试模式开关(可选,默认: true)DEFAULT_STREAM: 默认流式响应(可选,默认: true)DASHBOARD_ENABLED: Dashboard 功能开关(可选,默认: true)
- 在项目设置中,添加以下环境变量:
-
部署
- 点击"Deploy"按钮
- 等待部署完成
-
测试
- 部署完成后,你会获得一个 URL
- 访问
{你的URL}/v1/models测试 API 是否正常工作 - 访问
{你的URL}/dashboard查看监控仪表板
部署完成后,可通过你的 Deno Deploy 域名访问以下页面(完整端点说明见下文「服务端点访问」):
| 页面 | 路径 | 说明 |
|---|---|---|
| 🏠 服务首页 | / |
功能概览与导航入口 |
| 📊 监控面板 | /dashboard |
实时请求统计与性能指标(可通过 DASHBOARD_ENABLED 关闭) |
| 📚 API 文档 | /docs |
完整接口说明与示例 |
| 📋 模型列表 | /v1/models |
可用模型与状态 |
| 🤖 聊天接口 | /v1/chat/completions |
OpenAI 兼容主接口 |
适合本地开发、测试和内网部署场景。
-
安装 Deno
# Windows (PowerShell) irm https://deno.land/install.ps1 | iex # macOS/Linux curl -fsSL https://deno.land/install.sh | sh # 或访问 https://deno.land/#installation 查看更多安装方式
-
下载项目文件
- 确保你有
main.ts文件
- 确保你有
-
配置环境变量(可选)
# Linux/macOS export DEFAULT_KEY="sk-your-local-key" export ZAI_TOKEN="your-zai-token" # 单Token配置 export ZAI_TOKENS="token1,token2,token3" # 多Token池(推荐) export ZAI_SIGNING_SECRET="your-signing-secret" # 自定义签名密钥 export DEBUG_MODE="true" export PORT="9090" # Windows CMD set DEFAULT_KEY=sk-your-local-key set ZAI_TOKEN=your-zai-token set ZAI_TOKENS=token1,token2,token3 set ZAI_SIGNING_SECRET=your-signing-secret set DEBUG_MODE=true set PORT=9090 # Windows PowerShell $env:DEFAULT_KEY="sk-your-local-key" $env:ZAI_TOKEN="your-zai-token" $env:ZAI_TOKENS="token1,token2,token3" $env:ZAI_SIGNING_SECRET="your-signing-secret" $env:DEBUG_MODE="true" $env:PORT="9090"
-
启动服务
deno run --allow-net --allow-env main.ts
启动成功后,通过以下地址访问各项功能:
| 功能 | 本地地址 | 描述 |
|---|---|---|
| 🏠 服务首页 | http://localhost:9090/ |
功能概览和导航 |
| 🤖 API 端点 | http://localhost:9090/v1/chat/completions |
主要聊天接口 |
| 📊 监控面板 | http://localhost:9090/dashboard |
实时请求统计 |
| 📚 API 文档 | http://localhost:9090/docs |
完整使用说明 |
| 📋 模型列表 | http://localhost:9090/v1/models |
可用模型信息 |
# 开发环境推荐配置
export DEFAULT_KEY="sk-your-development-key" # 自定义API密钥
export ZAI_TOKENS="token1,token2,token3" # 多Token池(高可用)
export ZAI_SIGNING_SECRET="your-secret-key" # 自定义签名密钥
export DEBUG_MODE="true" # 启用详细日志
export DEFAULT_STREAM="true" # 默认流式响应
export DASHBOARD_ENABLED="true" # 启用监控面板
export PORT="9090" # 自定义端口
# 生产环境推荐配置
export DEFAULT_KEY="sk-your-secure-key" # 安全API密钥
export ZAI_TOKENS="prod-token1,prod-token2" # 生产Token池
export ZAI_SIGNING_SECRET="your-prod-secret" # 生产签名密钥
export DEBUG_MODE="false" # 关闭调试日志
export DEFAULT_STREAM="true" # 优化响应速度
export DASHBOARD_ENABLED="true" # 保留监控# 多Token池配置示例
export ZAI_TOKENS="eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9...,eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9..."
# 签名密钥配置示例
export ZAI_SIGNING_SECRET="6b65792d40404040292929282928283929292d787878782626262525252525"
# 检查配置
echo "Token池大小: $(echo $ZAI_TOKENS | tr ',' '\n' | wc -l)"
echo "签名密钥长度: ${#ZAI_SIGNING_SECRET}"# 测试API连通性
curl http://localhost:9090/v1/models
# 测试聊天功能
curl -X POST http://localhost:9090/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-your-local-key" \
-d '{
"model": "0727-360B-API",
"messages": [{"role": "user", "content": "你好"}],
"stream": false
}'适合需要更高控制力的生产环境部署。
# 编译为二进制文件(推荐用于生产环境)
deno compile --allow-net --allow-env --output ztoapi main.ts
# 运行编译后的文件
./ztoapi # Linux/macOS
ztoapi.exe # Windows使用 Docker Compose 可以一键启动服务,是本地开发和生产部署的推荐方式。
-
准备文件
- 项目已包含
Dockerfile和docker-compose.yml文件,无需手动创建。
- 项目已包含
-
配置环境变量
- 打开
docker-compose.yml文件。 - 修改
environment部分的DEFAULT_KEY为你自己的安全密钥。 - 根据需要,可以取消注释并设置
ZAI_TOKEN等其他变量。
- 打开
-
构建和运行
# 在 ZtoApi 目录下,一键构建并启动服务 docker-compose up -d # 查看服务日志 docker-compose logs -f # 关闭并移除容器 docker-compose down
使用进程管理器确保服务稳定运行:
# 使用 PM2 (需要先安装 pm2)
pm2 start "deno run --allow-net --allow-env main.ts" --name ztoapi
# 使用 systemd (Linux)
# 创建 /etc/systemd/system/ztoapi.service
[Unit]
Description=ZtoApi Service
After=network.target
[Service]
Type=simple
User=your-user
WorkingDirectory=/path/to/your/app
ExecStart=/path/to/deno run --allow-net --allow-env main.ts
Restart=always
Environment=DEFAULT_KEY=sk-your-key
Environment=DEBUG_MODE=false
[Install]
WantedBy=multi-user.target| 特性 | 本地运行 | Deno Deploy |
|---|---|---|
| 部署难度 | ⭐⭐ 需要手动配置 | ⭐⭐⭐⭐⭐ 一键部署 |
| 端口配置 | 🔧 可自定义 | ⚡ 自动分配 |
| SSL 证书 | ❌ 需要手动配置 | ✅ 自动 HTTPS |
| 全球分发 | ❌ 单节点 | ✅ 边缘网络 |
| 成本 | 🆓 服务器资源 | 🆓 有免费额度 |
| 控制力 | ⭐⭐⭐⭐⭐ 完全控制 | ⭐⭐⭐ 受平台限制 |
| 维护难度 | ⭐⭐ 需要运维 | ⭐⭐⭐⭐⭐ 托管服务 |
所有配置项都有合理的默认值,可直接部署使用。
| 变量名 | 说明 | 默认值 | 示例值 |
|---|---|---|---|
DEFAULT_KEY |
客户端 API 密钥(用于身份验证) | sk-your-key |
sk-my-secure-key-2024 |
| 变量名 | 说明 | 默认值 | 示例值 |
|---|---|---|---|
ZAI_TOKEN |
单个 Z.ai 访问令牌 | 空(自动匿名模式) | eyJhbGciOiJFUzI1NiIs... |
ZAI_TOKENS |
多 Token 池(高可用推荐) | 空 | token1,token2,token3 |
| 变量名 | 说明 | 默认值 | 示例值 |
|---|---|---|---|
ZAI_SIGNING_SECRET |
自定义签名密钥 | 内置安全密钥 | your-secret-key |
| HEX 格式密钥 | 内置安全密钥 | 6b65792d40404040292929282928283929292d787878782626262525252525 |
| 变量名 | 说明 | 默认值 | 可选值 |
|---|---|---|---|
DEBUG_MODE |
调试模式(详细日志输出) | true |
true / false |
DEFAULT_STREAM |
默认流式响应模式 | true |
true / false |
DASHBOARD_ENABLED |
实时监控 Dashboard | true |
true / false |
| 变量名 | 说明 | 默认值 | 示例值 |
|---|---|---|---|
UPSTREAM_URL |
Z.ai 上游 API 地址 | https://chat.z.ai/api/v2/chat/completions |
自定义代理地址 |
PORT |
服务器端口(仅自托管) | 9090 |
8080 |
- Token 配置优先级:
ZAI_TOKENS>ZAI_TOKEN> 匿名 Token - 签名密钥优先级:
ZAI_SIGNING_SECRET> 内置默认密钥 - 兼容性: 支持新旧配置并存,自动选择最佳配置
开发环境推荐:
- ✅ 使用
ZAI_TOKENS配置多个 Token 提升可用性- ✅ 设置
ZAI_SIGNING_SECRET自定义签名密钥- ✅ 启用
DEBUG_MODE=true便于调试生产环境推荐:
- ✅ 必须配置
ZAI_TOKENS确保高可用- ✅ 必须配置
ZAI_SIGNING_SECRET提升安全性- ✅ 设置
DEBUG_MODE=false提升性能- ✅ 保留
DASHBOARD_ENABLED=true监控服务状态
- 多模态功能: 必须设置
ZAI_TOKEN或ZAI_TOKENS才能使用图像、视频、文档、音频功能 - Token 权限: 匿名 Token 仅支持文本对话,正式 Token 支持全部功能
- 签名安全: 新版签名算法提供企业级安全保障
- 高可用: 强烈建议配置多个 Token 避免单点故障
import openai
# 配置客户端
client = openai.OpenAI(
api_key="your-api-key", # 对应 DEFAULT_KEY
base_url="https://your-project.deno.dev/v1"
)
# 使用 GLM-4.5 进行文本对话
response = client.chat.completions.create(
model="0727-360B-API", # GLM-4.5
messages=[{"role": "user", "content": "你好,请介绍一下自己"}]
)
print(response.choices[0].message.content)
# 使用 GLM-4.6 进行增强对话
response = client.chat.completions.create(
model="glm-4.6",
messages=[{"role": "user", "content": "用Python写一个快速排序算法"}]
)
print(response.choices[0].message.content)
# 使用 GLM-4.5V 进行全方位多模态理解(支持自动图像上传和URL转换)
# 1. 图像分析(新版支持自动上传处理)
response = client.chat.completions.create(
model="glm-4.5v",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "分析这张图片的内容和情感"},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,..."}}
]
}]
)
# 新版特性:自动上传图像到Z.ai服务器并转换URL格式
# 2. 远程图像URL(新版支持)
response = client.chat.completions.create(
model="glm-4.5v",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "分析这张网络图片"},
{"type": "image_url", "image_url": {"url": "https://example.com/image.jpg"}}
]
}]
)
# 新版特性:自动下载远程图像并上传处理
# 3. 使用思考模式(GLM-4.6)
response = client.chat.completions.create(
model="glm-4.6",
messages=[{"role": "user", "content": "用Python写一个快速排序算法,详细解释思路"}],
reasoning=True # 启用思考模式
)
# 新版特性:自动检测思考模式,展示详细推理过程
# 2. 视频理解
response = client.chat.completions.create(
model="glm-4.5v",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "总结这个视频的主要内容"},
{"type": "video_url", "video_url": {"url": "data:video/mp4;base64,..."}}
]
}]
)
# 3. 文档分析
response = client.chat.completions.create(
model="glm-4.5v",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "提取这份文档的关键信息"},
{"type": "document_url", "document_url": {"url": "data:application/pdf;base64,..."}}
]
}]
)
# 4. 音频理解
response = client.chat.completions.create(
model="glm-4.5v",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "转录并分析这段音频内容"},
{"type": "audio_url", "audio_url": {"url": "data:audio/mp3;base64,..."}}
]
}]
)
# 5. 多媒体组合分析
response = client.chat.completions.create(
model="glm-4.5v",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "综合分析这些多媒体内容的关联性"},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,..."}},
{"type": "document_url", "document_url": {"url": "data:application/pdf;base64,..."}},
{"type": "audio_url", "audio_url": {"url": "data:audio/wav;base64,..."}}
]
}]
)
print(response.choices[0].message.content)
# 流式请求示例
response = client.chat.completions.create(
model="0727-360B-API",
messages=[{"role": "user", "content": "请写一首关于春天的诗"}],
stream=True
)
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")# 使用 GLM-4.5 进行文本对话
curl -X POST https://your-project.deno.dev/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{
"model": "0727-360B-API",
"messages": [{"role": "user", "content": "你好"}],
"stream": false
}'
# 使用 GLM-4.6 进行增强对话
curl -X POST https://your-project.deno.dev/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{
"model": "glm-4.6",
"messages": [{"role": "user", "content": "用Python写一个快速排序算法"}],
"stream": false
}'
# 使用 GLM-4.5V 进行全方位多模态理解
# 图像分析
curl -X POST https://your-project.deno.dev/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{
"model": "glm-4.5v",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "分析这张图片"},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,..."}}
]
}]
}'
# 视频理解
curl -X POST https://your-project.deno.dev/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{
"model": "glm-4.5v",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "总结这个视频内容"},
{"type": "video_url", "video_url": {"url": "data:video/mp4;base64,..."}}
]
}]
}'
# 文档分析
curl -X POST https://your-project.deno.dev/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{
"model": "glm-4.5v",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "分析这份文档"},
{"type": "document_url", "document_url": {"url": "data:application/pdf;base64,..."}}
]
}]
}'
# 多媒体组合分析
curl -X POST https://your-project.deno.dev/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{
"model": "glm-4.5v",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "综合分析这些内容"},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,..."}},
{"type": "document_url", "document_url": {"url": "data:application/pdf;base64,..."}}
]
}]
}'
# 流式请求示例
curl -X POST https://your-project.deno.dev/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{
"model": "0727-360B-API",
"messages": [{"role": "user", "content": "请写一首诗"}],
"stream": true
}'
// 使用 GLM-4.5 进行文本对话
async function chatWithGLM45(message, stream = false) {
const response = await fetch(
"https://your-project.deno.dev/v1/chat/completions",
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer your-api-key",
},
body: JSON.stringify({
model: "0727-360B-API",
messages: [{ role: "user", content: message }],
stream: stream,
}),
}
);
const data = await response.json();
console.log(data.choices[0].message.content);
}
// 使用 GLM-4.5V 进行全方位多模态理解
// 1. 图像分析
async function analyzeImage(text, imageUrl) {
const response = await fetch(
"https://your-project.deno.dev/v1/chat/completions",
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer your-api-key",
},
body: JSON.stringify({
model: "glm-4.5v",
messages: [
{
role: "user",
content: [
{ type: "text", text: text },
{ type: "image_url", image_url: { url: imageUrl } },
],
},
],
}),
}
);
const data = await response.json();
console.log(data.choices[0].message.content);
}
// 2. 视频理解
async function analyzeVideo(text, videoUrl) {
const response = await fetch(
"https://your-project.deno.dev/v1/chat/completions",
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer your-api-key",
},
body: JSON.stringify({
model: "glm-4.5v",
messages: [
{
role: "user",
content: [
{ type: "text", text: text },
{ type: "video_url", video_url: { url: videoUrl } },
],
},
],
}),
}
);
const data = await response.json();
console.log(data.choices[0].message.content);
}
// 3. 文档分析
async function analyzeDocument(text, documentUrl) {
const response = await fetch(
"https://your-project.deno.dev/v1/chat/completions",
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer your-api-key",
},
body: JSON.stringify({
model: "glm-4.5v",
messages: [
{
role: "user",
content: [
{ type: "text", text: text },
{ type: "document_url", document_url: { url: documentUrl } },
],
},
],
}),
}
);
const data = await response.json();
console.log(data.choices[0].message.content);
}
// 4. 多媒体组合分析
async function analyzeMultimedia(text, mediaUrls) {
const content = [{ type: "text", text: text }];
// 添加各种媒体类型
if (mediaUrls.image)
content.push({ type: "image_url", image_url: { url: mediaUrls.image } });
if (mediaUrls.video)
content.push({ type: "video_url", video_url: { url: mediaUrls.video } });
if (mediaUrls.document)
content.push({
type: "document_url",
document_url: { url: mediaUrls.document },
});
if (mediaUrls.audio)
content.push({ type: "audio_url", audio_url: { url: mediaUrls.audio } });
const response = await fetch(
"https://your-project.deno.dev/v1/chat/completions",
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer your-api-key",
},
body: JSON.stringify({
model: "glm-4.5v",
messages: [{ role: "user", content }],
}),
}
);
const data = await response.json();
console.log(data.choices[0].message.content);
}
// 使用示例
chatWithGLM45("你好,请介绍一下JavaScript");
analyzeImage("分析这张图片", "data:image/jpeg;base64,...");
analyzeVideo("总结视频内容", "data:video/mp4;base64,...");
analyzeDocument("提取文档要点", "data:application/pdf;base64,...");
analyzeMultimedia("综合分析这些内容", {
image: "data:image/jpeg;base64,...",
document: "data:application/pdf;base64,...",
});- 运行时: Deno 1.40+ (零配置、安全优先)
- 语言: TypeScript 5.0+ (类型安全、现代语法)
- HTTP 服务: Deno 原生 HTTP API (高性能、低延迟)
- 流式传输: Server-Sent Events (SSE) 标准实现
- 部署平台: 支持 Deno Deploy 边缘计算和传统服务器
- 零依赖: 无需外部依赖包,启动速度极快
- 内存优化: 智能请求缓存和内存管理
- 并发处理: 支持高并发请求和连接复用
- 边缘部署: 基于 Deno Deploy 的全球边缘网络
- 思考过程解析: 智能提取和展示 GLM-4.5 推理过程
- 多模态支持: 支持文本和图像输入处理
- 流式优化: 实时逐 token 输出,响应更流畅
- 匿名会话: 每次对话独立 token,保护隐私
- Token 池管理: 智能轮换和故障切换机制
- 图像处理流水线: 自动上传、格式转换、URL 映射
- MCP 服务器集成: 搜索、编程、PPT 生成等高级功能
- 智能浏览器模拟: 动态 Header 生成和指纹参数
- 高级模式检测: 自动识别思考、搜索、视觉模式
- 增强签名算法: 双层 HMAC-SHA256,提供企业级安全保障
- 实时 Dashboard: Web 界面实时监控 API 使用情况
- 性能指标: 响应时间、成功率、错误统计
- 请求追踪: 详细的请求日志和用户代理分析
- SSE 监控: 实时数据推送,无需页面刷新
部署完成后,你可以通过以下端点访问各项功能:
| 端点 | 功能 | 描述 |
|---|---|---|
/ |
🏠 服务首页 | 功能概览和快速导航 |
/v1/models |
📋 模型列表 | 获取可用 AI 模型信息 |
/v1/chat/completions |
🤖 聊天完成 | OpenAI 兼容的主要 API 端点 |
/dashboard |
📊 监控面板 | 实时 API 使用统计和性能监控 |
/docs |
📚 API 文档 | 完整的 API 使用说明和示例 |
示例 URL: https://your-project.deno.dev/v1/chat/completions
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| Deno Deploy 部署失败 | TypeScript 语法错误 | 检查 main.ts 文件语法,运行 deno check main.ts |
| 模块加载错误 | 权限不足 | 确保启动命令包含 --allow-net --allow-env |
| 启动时崩溃 | 环境变量冲突 | 检查环境变量格式,使用默认值测试 |
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 401 Unauthorized | API 密钥错误 | 检查 Authorization: Bearer your-key 格式 |
| 502 Bad Gateway | 上游服务异常 | 检查 Z.ai 服务状态,等待恢复 |
| 超时无响应 | 网络连接问题 | 检查 UPSTREAM_URL 设置,测试网络连通性 |
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 页面无法访问 | Dashboard 未启用 | 设置 DASHBOARD_ENABLED=true |
| 数据不更新 | SSE 连接中断 | 刷新页面,检查浏览器控制台错误 |
| 样式异常 | CDN 资源加载失败 | 检查网络连接,等待 CDN 恢复 |
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 流式响应中断 | 网络不稳定 | 使用非流式模式:stream: false |
| 响应格式错误 | 客户端不支持 SSE | 确认客户端支持 text/event-stream |
| 内容乱码 | 编码问题 | 检查客户端字符编码设置 |
| 问题 | 排查步骤 | 解决方案 |
|---|---|---|
| GLM-4.5V 无法识别多媒体 | 1. 确认模型 ID: "glm-4.5v"2. 开启调试模式查看日志 3. 检查媒体格式和大小 |
使用正确的多模态消息格式 |
| 多媒体数据未发送到后台 | 查看调试日志中的 🎯 检测到图像内容 |
验证消息结构包含对应的 URL 字段 |
| 媒体格式不支持 | 检查是否为 Base64 或 HTTP URL | 支持图像/视频/文档/音频多种格式 |
| 上游返回"something went wrong" | 检查是否设置了 ZAI_TOKEN 环境变量 |
多模态功能需要正式 API Token,不支持匿名 token |
| 问题 | 排查步骤 | 解决方案 |
|---|---|---|
| Token 池不工作 | 1. 检查 ZAI_TOKENS 格式2. 确认 Token 有效性 3. 查看调试日志 |
使用逗号分隔的有效 Token |
| 频繁切换 Token | 1. 检查 Token 权限 2. 查看失败次数统计 3. 验证网络连接 |
更新无效的 Token |
| 匿名 Token 失败 | 1. 检查网络连接 2. 查看匿名 Token 获取日志 3. 配置正式 Token |
配置 ZAI_TOKEN 或 ZAI_TOKENS |
| 问题 | 排查步骤 | 解决方案 |
|---|---|---|
| 签名验证失败 | 1. 检查 ZAI_SIGNING_SECRET 配置2. 确认密钥格式正确 3. 查看签名生成日志 |
使用正确的密钥格式 |
| 签名参数不匹配 | 1. 检查时间窗口同步 2. 验证请求参数格式 3. 确认密钥使用正确 |
调整参数配置 |
| 问题 | 排查步骤 | 解决方案 |
|---|---|---|
| 思考模式未启用 | 1. 确认使用 GLM-4.6 模型 2. 检查 reasoning: true 参数3. 查看调试日志 |
使用正确的模型和参数 |
| 搜索功能不工作 | 1. 检查 MCP 服务器配置 2. 确认模型支持搜索功能 3. 查看功能检测日志 |
使用支持搜索的模型 |
| 图像上传失败 | 1. 检查 Token 权限 2. 确认图像格式和大小 3. 查看上传错误日志 |
使用有效的 Token 和正确格式 |
⚠️ 重要: 如果使用匿名 token(未设置ZAI_TOKEN),多媒体请求会被 Z.ai 服务器拒绝。
支持的多模态消息格式:
{
"model": "glm-4.5v",
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "分析这些多媒体内容" },
{
"type": "image_url",
"image_url": { "url": "data:image/jpeg;base64,..." }
},
{
"type": "video_url",
"video_url": { "url": "data:video/mp4;base64,..." }
},
{
"type": "document_url",
"document_url": { "url": "data:application/pdf;base64,..." }
},
{
"type": "audio_url",
"audio_url": { "url": "data:audio/mp3;base64,..." }
}
]
}
]
}调试日志关键字:
Token 池已初始化,包含 X 个 Token- Token 池初始化成功Token 获取成功: xxxx...- Token 获取正常切换到下一个 Token: xxxx...- Token 故障切换Token 已标记为无效- Token 失效标记
🎯 检测到图像内容- 确认收到图像开始上传图像: xxxx...- 图像上传开始图像上传成功: file_xxx- 图像上传成功GLM-4.5V 图像 URL 已转换- URL 格式转换完成图像已添加到文件列表: file_xxx- 非视觉模型文件处理
模型能力检测: 思考=X, 搜索=X, 高级搜索=X, 视觉=X, MCP=X- 能力检测结果检测到高级搜索模型,添加 advanced-search MCP 服务器- 高级搜索启用检测到搜索模型,添加 deep-web-search MCP 服务器- 搜索功能启用
使用环境变量密钥: xxxx...- 自定义密钥使用使用默认密钥- 默认密钥使用生成新版签名: xxxx- 签名生成成功
🎯 检测到全方位多模态请求- 确认收到多媒体内容🖼️ 消息[X] 图像[Y]- 图像数据详情🎥 消息[X] 视频[Y]- 视频数据详情📄 消息[X] 文档[Y]- 文档数据详情🎵 消息[X] 音频[Y]- 音频数据详情🎯 多模态内容统计- 各类媒体统计信息⚠️ 警告: 模型不支持多模态- 模型选择错误⚠️ 重要警告: 正在使用匿名token处理多模态请求- Token 权限不足✅ 使用正式API Token,支持完整多模态功能- Token 配置正确
启用调试模式以获取详细日志:
# 在Deno Deploy中,设置环境变量
DEBUG_MODE=true
# 在自托管环境中
export DEBUG_MODE=true
deno run --allow-net --allow-env main.ts| 优化项 | 配置 | 效果 | 适用场景 |
|---|---|---|---|
| 关闭调试日志 | DEBUG_MODE=false |
减少 I/O 开销,提升 20-30% 性能 | 生产环境 |
| 禁用 Dashboard | DASHBOARD_ENABLED=false |
节省内存和 CPU 资源 | 无监控需求 |
| 流式响应优化 | DEFAULT_STREAM=true |
降低首字节延迟 | 实时对话场景 |
# 推荐的生产环境配置
export DEBUG_MODE=false
export DASHBOARD_ENABLED=true # 保留监控功能
export DEFAULT_STREAM=true # 优化响应速度- Deno Deploy: 自动全球边缘分发,无需额外配置
- 自托管: 建议使用反向代理 (Nginx/Cloudflare) 进行负载均衡
- 监控: 利用内置 Dashboard 监控关键指标
| 安全措施 | 配置方法 | 重要性 |
|---|---|---|
| 自定义 API 密钥 | DEFAULT_KEY=your-secure-key |
⭐⭐⭐⭐⭐ |
| 使用复杂密钥 | 至少 32 位随机字符 | ⭐⭐⭐⭐ |
| 定期轮换密钥 | 建议每月更换 | ⭐⭐⭐ |
# 推荐的安全配置
export DEFAULT_KEY="sk-$(openssl rand -hex 32)" # 生成随机密钥
export DEBUG_MODE=false # 避免敏感信息泄露- 实时监控: 通过 Dashboard 监控异常请求模式
- 日志分析: 关注频繁失败的 IP 地址
- 流量统计: 监控 API 调用频率,防止滥用
| 威胁类型 | 检测方法 | 应对措施 |
|---|---|---|
| API 密钥泄露 | 异常调用量 | 立即更换 DEFAULT_KEY |
| 恶意请求 | 高错误率 | 临时禁用服务,检查日志 |
| 服务滥用 | 超高并发 | 考虑添加速率限制 |
- 定期更新: 关注 Deno 官方更新,及时升级运行时
- 依赖管理: 虽然本项目使用原生 API,但仍需关注 Deno API 变化
- 备份策略: 定期备份配置和环境变量
如果遇到问题,可以通过以下方式获取帮助:
- 查看 Deno 官方文档: https://deno.land/manual
- 访问 Deno Deploy 文档: https://deno.com/deploy/docs
- 提交 Issue 到原项目仓库
- ✅ 稳定运行: 已在生产环境验证
- 🔄 持续更新: 跟随 Deno 和 Z.ai 最新特性
- 🛡️ 安全优先: 定期安全审计和更新
- 📈 性能优化: 持续性能调优和监控
如果这个项目对你有帮助,请给我们一个 ⭐ Star!
| 支持渠道 | 描述 | 链接 |
|---|---|---|
| 📚 官方文档 | Deno 官方文档 | deno.land/manual |
| 🚀 部署平台 | Deno Deploy 文档 | deno.com/deploy/docs |
| 🐛 问题反馈 | GitHub Issues | 项目仓库 Issues 页面 |
| 💬 讨论交流 | GitHub Discussions | 项目仓库 Discussions 页面 |
本项目基于 MIT 许可证开源,详见 LICENSE 文件。
- v2 API: 升级到 Z.ai v2 API 端点 (
/api/v2/chat/completions) - 兼容性提升: 所有模型现在统一使用 v2 API,提升稳定性和性能
- 无缝迁移: 向后兼容现有配置,自动使用新端点
- GLM-4.7: 最新推理模型,更强的思考和编程能力
- GLM-5: 下一代旗舰模型,全方位能力提升
- GLM-4.6V: 增强多模态模型,视觉理解 + 高级推理
- GLM-4.5-Air: 轻量级模型,快速响应,适合日常对话
- 0808-360B-DR: 深度研究专用模型,适合复杂分析任务
- GLM-4.5 (
0727-360B-API) - 通用对话 - GLM-4.6 (
glm-4.6) - 增强推理 - GLM-4.7 (
glm-4.7) - 🆕 最新推理 - GLM-5 (
glm-5) - 🚀 旗舰模型 - GLM-4.5V (
glm-4.5v) - 多模态理解 - GLM-4.6V (
glm-4.6v) - 增强多模态 - GLM-4.5-Air (
0727-106B-API) - ⚡ 轻量快速 - 0808-360B-DR (
0808-360B-DR) - 🔬 深度研究
新版 ZtoApi 带来了革命性的功能升级,与 Python 版本功能完全对齐:
- 智能 Token 池: 多 Token 轮换,自动故障切换,大幅提升服务稳定性
- 高可用架构: 支持生产级部署需求,确保服务连续性
- 自动图像处理: 支持 base64 和远程 URL,自动上传和格式转换
- GLM-4.5V 优化: 专用 URL 格式,完美视觉理解能力
- MCP 服务器: 深度搜索、高级搜索、编程助手、PPT 生成等
- 智能模式检测: 自动识别思考模式、搜索模式、视觉能力
- 动态 Header 生成: 真实浏览器指纹,完美模拟用户访问
- 请求参数优化: 完整的浏览器环境参数
- 双层签名算法: 安全签名
- 环境变量支持: 灵活的密钥配置管理
- 响应速度: 新版图像处理和 Header 优化提升 30% 响应速度
- 稳定性: Token 池管理减少 90% 的服务中断
- 安全性: 企业级签名算法和 Token 池管理,保障服务安全
- 🏢 企业部署: 高可用、多 Token、智能故障切换
- 🔬 开发测试: 完整功能测试、智能调试、详细日志
- 🚀 生产服务: 稳定可靠、性能优化、安全增强
🎉 享受使用新版 ZtoApi 带来的企业级体验!
Made with ❤️ using Deno & TypeScript - v2.0 Enterprise Edition