Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Anuma 2API

一个将 Anuma AI 账号池包装为 OpenAI 兼容 API 的网关 + 自动注册工具。

本仓库是 AnumaAI 的二次开发分支:

  • 上游项目提供 Anuma AI 的批量注册与管理思路,但它的纯 HTTP 注册流程因缺少 hCaptcha token 已失效;
  • 本项目改为 camoufox 反检测浏览器 + hcaptcha-challenger 打通注册,并用 Go 网关 把账号池暴露为 OpenAI 兼容的 /v1/chat/completions

本项目仅用于个人学习与自动化研究。请遵守目标服务的服务条款,自行评估合规风险。


功能特性

  • OpenAI 兼容接口GET /v1/modelsPOST /v1/chat/completions(含 SSE 流式),可直接接入任意 OpenAI SDK。
  • 账号池自动管理:SQLite 持久化,账号支持上传、列表、删除、单查余额、手动刷新 token。
  • 自动换号重试:403 / 429 自动切换账号;401 自动刷新 token 重试;余额耗尽自动进入 cooldown。
  • 月度巡检:后台定时刷新 token 保活,cooldown 账号余额恢复后自动回到可用池。
  • 模型白名单:仅暴露白名单内的模型,tier-gate 模型(账号级 403)不会出现在 /v1/models
  • 网关侧自动续写:输出达到模型 token 上限(finish_reason=length)时,自动追加历史重放,直到自然结束或到达段数上限。
  • 自动注册脚本:临时邮箱 → hCaptcha → Privy 认证 → 嵌入式钱包 → 查余额,一键注册并推送到网关。

