Node.js + SQLite 实现的 LongCat 网页端 → OpenAI 兼容 API 网关。
| 能力 | 说明 |
|---|---|
| OpenAI Chat | POST /v1/chat/completions 流式 / 非流式 |
| OpenAI Responses | POST /v1/responses 流式 / 非流式 |
| 模型列表 | GET /v1/models |
| 账号池 | Cookie / passport_token_key 导入,SQLite 持久化 |
| 保活 | 定时 session-create / user-current 探测 |
| 临时邮箱 | 对接 cloudflare_temp_email |
| 代理池 | VLESS 订阅 + 本机 sing-box mixed 入站 |
| 注册机 | 邮箱准备 + 代理;Passport 完成后绑定 Cookie |
| 管理面板 | 中文 Web UI(Basic 认证) |
协议逆向参考:
kylinpoet/longcat2api、JessonChan/longcat-web-api、sfdzkj/LongCat-Web-API-Wrapper
工程结构参考:MiMo2API(临时邮箱 / 代理池 / 保活)
Client (OpenAI SDK / CherryStudio / NewAPI)
│ Bearer sk-xxx
▼
┌─────────────────────────────────────┐
│ longcat2api (Express) │
│ /v1/chat/completions /v1/responses │
│ 账号池 · 保活 · 注册 · 管理面板 │
│ SQLite │
└──────────────┬──────────────────────┘
│
┌─────────┴──────────┐
▼ ▼
oversea-V2 cn chat-completion-V2
(免登录) (Cookie 账号池)
│
▼
CF Temp Mail · sing-box 代理(注册/可选)
| 模式 | 端点 | 鉴权 |
|---|---|---|
oversea(默认) |
/api/v1/chat-completion-oversea-V2 |
无需 Cookie |
cn |
session-create + /api/v1/chat-completion-V2 |
passport_token_key 等 Cookie |
可在配置 default_mode 切换,或在请求 body 中传 "mode":"cn" / 模型后缀 :cn。
- Node.js 18+
- (可选)sing-box — 代理池
- (可选)自建 Cloudflare 临时邮箱
cd longcat2api
cp .env.example .env
cp config.example.json config.json
# 编辑 config.json:api_keys、admin_password、temp_mail、proxy_pool
npm install
npm start默认:http://0.0.0.0:8080
- 管理面板:
http://localhost:8080/(用户名admin,密码见admin_password) - 健康检查:
GET /health
curl http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer sk-longcat" \
-H "Content-Type: application/json" \
-d '{
"model": "longcat-flash",
"messages": [{"role":"user","content":"你好"}],
"stream": false
}'curl http://localhost:8080/v1/responses \
-H "Authorization: Bearer sk-longcat" \
-H "Content-Type: application/json" \
-d '{
"model": "longcat-thinking",
"input": "解释一下 MoE"
}'| model | 思考 | 搜索 |
|---|---|---|
longcat-flash / longcat-default |
否 | 否 |
longcat-thinking / longcat-reason |
是 | 否 |
longcat-search |
否 | 是 |
longcat-reason-search / longcat-pro |
是 | 是 |
| 主题 | 要点 |
|---|---|
| 海外注册 | passport.mykeeta.com 邮箱 OTP(非 meituan 国内手机) |
| 对话(唯一) | session-create + chat-completion-V2 + Cookie(无免登) |
| 思考 / 联网 | 请求体 reasonEnabled / searchEnabled(0/1,无多档 effort) |
| 保活 | 周期 session-create 探测 Cookie |
模型别名:longcat-thinking(思考)、longcat-search(联网)、longcat-reason-search(两者)。
- 海外:邮箱在 passport.mykeeta.com 注册后回到 longcat.chat;或直接登录 longcat 选择海外邮箱
- DevTools → Application → Cookie,复制整段,或至少
passport_token_key - 管理面板 账号 → 导入 Cookie,或:
POST /api/account/import-cookie
Authorization: Basic YWRtaW46YWRtaW4=
Content-Type: application/json
{"cookie":"_lxsdk_cuid=...; passport_token_key=...; _lxsdk_s=..."}- 后台定时保活(默认 6h)调用 session 探测;连续失败会标记 invalid。
美团 Passport 注册含 Yoda 风控,无法保证纯 API 全自动完成。当前流程:
- 配置 临时邮箱 +(推荐)代理池
准备邮箱/批量准备→ 生成 temp-mail + draft 账号- 用返回邮箱在浏览器完成 LongCat/美团注册登录
- 将 Cookie 绑定到对应
account_id
后续若补齐 Passport 协议,可在 src/services/register.js 扩展自动化钩子。
config.json(也可用管理面板):
{
"api_keys": "sk-longcat",
"admin_password": "admin",
"default_mode": "oversea",
"keepalive_interval_seconds": 21600,
"temp_mail": {
"api_base": "https://apimail.example.com",
"admin_password": "xxx"
},
"proxy_pool": {
"enabled": false,
"sub_url": "https://proxy.example.com/sub?token=xxx",
"listen_port": 17890,
"singbox_path": ""
}
}SQLite 默认路径:data/longcat2api.db
longcat2api/
├── package.json
├── config.example.json
├── src/
│ ├── index.js # 入口
│ ├── config.js
│ ├── db/index.js # SQLite
│ ├── middleware/auth.js
│ ├── openai/ # 模型别名 + 协议转换
│ ├── routes/
│ │ ├── openai.js # chat + responses
│ │ └── admin.js
│ └── services/
│ ├── longcatClient.js # 上游客户端
│ ├── sseParser.js
│ ├── tempMail.js
│ ├── proxyPool.js
│ ├── register.js
│ └── keepalive.js
└── public/index.html # 管理面板
| 方法 | 路径 | 说明 |
|---|---|---|
| GET/POST | /api/config |
系统配置 |
| GET | /api/accounts |
账号列表 |
| POST | /api/account/import-cookie |
导入 Cookie |
| POST | /api/account/:id/test |
测试账号 |
| POST | /api/accounts/renew-all |
全量保活 |
| POST | /api/account/:id/refresh-mail-jwt |
从 Temp Mail 重新签发并保存单账号邮箱 JWT |
| POST | /api/accounts/refresh-mail-jwts |
批量重新签发邮箱 JWT(响应不含 JWT 明文) |
| POST | /api/account/auto-register |
单次注册准备 |
| POST | /api/account/auto-register-batch |
批量异步任务 |
| GET | /api/account/auto-register-batch/active |
当前活动注册任务(页面恢复与 single-flight) |
| GET/POST | /api/temp-mail/* |
临时邮箱 |
| POST | /api/proxy/start|stop|rotate|test |
代理池 |
部署约定对齐 mimo2api / grok2api,清单在 GitOps 仓库:
D:\WorkSpace\Project\服务器管理\private\gitops\ircs-prod-config\longcat2api\
| 项 | 值 |
|---|---|
| 公网 | https://longcat2api.mnnu.eu.org |
| 命名空间 | longcat2api |
| 镜像 | speedproxy/longcat2api:sha-<gitsha>(Oracle ARM64 / linux/arm64) |
| 运行时 | Node.js 22 + Python 本地验证码运行时 |
| 状态卷 | Longhorn PVC longcat2api-state → /var/lib/longcat2api |
| 节点 | infra.mnnu/node-class=core-public |
| 流式超时 | HTTPRoute 标签 infra.mnnu/traffic-class=streaming-ai |
本地私密凭据:
D:\WorkSpace\Project\服务器管理\private\longcat2api\credentials.envD:\WorkSpace\Project\服务器管理\private\longcat2api\config.json
详细步骤见 GitOps 文档:
private/gitops/ircs-prod-config/docs/longcat2api-deployment.md
- 推送本仓库并构建镜像(
.github/workflows/docker-publish.yml) - 将
ircs-prod-config中longcat2api/与apps/longcat2api-application.yaml推到main - 集群一次性创建 bootstrap / dockerhub Secret(见
longcat2api/README.md) - Cloudflare 增加
longcat2api.mnnu.eu.org多 A 记录(与其它*.mnnu.eu.org相同 NLB) - Argo CD 同步后访问
/health与管理面板
K8s 环境变量(Secret)会覆盖 PVC 内 config.json 的密钥类字段,前缀统一为 LONGCAT2API_*。
MIT