Files changed (1) hide show
  1. README.md +8 -370
README.md CHANGED
@@ -1,370 +1,8 @@
1
- # Z2API
2
-
3
- 一个为Z.AI API提供OpenAI兼容接口的代理服务器,支持cookie池管理、智能内容过滤和灵活的响应模式控制。
4
-
5
- > **💡 核心特性:** 支持流式和非流式两种响应模式,非流式模式下可选择性隐藏AI思考过程,提供更简洁的API响应。
6
-
7
- ## ✨ 特性
8
-
9
- - 🔌 **OpenAI SDK完全兼容** - 无缝替换OpenAI API
10
- - 🍪 **智能Cookie池管理** - 多token轮换,自动故障转移
11
- - 🧠 **智能内容过滤** - 非流式响应可选择隐藏AI思考过程
12
- - 🌊 **灵活响应模式** - 支持流式和非流式响应,可配置默认模式
13
- - 🛡️ **安全认证** - 固定API Key验证
14
- - 📊 **健康检查** - 自动监控和恢复
15
- - 📝 **详细日志** - 完善的调试和监控信息
16
-
17
- ## 🚀 快速开始
18
-
19
- ### 环境要求
20
-
21
- - Python 3.8+
22
- - pip
23
-
24
- ### 安装步骤
25
-
26
- 1. **克隆项目**
27
- ```bash
28
- git clone https://github.com/LargeCupPanda/Z2API.git
29
- cd Z2API
30
- ```
31
-
32
- 2. **安装依赖**
33
- ```bash
34
- pip install -r requirements.txt
35
- ```
36
-
37
- 3. **配置环境变量**
38
- ```bash
39
- cp .env.example .env
40
- # 编辑 .env 文件,配置你的参数
41
- ```
42
-
43
- 4. **启动服务器**
44
- ```bash
45
- python main.py
46
- ```
47
-
48
- 服务器将在 `http://localhost:8000` 启动
49
-
50
- ## ⚙️ 配置说明
51
-
52
- 在 `.env` 文件中配置以下参数:
53
-
54
- ```env
55
- # 服务器设置
56
- HOST=0.0.0.0
57
- PORT=8000
58
-
59
- # API Key (用于外部认证)
60
- API_KEY=sk-z2api-key-2024
61
-
62
- # 内容过滤设置 (仅适用于非流式响应)
63
- # 是否显示AI思考过程 (true/false)
64
- SHOW_THINK_TAGS=false
65
-
66
- # 响应模式设置
67
- # 默认是否使用流式响应 (true/false)
68
- DEFAULT_STREAM=false
69
-
70
- # Z.AI Token配置
71
- # 从 https://chat.z.ai 获取的JWT token (不包含"Bearer "前缀),多个用`,`分隔,比如:token1,token2
72
- Z_AI_COOKIES=eyJ9...
73
-
74
- # 速率限制
75
- MAX_REQUESTS_PER_MINUTE=60
76
-
77
- # 日志级别 (DEBUG, INFO, WARNING, ERROR)
78
- LOG_LEVEL=INFO
79
- ```
80
-
81
- ### 🔑 获取Z.AI Token
82
-
83
- 1. 访问 [https://chat.z.ai](https://chat.z.ai) 并登录
84
- 2. 打开浏览器开发者工具 (F12)
85
- 3. 切换到 **Network** 标签
86
- 4. 发送一条消息给AI
87
- 5. 找到对 `chat/completions` 的请求
88
- 6. 复制请求头中 `Authorization: Bearer xxx` 的token部分
89
- 7. 将token值(不包括"Bearer "前缀)配置到 `Z_AI_COOKIES`
90
-
91
- ## 📖 使用方法
92
-
93
- ### OpenAI SDK (推荐)
94
-
95
- ```python
96
- import openai
97
-
98
- # 配置客户端
99
- client = openai.OpenAI(
100
- base_url="http://localhost:8000/v1",
101
- api_key="sk-z2api-key-2024" # 使用配置的API Key
102
- )
103
-
104
- # 发送请求
105
- response = client.chat.completions.create(
106
- model="GLM-4.5", # 固定模型名称
107
- messages=[
108
- {"role": "user", "content": "你好,请介绍一下自己"}
109
- ],
110
- max_tokens=1000,
111
- temperature=0.7
112
- )
113
-
114
- print(response.choices[0].message.content)
115
- ```
116
-
117
- ### cURL
118
-
119
- ```bash
120
- curl -X POST http://localhost:8000/v1/chat/completions \
121
- -H "Content-Type: application/json" \
122
- -H "Authorization: Bearer sk-z2api-key-2024" \
123
- -d '{
124
- "model": "GLM-4.5",
125
- "messages": [
126
- {"role": "user", "content": "Hello, how are you?"}
127
- ],
128
- "max_tokens": 500
129
- }'
130
- ```
131
-
132
- ### 不同响应模式示例
133
-
134
- #### 非流式响应(默认,支持思考内容过滤)
135
-
136
- ```python
137
- import openai
138
-
139
- client = openai.OpenAI(
140
- base_url="http://localhost:8000/v1",
141
- api_key="sk-z2api-key-2024"
142
- )
143
-
144
- # 非流式响应,会根据SHOW_THINK_TAGS设置过滤内容
145
- response = client.chat.completions.create(
146
- model="GLM-4.5",
147
- messages=[{"role": "user", "content": "解释一下量子计算"}],
148
- stream=False # 或者不设置此参数(使用DEFAULT_STREAM默认值)
149
- )
150
-
151
- print(response.choices[0].message.content)
152
- ```
153
-
154
- #### 流式响应(包含完整内容)
155
-
156
- ```python
157
- # 流式响应,始终包含完整内容(忽略SHOW_THINK_TAGS设置)
158
- stream = client.chat.completions.create(
159
- model="GLM-4.5",
160
- messages=[{"role": "user", "content": "写一首关于春天的诗"}],
161
- stream=True
162
- )
163
-
164
- for chunk in stream:
165
- if chunk.choices[0].delta.content is not None:
166
- print(chunk.choices[0].delta.content, end="")
167
- ```
168
-
169
- ## 🎛️ 高级配置
170
-
171
- ### 响应模式控制
172
-
173
- 系统支持两种响应模式,通过以下参数控制:
174
-
175
- ```env
176
- # 默认响应模式 (推荐设置为false,即非流式)
177
- DEFAULT_STREAM=false
178
-
179
- # 思考内容过滤 (仅对非流式响应生效)
180
- SHOW_THINK_TAGS=false
181
- ```
182
-
183
- **响应模式说明:**
184
-
185
- | 模式 | 参数设置 | 思考内容过滤 | 适用场景 |
186
- |------|----------|--------------|----------|
187
- | **非流式** | `stream=false` 或默认 | ✅ 支持 `SHOW_THINK_TAGS` | 简洁回答,API集成 |
188
- | **流式** | `stream=true` | ❌ 忽略 `SHOW_THINK_TAGS` | 实时交互,聊天界面 |
189
-
190
- **效果对比:**
191
- - **非流式 + `SHOW_THINK_TAGS=false`**: 只返回答案(~80字符),简洁明了
192
- - **非流式 + `SHOW_THINK_TAGS=true`**: 完整内容(~1300字符),包含思考过程
193
- - **流式响应**: 始终包含完整内容,实时输出
194
-
195
- **推荐配置:**
196
- ```env
197
- # 推荐配置:默认���流式,隐藏思考过程
198
- DEFAULT_STREAM=false
199
- SHOW_THINK_TAGS=false
200
- ```
201
-
202
- 这样配置可以:
203
- - 提供简洁的API响应(适合大多数应用场景)
204
- - 需要完整内容时可通过 `stream=true` 获取
205
- - 需要思考过程时可通过 `SHOW_THINK_TAGS=true` 开启
206
-
207
- ### Cookie池管理
208
-
209
- 支持配置多个token以提高并发性和可靠性:
210
-
211
- ```env
212
- # 单个token
213
- Z_AI_COOKIES=token1
214
-
215
- # 多个token (逗号分隔)
216
- Z_AI_COOKIES=token1,token2,token3
217
- ```
218
-
219
- 系统会自动:
220
- - 轮换使用不同的token
221
- - 检测失效的token并自动切换
222
- - 定期进行健康检查和恢复
223
-
224
- ## 🔍 API端点
225
-
226
- | 端点 | 方法 | 描述 |
227
- |------|------|------|
228
- | `/v1/chat/completions` | POST | 聊天完成接口 (OpenAI兼容) |
229
- | `/health` | GET | 健康检查 |
230
- | `/` | GET | 服务状态 |
231
-
232
- ## 🧪 测试
233
-
234
- ### 基本测试
235
-
236
- ```bash
237
- # 运行示例测试
238
- python example_usage.py
239
-
240
- # 测试健康检查
241
- curl http://localhost:8000/health
242
- ```
243
-
244
- ### API测试
245
-
246
- ```bash
247
- # 测试非流式响应
248
- curl -X POST http://localhost:8000/v1/chat/completions \
249
- -H "Content-Type: application/json" \
250
- -H "Authorization: Bearer sk-z2api-key-2024" \
251
- -d '{
252
- "model": "GLM-4.5",
253
- "messages": [{"role": "user", "content": "Hello"}],
254
- "stream": false
255
- }'
256
-
257
- # 测试流式响应
258
- curl -X POST http://localhost:8000/v1/chat/completions \
259
- -H "Content-Type: application/json" \
260
- -H "Authorization: Bearer sk-z2api-key-2024" \
261
- -d '{
262
- "model": "GLM-4.5",
263
- "messages": [{"role": "user", "content": "Hello"}],
264
- "stream": true
265
- }'
266
- ```
267
-
268
- ## 📊 监控和日志
269
-
270
- ### 日志级别
271
-
272
- ```env
273
- LOG_LEVEL=DEBUG # 详细调试信息
274
- LOG_LEVEL=INFO # 一般信息 (推荐)
275
- LOG_LEVEL=WARNING # 警告信息
276
- LOG_LEVEL=ERROR # 仅错误信息
277
- ```
278
-
279
- ### 健康检查
280
-
281
- 访问 `http://localhost:8000/health` 查看服务状态:
282
-
283
- ```json
284
- {
285
- "status": "healthy",
286
- "timestamp": "2025-08-04T17:30:00Z",
287
- "version": "1.0.0"
288
- }
289
- ```
290
-
291
- ## 🔧 故障排除
292
-
293
- ### 常见问题
294
-
295
- 1. **401 Unauthorized**
296
- - 检查API Key是否正确配置
297
- - 确认使用的是 `sk-z2api-key-2024`
298
-
299
- 2. **Token失效**
300
- - 重新从Z.AI网站获取新的token
301
- - 更新 `.env` 文件中的 `Z_AI_COOKIES`
302
-
303
- 3. **连接超时**
304
- - 检查网络连接
305
- - 确认Z.AI服务可访问
306
-
307
- 4. **内容为空或不符合预期**
308
- - 检查 `SHOW_THINK_TAGS` 和 `DEFAULT_STREAM` 设置
309
- - 确认响应模式(流式 vs 非流式)
310
- - 查看服务器日志获取详细信息
311
-
312
- 5. **思考内容过滤不生效**
313
- - 确认使用的是非流式响应(`stream=false`)
314
- - 流式响应会忽略 `SHOW_THINK_TAGS` 设置
315
-
316
- 6. **服务启动失败**
317
- - 检查端口是否被占用:`netstat -tlnp | grep :8000`
318
- - 查看详细错误:直接运行 `python main.py`
319
- - 检查依赖是否安装:`pip list | grep fastapi`
320
-
321
- ### 调试模式
322
-
323
- ```bash
324
- # 启用详细日志
325
- export LOG_LEVEL=DEBUG
326
- python main.py
327
-
328
- # 或者直接在.env文件中设置
329
- echo "LOG_LEVEL=DEBUG" >> .env
330
- ```
331
-
332
- ## 📋 配置参数
333
-
334
- | 参数 | 描述 | 默认值 | 必需 |
335
- |------|------|--------|------|
336
- | `HOST` | 服务器监听地址 | `0.0.0.0` | 否 |
337
- | `PORT` | 服务器端口 | `8000` | 否 |
338
- | `API_KEY` | 外部认证密钥 | `sk-z2api-key-2024` | 否 |
339
- | `SHOW_THINK_TAGS` | 显示思考内容 | `false` | 否 |
340
- | `DEFAULT_STREAM` | 默认流式模式 | `false` | 否 |
341
- | `Z_AI_COOKIES` | Z.AI JWT tokens | - | 是 |
342
- | `LOG_LEVEL` | 日志级别 | `INFO` | 否 |
343
-
344
- ## 🛠️ 服务管理
345
-
346
- ### 基本操作
347
-
348
- ```bash
349
- # 启动服务(前台运行)
350
- python main.py
351
-
352
- # 后台运行
353
- nohup python main.py > z2api.log 2>&1 &
354
-
355
- # 查看日志
356
- tail -f z2api.log
357
-
358
- # 停止服务
359
- # 找到进程ID并终止
360
- ps aux | grep "python main.py"
361
- kill <PID>
362
- ```
363
-
364
- ## 🤝 贡献
365
-
366
- **特别说明:** 作者为非编程人士,此项目全程由AI开发,AI代码100%,人类代码0%。由于这种开发模式,更新维护起来非常费劲,所以特别欢迎大家提交Issue和Pull Request来帮助改进项目!
367
-
368
- ## 📄 许可证
369
-
370
- MIT License
 
1
+ title: {{title}}
2
+ emoji: {{emoji}}
3
+ colorFrom: {{colorFrom}}
4
+ colorTo: {{colorTo}}
5
+ sdk: {{sdk}}
6
+ sdk_version: "{{sdkVersion}}"
7
+ app_file: main.py
8
+ pinned: