mir-ashiq/antling-api

GitHub: mir-ashiq/antling-api

将 chat.ant-ling.com 的逆向 API 封装为兼容 OpenAI 与 Anthropic SDK 的本地代理服务。

Stars: 1 | Forks: 0

# ant-ling Chat API 逆向工程的 [chat.ant-ling.com](https://chat.ant-ling.com) Python API — 兼容 **OpenAI Python SDK** 和 **Claude Code / Anthropic SDK**。 ## 功能 - **原生路由** — 忠实复制了全部 7 个 chat.ant-ling.com 接口 - **OpenAI 适配器** — `/v1/chat/completions`, `/v1/models`(直接替换) - **Anthropic 适配器** — `/v1/messages`, `/v1/messages?beta=true`(兼容 Claude Code) - **代理模式** — 通过 cookie 认证转发至真实服务器 - **独立模式** — 提供用于测试的模拟响应(无需上游服务) ## 快速开始 ### 选项 1:Docker(推荐) ``` # 克隆并启动 git clone https://github.com/mir-ashiq/antling-api.git cd antling-api docker compose up --build # 测试 Invoke-RestMethod -Uri "http://localhost:8000/v1/models" ``` ### 选项 2:本地 Python ``` # 1. 安装依赖 pip install -r requirements.txt # 2. 启动服务器 (standalone/mock mode) uvicorn antling_api.server:app --reload --port 8000 # 3. 测试它 Invoke-RestMethod -Uri "http://localhost:8000/v1/models" ``` ## 认证 真实的 chat.ant-ling.com API 使用**两种**认证机制: | 机制 | 类型 | 必需 | 获取方式 | |-----------|------|----------|---------------| | `TLingSESSIONID` | Cookie (JWT) | ✅ 是 | 浏览器 DevTools → Network → Cookie header | | `tenant-id` | HTTP Header | ✅ 是 | 浏览器 DevTools → Network → Request Headers | **设置代理模式:** 1. 在浏览器中打开 [chat.ant-ling.com](https://chat.ant-ling.com) 并登录 2. 打开 DevTools → Network 标签页 → 点击任意请求 3. 复制完整的 `Cookie` header 值 4. 将其粘贴到 `.env` 中的 `ANTLING_SESSION_COOKIE` 变量中 ``` # .env ANTLING_BASE_URL=https://chat.ant-ling.com ANTLING_SESSION_COOKIE=TLingSESSIONID=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.xxxx; jsh_t_c_e=xxxx; spanner=xxxx ANTLING_TENANT_ID=20260523LTJY01501627 ``` ## 使用方法 ### OpenAI SDK ``` from openai import OpenAI client = OpenAI( base_url="http://localhost:8000/v1", api_key="sk-no-key-required", ) # 非流式 response = client.chat.completions.create( model="Ring-2.6-1T", messages=[{"role": "user", "content": "Hello!"}] ) print(response.choices[0].message.content) # 流式 for chunk in client.chat.completions.create( model="Ring-2.6-1T", messages=[{"role": "user", "content": "Hello!"}], stream=True, ): if chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True) ``` ### Claude Code 添加到您的环境变量中: ``` $env:ANTHROPIC_BASE_URL="http://localhost:8000" $env:ANTHROPIC_API_KEY="sk-no-key-required" $env:ANTHROPIC_MODEL="Ring-2.6-1T" ``` 或者在 `~/.claude/settings.json` 中: ``` { "env": { "ANTHROPIC_BASE_URL": "http://localhost:8000", "ANTHROPIC_API_KEY": "sk-no-key-required", "ANTHROPIC_MODEL": "Ring-2.6-1T" } } ``` ### Anthropic SDK ``` from anthropic import Anthropic client = Anthropic( base_url="http://localhost:8000", api_key="sk-no-key-required", ) response = client.messages.create( model="Ring-2.6-1T", max_tokens=1024, messages=[{"role": "user", "content": "Hello!"}] ) print(response.content[0].text) ``` ### 原生 API(直接 HTTP) ``` # 创建会话 Invoke-RestMethod -Uri "http://localhost:8000/meta/conversation/create" ` -Method POST -ContentType "application/json" ` -Body '{"query":"Hello world"}' # 列出模型 Invoke-RestMethod -Uri "http://localhost:8000/meta/model/list" # 获取 messages Invoke-RestMethod -Uri "http://localhost:8000/meta/message/messages?conversationId=xxx¤tPage=1&pageSize=20" ``` ## API 接口 ### 原生(逆向工程) | 方法 | 路径 | 描述 | |--------|------|-------------| | `GET` | `/meta/model/list` | 列出可用模型 | | `POST` | `/meta/conversation/create` | 创建新会话 | | `POST` | `/api/v1/chat` | 发送消息(SSE 流) | | `GET` | `/meta/message/messages` | 获取消息(分页) | | `GET` | `/meta/conversation/modelCustomParam` | 获取模型配置 | | `POST` | `/meta/conversation/updateModelCustomParam` | 更新模型配置 | | `POST` | `/meta/conversation/{id}/title` | 自动生成标题 | ### OpenAI 兼容 | 方法 | 路径 | 描述 | |--------|------|-------------| | `GET` | `/v1/models` | 列出模型 | | `POST` | `/v1/chat/completions` | Chat 补全(流式 + 非流式) | ### Anthropic 兼容 | 方法 | 路径 | 描述 | |--------|------|-------------| | `GET` | `/v1/models` | 列出模型 | | `POST` | `/v1/messages` | 消息(流式 + 非流式) | ## 项目结构 ``` antling_api/ ├── __init__.py # Package init ├── config.py # Configuration & env vars ├── models.py # Pydantic models (native + OpenAI + Anthropic) ├── upstream.py # Proxy forwarding to real server └── server.py # FastAPI app with all routes client_example.py # Demo: OpenAI SDK + Anthropic SDK usage .env.example # Environment template requirements.txt # Dependencies pyproject.toml # Project metadata ``` ## 许可证 MIT
标签:Anthropic SDK, API网关, Docker, OpenAI兼容, Python, 云资产清单, 安全防御评估, 无后门, 请求拦截, 逆向工具, 逆向工程