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, 云资产清单, 安全防御评估, 无后门, 请求拦截, 逆向工具, 逆向工程