# ZtoApi - OpenAI兼容API代理服务器



**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 边缘计算和自托管部署
- **🛠️ 灵活配置**: 通过环境变量进行全面配置管理
## 🤖 支持的模型
ZtoApi 支持 Z.ai 的多个先进 AI 模型:
| 模型ID | 模型名称 | 特性 |
|---------|----------|------|
| 0727-360B-API | GLM-4.5 | 通用对话、代码生成、工具调用 |
| glm-4.5v | GLM-4.5V | 🎯 全方位多模态理解:图像、视频、文档、音频 |
### 模型特性对比
**GLM-4.5** (`0727-360B-API`)
- ✅ 思考过程展示
- ✅ MCP 工具调用
- ✅ 代码生成与分析
- ❌ 多模态理解
**GLM-4.5V** (`glm-4.5v`) - 全方位多模态理解
- ✅ 思考过程展示
- ✅ 图像理解与分析
- ✅ 视频内容分析
- ✅ 复杂图表解读
- ✅ 长文档处理
- ✅ 音频内容理解
- ❌ MCP 工具调用
### 🎯 GLM-4.5V 支持的媒体类型
| 媒体类型 | 支持格式 | 应用场景 |
|---------|----------|----------|
| 📷 **图像** | JPEG, PNG, GIF, WebP | 图像描述、OCR、图表分析 |
| 🎥 **视频** | MP4, AVI, MOV | 视频摘要、动作识别、场景分析 |
| 📄 **文档** | PDF, DOC, TXT | 文档分析、信息提取、摘要生成 |
| 🎵 **音频** | MP3, WAV, AAC | 语音转文字、音频分析、内容理解 |
> ⚠️ **重要提示**: 多模态功能(图像、视频、文档、音频)需要**正式的Z.ai API Token**,匿名token不支持多媒体处理。
## 🔑 获取 Z.ai API Token
要使用完整的多模态功能,需要获取正式的 Z.ai API Token:
### 方式1: 通过 Z.ai 网站
1. 访问 [Z.ai 官网](https://chat.z.ai)
2. 注册账户并登录
3. 在开发者设置中获取 API Token
4. 将 Token 设置为 `ZAI_TOKEN` 环境变量
### 方式2: 浏览器开发者工具(临时方案)
1. 打开 [Z.ai 聊天界面](https://chat.z.ai)
2. 按 F12 打开开发者工具
3. 切换到 "Application" 或 "存储" 标签
4. 查看 Local Storage 中的认证token
5. 复制token值设置为环境变量
> ⚠️ **注意**: 方式2获取的token可能有时效性,建议使用方式1获取长期有效的API Token。
## 部署方式
### 1. Deno Deploy部署
Deno Deploy是一个全球分布式的边缘计算平台,非常适合部署Deno应用。
#### 步骤:
1. **准备代码**
- 确保你有一个GitHub仓库,包含`main.ts`文件
- 将代码推送到GitHub仓库
2. **登录Deno Deploy**
- 访问 [https://dash.deno.com/](https://dash.deno.com/)
- 使用GitHub账号登录
3. **创建新项目**
- 点击"New Project"按钮
- 选择你的GitHub仓库
- 选择包含`main.ts`文件的分支
4. **配置环境变量**
- 在项目设置中,添加以下环境变量:
- `DEFAULT_KEY`: 客户端API密钥(可选,默认: sk-your-key)
- `ZAI_TOKEN`: Z.ai访问令牌(**多模态功能必需**,不提供仅支持文本对话)
- `DEBUG_MODE`: 调试模式开关(可选,默认: true)
- `DEFAULT_STREAM`: 默认流式响应(可选,默认: true)
- `DASHBOARD_ENABLED`: Dashboard功能开关(可选,默认: true)
5. **部署**
- 点击"Deploy"按钮
- 等待部署完成
6. **测试**
- 部署完成后,你会获得一个URL
- 访问 `{你的URL}/v1/models` 测试API是否正常工作
- 访问 `{你的URL}/dashboard` 查看监控仪表板
### 2. 本地开发运行
适合本地开发、测试和内网部署场景。
#### 🚀 快速开始
1. **安装Deno**
```bash
# Windows (PowerShell)
irm https://deno.land/install.ps1 | iex
# macOS/Linux
curl -fsSL https://deno.land/install.sh | sh
# 或访问 https://deno.land/#installation 查看更多安装方式
```
2. **下载项目文件**
- 确保你有 `main.ts` 文件
3. **配置环境变量(可选)**
```bash
# Linux/macOS
export DEFAULT_KEY="sk-your-local-key"
export DEBUG_MODE="true"
export PORT="9090"
# Windows CMD
set DEFAULT_KEY=sk-your-local-key
set DEBUG_MODE=true
set PORT=9090
# Windows PowerShell
$env:DEFAULT_KEY="sk-your-local-key"
$env:DEBUG_MODE="true"
$env:PORT="9090"
```
4. **启动服务**
```bash
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` | 可用模型信息 |
#### 🔧 本地配置推荐
```bash
# 开发环境推荐配置
export DEFAULT_KEY="sk-your-development-key" # 自定义API密钥
export DEBUG_MODE="true" # 启用详细日志
export DEFAULT_STREAM="true" # 默认流式响应
export DASHBOARD_ENABLED="true" # 启用监控面板
export PORT="9090" # 自定义端口
```
#### ⚡ 快速测试
```bash
# 测试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
}'
```
### 3. 生产环境部署
适合需要更高控制力的生产环境部署。
#### 📦 编译为独立可执行文件
```bash
# 编译为二进制文件(推荐用于生产环境)
deno compile --allow-net --allow-env --output ztoapi main.ts
# 运行编译后的文件
./ztoapi # Linux/macOS
ztoapi.exe # Windows
```
#### 🐳 Docker容器化部署
1. **创建Dockerfile**
```dockerfile
FROM denoland/deno:1.40.0
WORKDIR /app
COPY main.ts .
EXPOSE 9090
CMD ["deno", "run", "--allow-net", "--allow-env", "main.ts"]
```
2. **构建和运行**
```bash
# 构建镜像
docker build -t ztoapi .
# 运行容器
docker run -p 9090:9090 \
-e DEFAULT_KEY="sk-your-production-key" \
-e DEBUG_MODE="false" \
ztoapi
```
#### 🔄 服务管理
使用进程管理器确保服务稳定运行:
```bash
# 使用 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
```
### 4. 本地 vs 云端部署对比
| 特性 | 本地运行 | Deno Deploy |
|------|----------|-------------|
| **部署难度** | ⭐⭐ 需要手动配置 | ⭐⭐⭐⭐⭐ 一键部署 |
| **端口配置** | 🔧 可自定义 | ⚡ 自动分配 |
| **SSL证书** | ❌ 需要手动配置 | ✅ 自动HTTPS |
| **全球分发** | ❌ 单节点 | ✅ 边缘网络 |
| **成本** | 🆓 服务器资源 | 🆓 有免费额度 |
| **控制力** | ⭐⭐⭐⭐⭐ 完全控制 | ⭐⭐⭐ 受平台限制 |
| **维护难度** | ⭐⭐ 需要运维 | ⭐⭐⭐⭐⭐ 托管服务 |
## 🔧 环境变量配置
### 🟢 基础配置(开箱即用)
所有配置项都有合理的默认值,可直接部署使用。
| 变量名 | 说明 | 默认值 | 示例值 |
|--------|------|--------|--------|
| `DEFAULT_KEY` | 客户端API密钥(用于身份验证) | `sk-your-key` | `sk-my-secure-key-2024` |
| `MODEL_NAME` | 对外显示的模型名称 | `GLM-4.5` | `GLM-4.5-Pro` |
### 🟡 功能开关配置
| 变量名 | 说明 | 默认值 | 可选值 |
|--------|------|--------|--------|
| `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/chat/completions` | 自定义代理地址 |
| `ZAI_TOKEN` | Z.ai官方访问令牌 | 空(自动匿名模式) | `eyJhbGciOiJFUzI1NiIs...` |
| `PORT` | 服务器端口(仅自托管) | `9090` | `8080` |
> **💡 提示**:
> - **必须设置 `ZAI_TOKEN`** 才能使用多模态功能(图像、视频、文档、音频)
> - 不设置 `ZAI_TOKEN` 将使用匿名token,仅支持纯文本对话
> - 生产环境建议设置 `DEBUG_MODE=false` 以提升性能
> - `DASHBOARD_ENABLED=false` 可禁用监控面板以节省资源
## 📝 API使用示例
### 🐍 Python 示例
```python
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.5V 进行全方位多模态理解
# 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,..."}}
]
}]
)
# 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="")
```
### 🌐 cURL 示例
```bash
# 使用 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.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
}'
```
### 🟨 JavaScript 示例
```javascript
// 使用 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 的全球边缘网络
### 🧠 AI 处理特性
- **思考过程解析**: 智能提取和展示 GLM-4.5 推理过程
- **多模态支持**: 支持文本和图像输入处理
- **流式优化**: 实时逐token输出,响应更流畅
- **匿名会话**: 每次对话独立token,保护隐私
### 📊 监控运维特性
- **实时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` |
| 启动时崩溃 | 环境变量冲突 | 检查环境变量格式,使用默认值测试 |
#### 🔑 API 请求问题
| 问题 | 可能原因 | 解决方案 |
|------|----------|----------|
| 401 Unauthorized | API密钥错误 | 检查 `Authorization: Bearer your-key` 格式 |
| 502 Bad Gateway | 上游服务异常 | 检查 Z.ai 服务状态,等待恢复 |
| 超时无响应 | 网络连接问题 | 检查 `UPSTREAM_URL` 设置,测试网络连通性 |
#### 📊 Dashboard 问题
| 问题 | 可能原因 | 解决方案 |
|------|----------|----------|
| 页面无法访问 | 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(未设置`ZAI_TOKEN`),多媒体请求会被Z.ai服务器拒绝。
**支持的多模态消息格式:**
```json
{
"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,..."}}
]
}]
}
```
**调试日志关键字:**
- `🎯 检测到全方位多模态请求` - 确认收到多媒体内容
- `🖼️ 消息[X] 图像[Y]` - 图像数据详情
- `🎥 消息[X] 视频[Y]` - 视频数据详情
- `📄 消息[X] 文档[Y]` - 文档数据详情
- `🎵 消息[X] 音频[Y]` - 音频数据详情
- `🎯 多模态内容统计` - 各类媒体统计信息
- `⚠️ 警告: 模型不支持多模态` - 模型选择错误
- `⚠️ 重要警告: 正在使用匿名token处理多模态请求` - **Token权限不足**
- `✅ 使用正式API Token,支持完整多模态功能` - Token配置正确
### 调试模式
启用调试模式以获取详细日志:
```bash
# 在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` | 降低首字节延迟 | 实时对话场景 |
### 📈 并发处理优化
```bash
# 推荐的生产环境配置
export DEBUG_MODE=false
export DASHBOARD_ENABLED=true # 保留监控功能
export DEFAULT_STREAM=true # 优化响应速度
```
### 🚀 部署优化
- **Deno Deploy**: 自动全球边缘分发,无需额外配置
- **自托管**: 建议使用反向代理 (Nginx/Cloudflare) 进行负载均衡
- **监控**: 利用内置 Dashboard 监控关键指标
## 🔒 安全防护指南
### 🛡️ 身份验证安全
| 安全措施 | 配置方法 | 重要性 |
|----------|----------|--------|
| 自定义 API 密钥 | `DEFAULT_KEY=your-secure-key` | ⭐⭐⭐⭐⭐ |
| 使用复杂密钥 | 至少 32 位随机字符 | ⭐⭐⭐⭐ |
| 定期轮换密钥 | 建议每月更换 | ⭐⭐⭐ |
### 🌐 网络安全
```bash
# 推荐的安全配置
export DEFAULT_KEY="sk-$(openssl rand -hex 32)" # 生成随机密钥
export DEBUG_MODE=false # 避免敏感信息泄露
```
### 📊 访问监控
- **实时监控**: 通过 Dashboard 监控异常请求模式
- **日志分析**: 关注频繁失败的 IP 地址
- **流量统计**: 监控 API 调用频率,防止滥用
### 🚨 应急响应
| 威胁类型 | 检测方法 | 应对措施 |
|----------|----------|----------|
| API 密钥泄露 | 异常调用量 | 立即更换 `DEFAULT_KEY` |
| 恶意请求 | 高错误率 | 临时禁用服务,检查日志 |
| 服务滥用 | 超高并发 | 考虑添加速率限制 |
## 更新维护
1. **定期更新**: 关注Deno官方更新,及时升级运行时
2. **依赖管理**: 虽然本项目使用原生API,但仍需关注Deno API变化
3. **备份策略**: 定期备份配置和环境变量
## 技术支持
如果遇到问题,可以通过以下方式获取帮助:
1. 查看Deno官方文档: [https://deno.land/manual](https://deno.land/manual)
2. 访问Deno Deploy文档: [https://deno.com/deploy/docs](https://deno.com/deploy/docs)
3. 提交Issue到原项目仓库
## 🤝 贡献和支持
### 📋 项目状态
- ✅ **稳定运行**: 已在生产环境验证
- 🔄 **持续更新**: 跟随 Deno 和 Z.ai 最新特性
- 🛡️ **安全优先**: 定期安全审计和更新
- 📈 **性能优化**: 持续性能调优和监控
### 🌟 Star History
如果这个项目对你有帮助,请给我们一个 ⭐ Star!
### 📞 技术支持
| 支持渠道 | 描述 | 链接 |
|----------|------|------|
| 📚 官方文档 | Deno 官方文档 | [deno.land/manual](https://deno.land/manual) |
| 🚀 部署平台 | Deno Deploy 文档 | [deno.com/deploy/docs](https://deno.com/deploy/docs) |
| 🐛 问题反馈 | GitHub Issues | 项目仓库 Issues 页面 |
| 💬 讨论交流 | GitHub Discussions | 项目仓库 Discussions 页面 |
### 📄 许可证
本项目基于 MIT 许可证开源,详见 [LICENSE](LICENSE) 文件。
---
**🎉 享受使用 ZtoApi 带来的便捷体验!**
*Made with ❤️ using Deno & TypeScript*