架构

                     ┌──────────────────────────────────────────────┐
                     │            Anuma AI (上游, 闭源)              │
                     │   chat.anuma.ai   auth.privy.io              │
                     │   portal.anuma.ai/api/v1                     │
                     └───────▲──────────────────────────────────────┘
                             │ Responses API + identity_token
                             │ (privy-app-id / privy-ca-id 请求头)
        ┌────────────────────┴───────────────────────────────────┐
        │                   gateway/ (Go)                        │
        │                                                        │
        │  internal/config  环境变量配置                          │
        │  internal/upstream portal/privy 上游客户端              │
        │  internal/convert  OpenAI Chat ↔ Responses 转换 + 注入  │
        │  internal/pool     账号池 (SQLite + cooldown/巡检)       │
        │  internal/api      /v1/* OpenAI 兼容  +  /api/* 管理     │
        └───────────────▲────────────────────────────────────────┘
                        │ Bearer token (ANUMA_ADMIN_PASSWORD)
                        │ GET /v1/models / POST /v1/chat/completions
        ┌───────────────┴─────────────┐
        │  任意 OpenAI SDK / 客户端    │
        │  (curl, openai-python, ...)  │
        └─────────────────────────────┘
注册流程 (register.py):

  cf-temp-mail ──► 临时邮箱 ──► chat.anuma.ai 表单
                                      │
                          hCaptcha (隐形 / AgentV 解 challenge)
                                      │
                           auth.privy.io passwordless/init + OTP
                                      │
                              Privy 嵌入式钱包 + refresh session
                                      │
                        portal.anuma.ai credits/balance (100 credits)
                                      │
                          POST 网关 /api/accounts 推送到账号池

快速开始

1. 启动网关(Docker)

# 复制环境模板并填写真实值
cp .env.example .env
vim .env

# 构建并启动
cd gateway
docker compose up -d --build

网关监听 :7895,健康检查 GET /healthz

2. 注册账号并推送网关

# 安装运行时依赖
pip install -r requirements.txt

# 单账号注册(成功后自动 POST 到网关 /api/accounts)
python3 register.py

# 批量注册 5 个
python3 register.py --count 5

# 从历史 CSV 批量补传网关(恢复账号池)
python3 register.py --import-csv --dry-run   # 先预览
python3 register.py --import-csv             # 实际上传

注册需要可用的 camoufoxhcaptcha-challenger 环境(路径通过环境变量注入,见下节),以及一个 cf-temp-mail 临时邮箱服务的 CF_TEMP_MAIL_KEY

3. 验证网关

# 健康检查
curl http://127.0.0.1:7895/healthz

# 查看账号池统计
curl -H "Authorization: Bearer YOUR_ADMIN_PASSWORD" \
     http://127.0.0.1:7895/api/stats

配置说明

复制 .env.example.env 后填写。所有敏感值请使用自己的强随机值,不要使用仓库内占位符

环境变量 默认值 说明
ANUMA_ADMIN_PASSWORD YOUR_ADMIN_PASSWORD API Bearer token,部署前必须改为强随机值
ANUMA_PORT 7895 HTTP 监听端口
ANUMA_DB_PATH ./gateway.db SQLite 持久化路径(容器内 /app/data/gateway.db
ANUMA_UPSTREAM_BASE_URL https://portal.anuma.ai/api/v1 上游 portal base URL
ANUMA_PRIVY_BASE_URL https://auth.privy.io/api/v1 Privy 认证 base URL
ANUMA_MODEL_CACHE_TTL 600 模型列表缓存秒数
ANUMA_MAX_RETRIES 5 每次请求的换号/重试预算
ANUMA_AUTH_FAIL_LIMIT 3 连续鉴权失败上限,超出后账号禁用
ANUMA_MODEL_ALLOWLIST 12 个可用模型 逗号分隔的模型白名单
ANUMA_REFRESH_INTERVAL 1800 后台 token 巡检间隔秒数(<=0 禁用)
ANUMA_COOLDOWN_CHECK_INTERVAL 86400 cooldown 账号巡检间隔秒数(<=0 禁用)
ANUMA_RETRY_BACKOFF_MS 300 重试退避基数毫秒
ANUMA_AUTO_CONTINUE true 网关侧自动续写开关
ANUMA_AUTO_CONTINUE_MAX_SEGMENTS 5 自动续写最大段数(含首段,<=0 禁用)
CF_TEMP_MAIL_API YOUR_MAIL_DOMAIN 临时邮箱服务 API base
CF_TEMP_MAIL_KEY 临时邮箱建箱鉴权 key(必填)
CF_TEMP_MAIL_DOMAIN YOUR_MAIL_DOMAIN 临时邮箱域名
ANUMA_GATEWAY_URL http://127.0.0.1:7895 注册脚本推送网关的地址
ANUMA_GATEWAY_TOKEN 推送网关用的 Bearer token(与 ANUMA_ADMIN_PASSWORD 一致)
CAMOUFOX_SITE_PACKAGES camoufox Python site-packages 路径
HC_CHALLENGER_SRC / HC_CHALLENGER_VENV_SP hcaptcha-challenger src / venv site-packages 路径
HC_CHALLENGER_ENV hcaptcha-challenger 的 .env 路径(含 OPENAI_BASE_URL 等)

API 使用示例

所有 /v1/*/api/* 端点都需要 Bearer 认证:

export API=http://127.0.0.1:7895
export TOKEN=YOUR_ADMIN_PASSWORD

列出模型

curl -s "$API/v1/models" \
  -H "Authorization: Bearer $TOKEN" | jq

非流式对话

curl -s "$API/v1/chat/completions" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "glm-5.2",
    "messages": [{"role": "user", "content": "你好,用一句话介绍你自己"}]
  }' | jq

流式对话(SSE)

curl -N "$API/v1/chat/completions" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "stream": true,
    "messages": [{"role": "user", "content": "写一段 300 字的短文"}]
  }'

管理 API

# 账号池统计
curl -s "$API/api/stats" -H "Authorization: Bearer $TOKEN"

# 上传单个账号(注册脚本即调用此接口)
curl -s -X POST "$API/api/accounts" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "anuma...@example.com",
    "wallet_address": "0x1234...",
    "identity_token": "...",
    "access_token": "...",
    "refresh_token": "...",
    "available_credits": 100,
    "tier": "basic"
  }'

# 查看 cooldown 账号
curl -s "$API/api/accounts?status=cooldown" -H "Authorization: Bearer $TOKEN"

# 手动触发一次全量 token 刷新 / cooldown 巡检
curl -s -X POST "$API/api/accounts/refresh-all"    -H "Authorization: Bearer $TOKEN"
curl -s -X POST "$API/api/accounts/cooldowns-check" -H "Authorization: Bearer $TOKEN"

# 删除账号
curl -s -X DELETE "$API/api/accounts/you@example.com" -H "Authorization: Bearer $TOKEN"

接入任意 OpenAI SDK

设置 base_url 指向网关即可:

from openai import OpenAI

client = OpenAI(
    base_url="http://127.0.0.1:7895/v1",
    api_key="YOUR_ADMIN_PASSWORD",
)

resp = client.chat.completions.create(
    model="qwen-3.6-plus",
    messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)

仓库结构

anuma2api/
├── README.md                # 本文档
├── .env.example             # 环境变量模板(含所有占位符)
├── .gitignore
├── register.py              # 自动注册脚本(临时邮箱→hCaptcha→Privy→钱包→推送网关)
├── loop_register.sh         # 注册循环 wrapper(可配 systemd / cron)
├── requirements.txt
└── gateway/                 # Go 网关
    ├── cmd/server/main.go
    ├── internal/
    │   ├── api/             # HTTP 路由(/v1/* 与 /api/*)
    │   ├── config/          # 环境变量配置
    │   ├── convert/         # OpenAI Chat ↔ Responses 转换、系统提示注入、模型别名
    │   ├── pool/            # 账号池(SQLite 持久化、cooldown、巡检)
    │   └── upstream/        # portal.anuma.ai / auth.privy.io 上游客户端
    ├── Dockerfile
    ├── docker-compose.yml
    ├── go.mod / go.sum
    └── .gitignore

参考链接

知识库

项目的详细技术文档(架构设计、API参考、运维手册等)以 OKF 格式 维护在 Sliverkiss/my-llm-wiki 仓库的 anuma2api/ 目录下,包含:


免责声明

本项目仅供学习与研究。使用本项目可能违反目标服务条款,由此产生的一切风险与责任由使用者自行承担。

About

No description, website, or topics provided.

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages