| # Z.AI OpenAI API ไปฃ็ๆๅก |
|
|
|  |
|  |
|  |
|  |
|
|
| ่ฝป้็บง OpenAI API ๅ
ผๅฎนไปฃ็ๆๅก๏ผ้่ฟ Claude Code Router ๆฅๅ
ฅ Z.AI๏ผๆฏๆ GLM-4.5 ็ณปๅๆจกๅ็ๅฎๆดๅ่ฝใ |
|
|
| ## โจ ๆ ธๅฟ็นๆง |
|
|
| - ๐ **ๅฎๅ
จๅ
ผๅฎน OpenAI API** - ๆ ็ผ้ๆ็ฐๆๅบ็จ |
| - ๐ค **Claude Code ๆฏๆ** - ้่ฟ Claude Code Router ๆฅๅ
ฅ Claude Code (**CCR ๅทฅๅ
ท่ฏทๅ็บงๅฐ v1.0.47 ไปฅไธ**) |
| - ๐ **้ซๆง่ฝๆตๅผๅๅบ** - Server-Sent Events (SSE) ๆฏๆ |
| - ๐ ๏ธ **ๅขๅผบๅทฅๅ
ท่ฐ็จ** - ๆน่ฟ็ Function Call ๅฎ็ฐ |
| - ๐ง **ๆ่ๆจกๅผๆฏๆ** - ๆบ่ฝๅค็ๆจกๅๆจ็่ฟ็จ |
| - ๐ **ๆ็ดขๆจกๅ้ๆ** - GLM-4.5-Search ็ฝ็ปๆ็ดข่ฝๅ |
| - ๐ณ **Docker ้จ็ฝฒ** - ไธ้ฎๅฎนๅจๅ้จ็ฝฒ |
| - ๐ก๏ธ **ไผ่ฏ้็ฆป** - ๅฟๅๆจกๅผไฟๆค้็ง |
| - ๐ง **็ตๆดป้
็ฝฎ** - ็ฏๅขๅ้็ตๆดป้
็ฝฎ |
| - ๐ **ๅคๆจกๅๆ ๅฐ** - ๆบ่ฝไธๆธธๆจกๅ่ทฏ็ฑ |
|
|
| ## ๐ ๅฟซ้ๅผๅง |
|
|
| ### ็ฏๅข่ฆๆฑ |
|
|
| - Python 3.8+ |
| - pip ๆ uv (ๆจ่) |
|
|
| ### ๅฎ่ฃ
่ฟ่ก |
|
|
| ```bash |
| # ๅ
้้กน็ฎ |
| git clone https://github.com/ZyphrZero/z.ai2api_python.git |
| cd z.ai2api_python |
| |
| # ไฝฟ็จ uv (ๆจ่) |
| curl -LsSf https://astral.sh/uv/install.sh | sh |
| uv sync |
| uv run python main.py |
| |
| # ๆไฝฟ็จ pip (ๆจ่ไฝฟ็จๆธ
ๅๆบ) |
| pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple |
| python main.py |
| ``` |
|
|
| ๆๅกๅฏๅจๅ่ฎฟ้ฎ๏ผhttp://localhost:8080/docs |
|
|
| ### ๅบ็กไฝฟ็จ |
|
|
| #### OpenAI API ๅฎขๆท็ซฏ |
|
|
| ```python |
| import openai |
| |
| # ๅๅงๅๅฎขๆท็ซฏ |
| client = openai.OpenAI( |
| base_url="http://localhost:8080/v1", |
| api_key="your-auth-token" # ๆฟๆขไธบไฝ ็ AUTH_TOKEN |
| ) |
| |
| # ๆฎ้ๅฏน่ฏ |
| response = client.chat.completions.create( |
| model="GLM-4.5", |
| messages=[{"role": "user", "content": "ไฝ ๅฅฝ๏ผไป็ปไธไธ Python"}], |
| stream=False |
| ) |
| |
| print(response.choices[0].message.content) |
| ``` |
|
|
| ### Docker ้จ็ฝฒ |
|
|
| ```bash |
| cd deploy |
| docker-compose up -d |
| ``` |
|
|
| ## ๐ ่ฏฆ็ปๆๅ |
|
|
| ### ๆฏๆ็ๆจกๅ |
|
|
| | ๆจกๅ | ไธๆธธ ID | ๆ่ฟฐ | ็นๆง | |
| | ------------------ | ------------- | ----------- | ---------------------- | |
| | `GLM-4.5` | 0727-360B-API | ๆ ๅๆจกๅ | ้็จๅฏน่ฏ๏ผๅนณ่กกๆง่ฝ | |
| | `GLM-4.5-Thinking` | 0727-360B-API | ๆ่ๆจกๅ | ๆพ็คบๆจ็่ฟ็จ๏ผ้ๆๅบฆ้ซ | |
| | `GLM-4.5-Search` | 0727-360B-API | ๆ็ดขๆจกๅ | ๅฎๆถ็ฝ็ปๆ็ดข๏ผไฟกๆฏๆดๆฐ | |
| | `GLM-4.5-Air` | 0727-106B-API | ่ฝป้ๆจกๅ | ๅฟซ้ๅๅบ๏ผ้ซๆๆจ็ | |
| | `GLM-4.5V` | glm-4.5v | โ ๆไธๆฏๆ | | |
|
|
| ### Function Call ๅ่ฝ |
|
|
| ```python |
| # ๅฎไนๅทฅๅ
ท |
| tools = [{ |
| "type": "function", |
| "function": { |
| "name": "get_weather", |
| "description": "่ทๅๅคฉๆฐไฟกๆฏ", |
| "parameters": { |
| "type": "object", |
| "properties": { |
| "city": {"type": "string", "description": "ๅๅธๅ็งฐ"} |
| }, |
| "required": ["city"] |
| } |
| } |
| }] |
| |
| # ไฝฟ็จๅทฅๅ
ท |
| response = client.chat.completions.create( |
| model="GLM-4.5", |
| messages=[{"role": "user", "content": "ๅไบฌๅคฉๆฐๆไนๆ ท๏ผ"}], |
| tools=tools, |
| tool_choice="auto" |
| ) |
| ``` |
|
|
| ### ๆตๅผๅๅบ |
|
|
| ```python |
| response = client.chat.completions.create( |
| model="GLM-4.5-Thinking", |
| 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") |
| ``` |
|
|
| ## โ๏ธ ้
็ฝฎ่ฏดๆ |
|
|
| ### ็ฏๅขๅ้้
็ฝฎ |
|
|
| | ๅ้ๅ | ้ป่ฎคๅผ | ่ฏดๆ | |
| | --------------------- | ----------------------------------------- | ---------------------- | |
| | `AUTH_TOKEN` | `sk-your-api-key` | ๅฎขๆท็ซฏ่ฎค่ฏๅฏ้ฅ | |
| | `API_ENDPOINT` | `https://chat.z.ai/api/chat/completions` | ไธๆธธ API ๅฐๅ | |
| | `LISTEN_PORT` | `8080` | ๆๅก็ๅฌ็ซฏๅฃ | |
| | `DEBUG_LOGGING` | `true` | ่ฐ่ฏๆฅๅฟๅผๅ
ณ | |
| | `THINKING_PROCESSING` | `think` | ๆ่ๅ
ๅฎนๅค็็ญ็ฅ | |
| | `ANONYMOUS_MODE` | `true` | ๅฟๅๆจกๅผๅผๅ
ณ | |
| | `TOOL_SUPPORT` | `true` | Function Call ๅ่ฝๅผๅ
ณ | |
| | `SKIP_AUTH_TOKEN` | `false` | ่ทณ่ฟ่ฎค่ฏไปค็้ช่ฏ | |
| | `SCAN_LIMIT` | `200000` | ๆซๆ้ๅถ | |
| | `BACKUP_TOKEN` | `eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9...` | Z.ai ๅบๅฎ่ฎฟ้ฎไปค็ | |
|
|
| ### ๆ่ๅ
ๅฎนๅค็็ญ็ฅ |
|
|
| - `think` - ่ฝฌๆขไธบ `<thinking>` ๆ ็ญพ๏ผOpenAI ๅ
ผๅฎน๏ผ |
| - `strip` - ็งป้คๆ่ๅ
ๅฎน |
| - `raw` - ไฟ็ๅๅงๆ ผๅผ |
|
|
| ## ๐ฏ ไฝฟ็จๅบๆฏ |
|
|
| ### 1. AI ๅบ็จๅผๅ |
|
|
| ```python |
| # ้ๆๅฐ็ฐๆๅบ็จ |
| from openai import OpenAI |
| |
| client = OpenAI( |
| base_url="http://localhost:8080/v1", |
| api_key="your-token" |
| ) |
| |
| # ๆบ่ฝๅฎขๆ |
| def chat_with_ai(message): |
| response = client.chat.completions.create( |
| model="GLM-4.5", |
| messages=[{"role": "user", "content": message}] |
| ) |
| return response.choices[0].message.content |
| ``` |
|
|
| ### 2. ๅทฅๅ
ท่ฐ็จ้ๆ |
|
|
| ```python |
| # ็ปๅๅค้จ API |
| def call_external_api(tool_name, arguments): |
| # ๆง่กๅฎ้
ๅทฅๅ
ท่ฐ็จ |
| return result |
| |
| # ๅค็ๅทฅๅ
ท่ฐ็จ |
| if response.choices[0].message.tool_calls: |
| for tool_call in response.choices[0].message.tool_calls: |
| result = call_external_api( |
| tool_call.function.name, |
| json.loads(tool_call.function.arguments) |
| ) |
| # ๅฐ็ปๆ่ฟๅ็ปๆจกๅ็ปง็ปญๅฏน่ฏ |
| ``` |
|
|
| ## โ ๅธธ่ง้ฎ้ข |
|
|
| **Q: ๅฆไฝ่ทๅ AUTH_TOKEN๏ผ** |
| A: `AUTH_TOKEN` ไธบ่ชๅทฑ่ชๅฎไน็ api key๏ผๅจ็ฏๅขๅ้ไธญ้
็ฝฎ๏ผ้่ฆไฟ่ฏๅฎขๆท็ซฏไธๆๅก็ซฏไธ่ดใ |
| |
| **Q: ๅฆไฝ้่ฟ Claude Code ไฝฟ็จๆฌๆๅก๏ผ** |
|
|
| A: ๅๅปบ [zai.js](https://gist.githubusercontent.com/musistudio/b35402d6f9c95c64269c7666b8405348/raw/f108d66fa050f308387938f149a2b14a295d29e9/gistfile1.txt) ่ฟไธช ccr ๆไปถๆพๅจ`./.claude-code-router/plugins`็ฎๅฝไธ๏ผ้
็ฝฎ `./.claude-code-router/config.json` ๆๅๆฌๆๅกๅฐๅ๏ผไฝฟ็จ `AUTH_TOKEN` ่ฟ่ก่ฎค่ฏใ |
|
|
| ็คบไพ้
็ฝฎ๏ผ |
|
|
| ```json |
| { |
| "LOG": false, |
| "LOG_LEVEL": "debug", |
| "CLAUDE_PATH": "", |
| "HOST": "127.0.0.1", |
| "PORT": 3456, |
| "APIKEY": "", |
| "API_TIMEOUT_MS": "600000", |
| "PROXY_URL": "", |
| "transformers": [ |
| { |
| "name": "zai", |
| "path": "C:\\Users\\Administrator\\.claude-code-router\\plugins\\zai.js", |
| "options": {} |
| } |
| ], |
| "Providers": [ |
| { |
| "name": "GLM", |
| "api_base_url": "http://127.0.0.1:8080/v1/chat/completions", |
| "api_key": "sk-your-api-key", |
| "models": ["GLM-4.5", "GLM-4.5-Air"], |
| "transformers": { |
| "use": ["zai"] |
| } |
| } |
| ], |
| "StatusLine": { |
| "enabled": false, |
| "currentStyle": "default", |
| "default": { |
| "modules": [] |
| }, |
| "powerline": { |
| "modules": [] |
| } |
| }, |
| "Router": { |
| "default": "GLM,GLM-4.5", |
| "background": "GLM,GLM-4.5", |
| "think": "GLM,GLM-4.5", |
| "longContext": "GLM,GLM-4.5", |
| "longContextThreshold": 60000, |
| "webSearch": "GLM,GLM-4.5", |
| "image": "GLM,GLM-4.5" |
| }, |
| "CUSTOM_ROUTER_PATH": "" |
| } |
| ``` |
|
|
| **Q: ๅฟๅๆจกๅผๆฏไปไน๏ผ** |
| A: ๅฟๅๆจกๅผไฝฟ็จไธดๆถ token๏ผ้ฟๅ
ๅฏน่ฏๅๅฒๅ
ฑไบซ๏ผไฟๆค้็งใ |
|
|
| **Q: Function Call ๅฆไฝๅทฅไฝ๏ผ** |
| A: ้่ฟๆบ่ฝๆ็คบๆณจๅ
ฅๅฎ็ฐ๏ผๅฐๅทฅๅ
ทๅฎไน่ฝฌๆขไธบ็ณป็ปๆ็คบใ |
|
|
| **Q: ๆฏๆๅชไบ OpenAI ๅ่ฝ๏ผ** |
| A: ๆฏๆ่ๅคฉๅฎๆใๆจกๅๅ่กจใๆตๅผๅๅบใๅทฅๅ
ท่ฐ็จ็ญๆ ธๅฟๅ่ฝใ |
|
|
| **Q: Function Call ๅฆไฝไผๅ๏ผ** |
| A: ๆน่ฟไบๅทฅๅ
ท่ฐ็จ็่ฏทๆฑๅๅบ็ปๆ๏ผๆฏๆๆดๅคๆ็ๅทฅๅ
ท้พ่ฐ็จๅๅนถ่กๆง่กใ |
|
|
| **Q: ๅฆไฝ้ๆฉๅ้็ๆจกๅ๏ผ** |
| A: |
|
|
| - **GLM-4.5**: ้็จๅบๆฏ๏ผๆง่ฝๅๆๆๅนณ่กก |
| - **GLM-4.5-Thinking**: ้่ฆไบ่งฃๆจ็่ฟ็จ็ๅบๆฏ |
| - **GLM-4.5-Search**: ้่ฆๅฎๆถไฟกๆฏ็ๅบๆฏ |
| - **GLM-4.5-Air**: ้ซๅนถๅใไฝๅปถ่ฟ่ฆๆฑ็ๅบๆฏ |
|
|
| **Q: ๅฆไฝ่ชๅฎไน้
็ฝฎ๏ผ** |
| A: ้่ฟ็ฏๅขๅ้้
็ฝฎ๏ผๆจ่ไฝฟ็จ `.env` ๆไปถใ |
|
|
| ## ๐ ่ทๅ Z.ai API Token |
|
|
| ่ฆไฝฟ็จๅฎๆด็ๅคๆจกๆๅ่ฝ๏ผ้่ฆ่ทๅๆญฃๅผ็ Z.ai API Token๏ผ |
|
|
| ### ๆนๅผ 1: ้่ฟ Z.ai ็ฝ็ซ |
|
|
| 1. ่ฎฟ้ฎ [Z.ai ๅฎ็ฝ](https://chat.z.ai) |
| 2. ๆณจๅ่ดฆๆทๅนถ็ปๅฝ๏ผ่ฟๅ
ฅ [Z.ai API Keys](https://z.ai/manage-apikey/apikey-list) ่ฎพ็ฝฎ้กต้ข๏ผๅจ่ฏฅ้กต้ข่ฎพ็ฝฎ _**ไธชไบบ API Token**_ |
| 3. ๅฐ Token ๆพ็ฝฎๅจ `BACKUP_TOKEN` ็ฏๅขๅ้ไธญ |
|
|
| ### ๆนๅผ 2: ๆต่งๅจๅผๅ่
ๅทฅๅ
ท๏ผไธดๆถๆนๆก๏ผ |
|
|
| 1. ๆๅผ [Z.ai ่ๅคฉ็้ข](https://chat.z.ai) |
| 2. ๆ F12 ๆๅผๅผๅ่
ๅทฅๅ
ท |
| 3. ๅๆขๅฐ "Application" ๆ "ๅญๅจ" ๆ ็ญพ |
| 4. ๆฅ็ Local Storage ไธญ็่ฎค่ฏ token |
| 5. ๅคๅถ token ๅผ่ฎพ็ฝฎไธบ็ฏๅขๅ้ |
|
|
| > โ ๏ธ **ๆณจๆ**: ๆนๅผ 2 ่ทๅ็ token ๅฏ่ฝๆๆถๆๆง๏ผๅปบ่ฎฎไฝฟ็จๆนๅผ 1 ่ทๅ้ฟๆๆๆ็ API Tokenใ |
| > โ **้่ฆๆ็คบ**: ๅคๆจกๆๆจกๅ้่ฆ**ๅฎๆน Z.ai API ้ๅฟๅ Token**๏ผๅฟๅ token ไธๆฏๆๅคๅชไฝๅค็ใ |
|
|
| ## ๐ ๏ธ ๆๆฏๆ |
|
|
| | ็ปไปถ | ๆๆฏ | ็ๆฌ | ่ฏดๆ | |
| | --------------- | --------------------------------------------------------------------------------- | ------- | ------------------------------------------ | |
| | **Web ๆกๆถ** | [FastAPI](https://fastapi.tiangolo.com/) | 0.104.1 | ้ซๆง่ฝๅผๆญฅ Web ๆกๆถ๏ผๆฏๆ่ชๅจ API ๆๆกฃ็ๆ | |
| | **ASGI ๆๅกๅจ** | [Granian](https://github.com/emmett-framework/granian) | 2.5.2 | ๅบไบ Rust ็้ซๆง่ฝ ASGI ๆๅกๅจ๏ผๆฏๆ็ญ้่ฝฝ | |
| | **HTTP ๅฎขๆท็ซฏ** | [Requests](https://requests.readthedocs.io/) | 2.32.5 | ็ฎๆดๆ็จ็ HTTP ๅบ๏ผ็จไบไธๆธธ API ่ฐ็จ | |
| | **ๆฐๆฎ้ช่ฏ** | [Pydantic](https://pydantic.dev/) | 2.11.7 | ็ฑปๅๅฎๅ
จ็ๆฐๆฎ้ช่ฏไธๅบๅๅ | |
| | **้
็ฝฎ็ฎก็** | [Pydantic Settings](https://docs.pydantic.dev/latest/concepts/pydantic_settings/) | 2.10.1 | ๅบไบ Pydantic ็้
็ฝฎ็ฎก็ | |
|
|
| ## ๐๏ธ ๆๆฏๆถๆ |
|
|
| ``` |
| โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ |
| โ OpenAI โ โ โ โ โ |
| โ Client โโโโโโถโ FastAPI Server โโโโโโถโ Z.AI API โ |
| โโโโโโโโโโโโโโโโ โ โ โ โ |
| โโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโ โ |
| โ Claude Code โ โ โ /v1/chat/completionsโ โ โ โ0727-360B-APIโ โ |
| โ Router โโโโโโถโ โโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโ โ |
| โโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโ โ |
| โ โ /v1/models โ โโโโโโถโ โ0727-106B-APIโ โ |
| โ โโโโโโโโโโโโโโโโโโโโโโโ โ โ โโโโโโโโโโโโโโโ โ |
| โ โโโโโโโโโโโโโโโโโโโโโโโ โ โ โ |
| โ โ Enhanced Tools โ โ โโโโโโโโโโโโโโโโโโโ |
| โ โโโโโโโโโโโโโโโโโโโโโโโ โ |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| OpenAI Compatible API |
| ``` |
|
|
| ### ้กน็ฎ็ปๆ |
|
|
| ``` |
| z.ai2api_python/ |
| โโโ app/ |
| โ โโโ core/ |
| โ โ โโโ __init__.py |
| โ โ โโโ config.py # ้
็ฝฎ็ฎก็ |
| โ โ โโโ openai.py # OpenAI API ๅฎ็ฐ |
| โ โ โโโ response_handlers.py # ๅๅบๅค็ๅจ |
| โ โโโ models/ |
| โ โ โโโ __init__.py |
| โ โ โโโ schemas.py # Pydantic ๆจกๅๅฎไน |
| โ โโโ utils/ |
| โ โ โโโ __init__.py |
| โ โ โโโ helpers.py # ่พ
ๅฉๅฝๆฐ |
| โ โ โโโ tools.py # ๅขๅผบๅทฅๅ
ท่ฐ็จๅค็ |
| โ โ โโโ sse_parser.py # SSE ๆตๅผ่งฃๆๅจ |
| โ โโโ __init__.py |
| โโโ tests/ # ๅๅ
ๆต่ฏ |
| โโโ deploy/ # Docker ้จ็ฝฒ้
็ฝฎ |
| โโโ main.py # FastAPI ๅบ็จๅ
ฅๅฃ |
| โโโ requirements.txt # Python ไพ่ต |
| โโโ .env.example # ็ฏๅขๅ้็คบไพ |
| โโโ README.md # ้กน็ฎๆๆกฃ |
| ``` |
|
|
| ## ๐ค ่ดก็ฎๆๅ |
|
|
| ๆไปฌๆฌข่ฟๆๆๅฝขๅผ็่ดก็ฎ๏ผ |
| ่ฏท็กฎไฟไปฃ็ ็ฌฆๅ PEP 8 ่ง่๏ผๅนถๆดๆฐ็ธๅ
ณๆๆกฃใ |
|
|
| ## ๐ ่ฎธๅฏ่ฏ |
|
|
| ๆฌ้กน็ฎ้็จ MIT ่ฎธๅฏ่ฏ - ๆฅ็ [LICENSE](LICENSE) ๆไปถไบ่งฃ่ฏฆๆ
ใ |
|
|
| ## โ ๏ธ ๅ
่ดฃๅฃฐๆ |
|
|
| - ๆฌ้กน็ฎไธ Z.AI ๅฎๆนๆ ๅ
ณ |
| - ไฝฟ็จๅ่ฏท็กฎไฟ้ตๅฎ Z.AI ๆๅกๆกๆฌพ |
| - ่ฏทๅฟ็จไบๅไธ็จ้ๆ่ฟๅไฝฟ็จๆกๆฌพ็ๅบๆฏ |
| - ้กน็ฎไป
ไพๅญฆไน ๅ็ ็ฉถไฝฟ็จ |
|
|
| --- |
|
|
| <div align="center"> |
| Made with โค๏ธ by the community |
| </div> |
|
|