sanbo110 commited on
Commit
35ab070
·
1 Parent(s): 8978442

update sth at 2025-10-16 15:01:30

Browse files
Files changed (1) hide show
  1. xREADME.md +347 -0
xREADME.md ADDED
@@ -0,0 +1,347 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # OpenAI 代理服务
2
+
3
+ ![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)
4
+ ![Python: 3.9-3.12](https://img.shields.io/badge/python-3.9--3.12-green.svg)
5
+ ![FastAPI](https://img.shields.io/badge/framework-FastAPI-009688.svg)
6
+
7
+ 基于 FastAPI 的高性能 OpenAI API 兼容代理服务,采用多提供商架构设计,支持 Z.AI(GLM-4.5/4.6 系列)、K2Think、LongCat 等多种 AI 模型。
8
+
9
+ ## ✨ 核心特性
10
+
11
+ - 🔌 **OpenAI API 兼容** - 无缝对接现有 OpenAI 客户端
12
+ - 🏗️ **多提供商架构** - 统一接口支持 Z.AI、K2Think、LongCat
13
+ - 🧬 **数据库管理** - SQLite + Web 后台统一管理 Token
14
+ - 🚀 **流式响应** - 高性能 SSE 实时流式输出
15
+ - 🧠 **思考模式** - 支持 Thinking 模型的推理过程展示
16
+ - 🐳 **容器化部署** - Docker/Docker Compose 一键部署
17
+ - 🔄 **Token 池** - 智能轮询、容错恢复、健康检查
18
+ - 📊 **管理后台** - 实时监控、配置管理
19
+ - 🔐 **安全认证** - 密码保护的管理后台访问
20
+
21
+ ❤️ 感谢各位的反馈推动项目改进!
22
+
23
+ ## 🚀 快速开始
24
+
25
+ ### 环境要求
26
+
27
+ - Python 3.9-3.12
28
+ - pip 或 uv (推荐)
29
+
30
+ ### 本地运行
31
+
32
+ ```bash
33
+ # 1. 克隆项目
34
+ git clone https://github.com/ZyphrZero/z.ai2api_python.git
35
+ cd z.ai2api_python
36
+
37
+ # 2. 安装依赖(使用 uv 推荐)
38
+ curl -LsSf https://astral.sh/uv/install.sh | sh
39
+ uv sync
40
+
41
+ # 或使用 pip
42
+ pip install -r requirements.txt
43
+
44
+ # 3. 配置环境变量
45
+ cp .env.example .env
46
+ # 编辑 .env 文件,设置 AUTH_TOKEN 等配置
47
+
48
+ # 4. 启动服务
49
+ uv run python main.py # 或 python main.py
50
+ ```
51
+
52
+ **首次运行会自动初始化数据库**,访问以下地址:
53
+ - API 文档:http://localhost:8080/docs
54
+ - 管理后台:http://localhost:8080/admin(**需要登录**)
55
+ - Token 管理:http://localhost:8080/admin/tokens
56
+
57
+ > ⚠️ **重要**:
58
+ > - 请妥善保管 `AUTH_TOKEN`,不要泄露给他人
59
+ > - 管理后台默认密码为 `admin123`,**首次使用后请立即修改**
60
+
61
+ ### Docker 部署
62
+
63
+ 从 Docker Hub 拉取镜像:
64
+
65
+ ```bash
66
+ # 拉取最新镜像
67
+ docker pull zyphrzero/z-ai2api-python:latest
68
+
69
+ # 快速启动(创建数据目录)
70
+ mkdir -p data logs
71
+
72
+ # 运行容器
73
+ docker run -d \
74
+ --name z-ai-api-server \
75
+ -p 8080:8080 \
76
+ -e ADMIN_PASSWORD=admin123 \
77
+ -e AUTH_TOKEN=sk-your-api-key \
78
+ -e ANONYMOUS_MODE=true \
79
+ -e DB_PATH=/app/data/tokens.db \
80
+ -v $(pwd)/data:/app/data \
81
+ -v $(pwd)/logs:/app/logs \
82
+ --restart unless-stopped \
83
+ zyphrzero/z-ai2api-python:latest
84
+ ```
85
+
86
+ 启动服务:
87
+
88
+ ```bash
89
+ docker compose up -d
90
+ ```
91
+
92
+ #### 方式二:本地构建
93
+
94
+ ```bash
95
+ # 进入部署目录
96
+ cd deploy
97
+
98
+ # 启动服务(会自动构建镜像)
99
+ docker compose up -d
100
+
101
+ # 查看日志
102
+ docker compose logs -f api-server
103
+ ```
104
+
105
+ #### 数据持久化
106
+
107
+ 容器使用卷映射自动持久化数据:
108
+
109
+ ```
110
+ data/ # 数据库文件存储目录
111
+ ├── tokens.db # SQLite 数据库(自动创建)
112
+ logs/ # 日志文件存储目录
113
+ ```
114
+
115
+ 数据在容器重启或重建后仍然保留,无需担心丢失。
116
+
117
+ > 📖 **详细文档**:[Docker 部署指南](deploy/README_DOCKER.md)
118
+
119
+ ## 📖 支持的模型
120
+
121
+ ### Z.AI 提供商(GLM 系列)
122
+
123
+ | 模型 | 上游 ID | 特性 |
124
+ |------|---------|------|
125
+ | `GLM-4.5` | 0727-360B-API | 标准模型,通用对话 |
126
+ | `GLM-4.5-Thinking` | 0727-360B-API | 思考模型,显示推理过程 |
127
+ | `GLM-4.5-Search` | 0727-360B-API | 搜索模型,实时联网 |
128
+ | `GLM-4.5-Air` | 0727-106B-API | 轻量模型,快速响应 |
129
+ | `GLM-4.5V` | glm-4.5v | 多模态模型,支持图像理解 |
130
+ | `GLM-4.6` | GLM-4-6-API-V1 | 新版标准模型,200K 上下文 |
131
+ | `GLM-4.6-Thinking` | GLM-4-6-API-V1 | 新版思考模型,增强推理 |
132
+ | `GLM-4.6-Search` | GLM-4-6-API-V1 | 新版搜索模型,改进联网能力 |
133
+ | `GLM-4.6-advanced-search` | GLM-4-6-API-V1 | 高级搜索模型,深度研究 |
134
+
135
+ ### K2Think 提供商
136
+
137
+ | 模型 | 特性 |
138
+ |------|------|
139
+ | `MBZUAI-IFM/K2-Think` | 高质量推理模型 |
140
+
141
+ ### LongCat 提供商
142
+
143
+ | 模型 | 特性 |
144
+ |------|------|
145
+ | `LongCat-Flash` | 快速响应 |
146
+ | `LongCat` | 标准模型 |
147
+ | `LongCat-Search` | 搜索增强 |
148
+
149
+ ## ⚙️ 配置说明
150
+
151
+ ### 核心环境变量
152
+
153
+ | 变量名 | 默认值 | 说明 |
154
+ |--------|--------|------|
155
+ | `AUTH_TOKEN` | `sk-your-api-key` | 客户端访问密钥(必填) |
156
+ | `ADMIN_PASSWORD` | `admin123` | 管理后台登录密码(**强烈建议修改**) |
157
+ | `LISTEN_PORT` | `8080` | 服务监听端口 |
158
+ | `DEBUG_LOGGING` | `false` | 调试日志(支持热重载) |
159
+ | `ANONYMOUS_MODE` | `true` | Z.AI 匿名模式 |
160
+ | `TOOL_SUPPORT` | `true` | Function Call 开关 |
161
+ | `SKIP_AUTH_TOKEN` | `false` | 跳过认证(仅开发) |
162
+ | `DB_PATH` | `tokens.db` | 数据库文件路径(Docker: `/app/data/tokens.db`) |
163
+
164
+ ### Token 配置
165
+
166
+ | 变量名 | 说明 |
167
+ |--------|------|
168
+ | `LONGCAT_TOKEN` | LongCat 认证 Token(可选) |
169
+ | `TOKEN_FAILURE_THRESHOLD` | Token 失败阈值(默认 3) |
170
+ | `TOKEN_RECOVERY_TIMEOUT` | Token 恢复超时(默认 1800 秒) |
171
+
172
+ > 💡 详细配置请参考 [.env.example](.env.example) 或 [deploy/.env.example](deploy/.env.example)
173
+
174
+ ## 🔐 管理后台登录
175
+
176
+ ### 首次登录
177
+
178
+ 1. 启动服务后访问:http://localhost:8080/admin
179
+ 2. 自动跳转到登录页面
180
+ 3. 输入管理密码(默认:`admin123`)
181
+ 4. 登录成功后进入仪表盘
182
+
183
+ ### 修改密码
184
+
185
+ 在 `.env` 文件中修改 `ADMIN_PASSWORD`:
186
+
187
+ ```bash
188
+ # 使用强密码(推荐 12 位以上)
189
+ ADMIN_PASSWORD=Your_Secure_Password_2025!
190
+ ```
191
+
192
+ 重启服务后生效。
193
+
194
+ ### 安全特性
195
+
196
+ - ✅ **Session 管理**:基于 Cookie 的安全 Session
197
+ - ✅ **自动过期**:登录后 24 小时自动失效
198
+ - ✅ **HttpOnly Cookie**:防止 XSS 攻击
199
+ - ✅ **SameSite 保护**:防止 CSRF 攻击
200
+ - ✅ **随机 Token**:使用加密安全的随机数生成
201
+
202
+ > 💡 详细文档:[管理后台登录功能使用说明](管理后台登录功能使用说明.md)
203
+
204
+ ## 🔄 Token 管理
205
+
206
+ ### 数据库方式(推荐)
207
+
208
+ 项目使用 SQLite 数据库统一管理 Token,首次运行会自动初始化:
209
+
210
+ ```bash
211
+ # 首次运行自动创建 tokens.db
212
+ python main.py
213
+
214
+ # 访问 Web 管理后台
215
+ http://localhost:8080/admin
216
+ ```
217
+
218
+ ### 管理后台功能
219
+
220
+ - ✅ **密码保护** - 安全的登录认证
221
+ - ✅ Token 增删改查
222
+ - ✅ 批量导入/导出
223
+ - ✅ 启用/禁用 Token
224
+ - ✅ Token 有效性检测
225
+ - ✅ 多提供商支持(Z.AI/K2Think/LongCat)
226
+
227
+ ### Token 池机制
228
+
229
+ - **负载均衡**:轮询使用多个 Token 分散请求
230
+ - **自动容错**:Token 失败时自动切换
231
+ - **自动恢复**:失败 Token 超时后重试
232
+ - **智能去重**:自动检测重复 Token
233
+ - **回退机制**:认证失败自动降级匿名模式
234
+
235
+ ## ❓ 常见问题
236
+
237
+ ### Q: 如何获取 AUTH_TOKEN?
238
+ A: `AUTH_TOKEN` 是自定义的 API 密钥,用于客户端访问本服务,需在 `.env` 文件或 `docker-compose.yml` 中配置,确保客户端与服务端一致。
239
+
240
+ ### Q: 匿名模式是什么?
241
+ A: 匿名模式使用临时 Token 访问 Z.AI,避免对话历史共享,保护隐私。设置 `ANONYMOUS_MODE=true` 启用。
242
+
243
+ ### Q: 如何管理 Token?
244
+ A: 访问 Web 管理后台 http://localhost:8080/admin/tokens(需要先登录)即可增删改查 Token,支持批量导入导出。
245
+
246
+ ### Q: 忘记管理后台密码怎么办?
247
+ A: 在 `.env` 文件或 `docker-compose.yml` 中修改 `ADMIN_PASSWORD` 为新密码,然后重启服务即可。
248
+
249
+ ### Q: Docker 部署时数据库初始化失败?
250
+ A: 错误提示 `unable to open database file` 通常是权限问题。解决方案:
251
+ ```bash
252
+ cd deploy
253
+ mkdir -p ./data ./logs
254
+ chmod 755 ./data ./logs
255
+ docker compose down && docker compose up -d --build
256
+ ```
257
+ 详见 [Docker 部署指南](deploy/README_DOCKER.md#故障排查)
258
+
259
+ ### Q: 如何禁用管理后台登录?
260
+ A: 当前版本暂不支持禁用登录功能。如有需要,请手动移除路由中的 `dependencies=[Depends(require_auth)]`。
261
+
262
+
263
+ ## 🔑 获取 Token
264
+
265
+ ### Z.AI Token
266
+
267
+ 1. 访问 [Z.AI 官网](https://chat.z.ai) 并登录
268
+ 2. 按 F12 打开开发者工具
269
+ 3. 进入 Application → Local Storage → Cookies
270
+ 4. 复制 `token` 值
271
+
272
+ > ⚠️ 多模态功能需要非匿名 Token
273
+
274
+ ### LongCat Token
275
+
276
+ 1. 访问 [LongCat 官网](https://longcat.chat/) 并登录美团账号
277
+ 2. 按 F12 打开开发者工具
278
+ 3. 进入 "Application" -> "Local Storage" -> "Cookie"列表中找到名为`passport_token_key`的值
279
+ 4. 复制 `passport_token_key` 值
280
+
281
+ ## 🛠️ 技术栈
282
+
283
+ | 组件 | 技术 | 版本 | 说明 |
284
+ |------|------|------|------|
285
+ | Web 框架 | [FastAPI](https://fastapi.tiangolo.com/) | 0.116.1 | 高性能异步框架 |
286
+ | ASGI 服务器 | [Granian](https://github.com/emmett-framework/granian) | 2.5.2 | Rust 高性能服务器 |
287
+ | HTTP 客户端 | [HTTPX](https://www.python-httpx.org/) | 0.28.1 | 异步 HTTP 客户端 |
288
+ | 数据验证 | [Pydantic](https://pydantic.dev/) | 2.11.7 | 类型安全验证 |
289
+ | 数据库 | SQLite (aiosqlite) | 0.20.0 | Token 存储 |
290
+ | 模板引擎 | Jinja2 | 3.1.4 | Web 后台模板 |
291
+ | 日志系统 | [Loguru](https://loguru.readthedocs.io/) | 0.7.3 | 结构化日志 |
292
+
293
+ ## 🏗️ 系统架构
294
+
295
+ ```
296
+ ┌─────────────┐ ┌────────────────────────────────┐ ┌──────────────┐
297
+ │ OpenAI │ │ FastAPI Server │ │ Z.AI API │
298
+ │ Client │─────▶│ │─────▶│ (GLM-4.x) │
299
+ └─────────────┘ │ ┌──────────────────────────┐ │ └──────────────┘
300
+ │ │ Provider Router │ │
301
+ │ │ ┌────────┬────────────┐ │ �� ┌──────────────┐
302
+ │ │ │ Z.AI │ K2Think │ │ │ │ K2Think API │
303
+ │ │ │Provider│ Provider │ │ │─────▶│ │
304
+ │ │ └────────┴────────────┘ │ │ └──────────────┘
305
+ │ │ ┌────────────┐ │ │
306
+ │ │ │ LongCat │ │ │ ┌──────────────┐
307
+ │ │ │ Provider │ │ │ │ LongCat API │
308
+ │ │ └────────────┘ │ │─────▶│ │
309
+ │ └──────────────────────────┘ │ └──────────────┘
310
+ │ │
311
+ │ ┌──────────────────────────┐ │
312
+ │ │ Web Admin Dashboard │ │
313
+ │ │ (Token/Stats/Monitor) │ │
314
+ │ └──────────────────────────┘ │
315
+ └────────────────────────────────┘
316
+
317
+ ┌─────────┐
318
+ │SQLite DB│
319
+ │(tokens) │
320
+ └─────────┘
321
+ ```
322
+
323
+ ## 🤝 贡献指南
324
+
325
+ 欢迎提交 Issue 和 Pull Request!请确保代码符合 PEP 8 规范。
326
+
327
+ ## ⭐ Star History
328
+
329
+ [![Star History Chart](https://api.star-history.com/svg?repos=ZyphrZero/z.ai2api_python&type=Date)](https://star-history.com/#ZyphrZero/z.ai2api_python&Date)
330
+
331
+ ## 📄 许可证
332
+
333
+ 本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件。
334
+
335
+ ## ⚠️ 免责声明
336
+
337
+ - 本项目与 Z.AI、K2Think、LongCat 等 AI 提供商官方无关
338
+ - 使用前请确保遵守各提供商的服务条款
339
+ - 请勿用于商业用途或违反使用条款的场景
340
+ - 项目仅供学习和研究使用
341
+ - 用户需自行承担使用风险
342
+
343
+ ---
344
+
345
+ <div align="center">
346
+ Made with ❤️ by the community
347
+ </div>