File size: 4,495 Bytes
f0cacfe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ec35fcf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142

## 项目简介

这是一个为 Z.ai 提供 OpenAI API 兼容接口的 Python 代理服务,允许开发者通过标准的 OpenAI API 格式访问 Z.ai 的 GLM-4.5 模型。

## 主要特性

- **OpenAI API 兼容**:完整支持 `/v1/chat/completions``/v1/models` 端点
- **流式响应支持**:完整实现 Server-Sent Events (SSE) 流式传输
- **思考内容处理**:提供多种策略处理模型的思考过程(`<details>` 标签)
- **匿名会话支持**:可选使用匿名 token 避免共享对话历史
- **多种模型支持**:支持 GLM-4.5 基础版、思考版和搜索版
- **调试模式**:详细的请求/响应日志记录,便于开发调试
- **CORS 支持**:内置跨域资源共享支持

## 使用场景

- 将 Z.ai 集成到支持 OpenAI API 的应用程序中
- 开发需要同时使用多个 AI 服务的应用
- 测试和评估 GLM-4.5 模型的能力
- 需要流式响应或思考内容的 AI 应用开发

## 快速开始

### 使用 uv (推荐)

1. 安装 uv:
   ```bash
   # macOS/Linux
   curl -LsSf https://astral.sh/uv/install.sh | sh
   # Windows (PowerShell)
   powershell -c "irm https://astral.sh/uv/install.sh | iex"
   ```

2. 同步依赖:
   ```bash
   uv sync
   ```

3. 运行服务:
   ```bash
   uv run python main.py
   ```

### 使用 pip

1. 安装依赖:
   ```bash
   pip install -r requirements.txt
   ```

2. 配置服务(可选):
   编辑 `main.py` 中的以下常量以调整服务行为:
   - `DEFAULT_KEY`: 客户端 API 密钥
   - `UPSTREAM_URL`: Z.ai 上游 API 地址
   - `UPSTREAM_TOKEN`: 固定认证 token(匿名模式失败时使用)
   - `PORT`: 服务监听端口
   - `DEBUG_MODE`: 调试模式开关
   - `THINK_TAGS_MODE`: 思考内容处理策略
   - `ANON_TOKEN_ENABLED`: 匿名 token 开关

3. 运行服务:
   ```bash
   python main.py
   ```

   服务启动后,可以访问 http://localhost:8080/docs 查看自动生成的 Swagger API 文档

4. 使用 OpenAI 客户端库调用:
   ```python
   import openai

   # 初始化客户端
   client = openai.OpenAI(
       base_url="http://localhost:8080/v1",
       api_key="sk-tbkFoKzk9a531YyUNNF5"  # 使用配置的 DEFAULT_KEY
   )

   # 流式调用示例
   response = client.chat.completions.create(
       model="GLM-4.5",  # 可选: "GLM-4.5-Thinking", "GLM-4.5-Search"
       messages=[{"role": "user", "content": "你好"}],
       stream=True
   )

   for chunk in response:
       content = chunk.choices[0].delta.content
       reasoning = chunk.choices[0].delta.reasoning_content
       if content:
           print(content, end="")
       if reasoning:
           print(f"\n[思考] {reasoning}\n")
   ```

   注意:请将 `api_key` 替换为您在 `main.py` 中配置的 `DEFAULT_KEY` 值。

## 配置选项

| 配置项 | 描述 | 默认值 |
|--------|------|--------|
| `UPSTREAM_URL` | Z.ai 的上游 API 地址 | `https://chat.z.ai/api/chat/completions` |
| `DEFAULT_KEY` | 下游客户端鉴权 key | `sk-tbkFoKzk9a531YyUNNF5` |
| `UPSTREAM_TOKEN` | 上游 API 的 token (匿名模式失败时使用) | JWT token |
| `DEFAULT_MODEL_NAME` | 默认模型名称 | `GLM-4.5` |
| `THINKING_MODEL_NAME` | 思考模型名称 | `GLM-4.5-Thinking` |
| `SEARCH_MODEL_NAME` | 搜索模型名称 | `GLM-4.5-Search` |
| `PORT` | 服务监听端口 | `8080` |
| `DEBUG_MODE` | 调试模式开关 | `true` |
| `THINK_TAGS_MODE` | 思考内容处理策略 | `think` (可选: `strip`, `raw`) |
| `ANON_TOKEN_ENABLED` | 是否使用匿名 token | `true` |

### 思考内容处理策略说明

- **think**: 将 `<details>` 标签转换为 `<thinking>` 标签,适合 OpenAI 兼容格式
- **strip**: 完全移除 `<details>` 标签及其内容
- **raw**: 保留原始格式,不做任何处理

## 架构说明

本项目采用以下技术栈:

- **FastAPI**: 现代、快速的 Web 框架,提供自动 API 文档生成
- **Pydantic**: 数据验证和序列化,确保 API 兼容性
- **uvicorn**: ASGI 服务器,提供高性能服务

项目通过异步编程模型实现高效的并发处理,支持流式和非流式两种响应模式。

## 贡献指南

欢迎提交 Issue 和 Pull Request!请确保:
1. 遵循 PEP 8 规范
2. 提交前运行测试(如果有)
3. 更新相关文档

## 许可证

MIT LICENSE

## 免责声明

本项目与 Z.ai 官方无关,使用前请确保遵守 Z.ai 的服务条款。请勿将此服务用于商业用途或违反 Z.ai 使用条款的场景。