云集智能 API

面向国内开发者的 Agnes AI 网关代理。视频生成、图片生成,单一 Key 接入,毫秒级响应,绕过网络限制。

🚀 视频生成 (agnes-video-v2.0) 🎨 图片生成 (agnes-image-2.1-flash) 🔌 OpenAI 兼容协议 🌏 国内直连

📖 介绍

云集智能 API 是 Agnes AI 平台的国内代理网关。我们做三件事:

  • 稳定的 Key 池:聚合多账号的 Key,单 Key 异常自动切换,避免您自己管理多个 Agnes 账号
  • 国内直连:本站直接连通 Agnes 上游,绕开官方 API 在国内的不稳定问题
  • 统一鉴权:用 sk-yj-xxx 单 Key 调用,不暴露上游细节
💡 我们能用来做什么?
· 在自己的产品/网站里集成 AI 视频、图片能力
· 跑自动化脚本批量生成内容
· 测试对比模型效果

🚀 快速开始(3 步上手)

1. 获取你的 API Key

登录后,在「我的」→ API 接入 Tab 看到你的 sk-yj-xxx 格式 Key。

2. 选一个端点

下面是最小可运行示例(图片生成):

curl https://ai.yunjii.cn/v1/images/generations \
  -H "Authorization: Bearer sk-yj-你的key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "agnes-image-2.1-flash",
    "prompt": "一只在太空漂浮的橘猫,电影感"
  }'

3. 看响应

成功会返回 JSON,包含图片 URL:

{
  "data": [
    {
      "url": "https://storage.googleapis.com/.../image.png"
    }
  ]
}
✅ 成功了? 接下来看 端点参考 了解完整参数,或 代码示例 看 Python / JS 怎么写。

🔐 认证

所有 API 请求都必须在 Header 里带 Bearer Token:

Authorization: Bearer sk-yj-你的key
⚠️ 安全提醒:Key 相当于你账号的密码。
· 不要提交到 GitHub / 公开页面
· 怀疑泄漏时立刻在 我的 → API 接入 → 重新生成

🧠 模型列表

agnes-image-2.1-flash 同步
图片生成。同步响应,秒级出图。支持文生图、图生图、组合/保留、高密度优化。
agnes-video-v2.0 异步
视频生成。需要先提交任务(POST /v1/videos),再轮询结果(GET /v1/videos/{id})。支持文生视频、图生视频、多图视频、关键帧动画。

📡 端点参考

POST/v1/images/generations
文生图 / 图生图。同步返回图片 URL。

请求参数

参数类型必填说明
modelstring固定 agnes-image-2.1-flash
promptstring图片描述文本
imagestring | string[]参考图 URL(图生图/组合/保留时使用)
sizestring1024x10241024x1792
seedint固定种子可复现结果
nint生成张数,默认 1

响应

{
  "data": [
    { "url": "https://storage.googleapis.com/.../abc.png" }
  ]
}
POST/v1/videos
提交视频生成任务。立即返回 task_id,需要轮询查询结果。

请求参数

参数类型必填说明
modelstring固定 agnes-video-v2.0
promptstring视频描述文本
imagestring单张参考图 URL(图生视频)
extra_body.imagestring[]多张参考图 URL(多图视频/关键帧)
extra_body.modestring多图模式时填 "keyframes"
heightint视频高度,默认 768
widthint视频宽度,默认 1152
num_framesint帧数。必须满足 8n+1 且 ≤ 441
frame_rateint帧率 1-60,默认 24
seedint随机种子
negative_promptstring反向描述(不想出现的内容)

响应

{
  "id": "task_xxxxx",
  "object": "video",
  "model": "agnes-video-v2.0",
  "status": "queued",
  "progress": 0,
  "created_at": 1774344160
}
GET/v1/videos/{task_id}
查询视频任务状态。轮询直到 status="completed"

状态机

状态说明建议
queued排队中继续轮询
in_progress生成中3 秒一次轮询,看 progress
completed完成读取 video_urlremixed_from_video_id.video_url
failed失败error 字段,常见原因:参数超限/上游限流

💻 调用示例

cURL

# 文生图
curl https://ai.yunjii.cn/v1/images/generations \
  -H "Authorization: Bearer $YJ_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"agnes-image-2.1-flash","prompt":"赛博朋克街道"}'

# 文生视频
curl -X POST https://ai.yunjii.cn/v1/videos \
  -H "Authorization: Bearer $YJ_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "agnes-video-v2.0",
    "prompt": "A cat walking on the beach at sunset",
    "num_frames": 121,
    "frame_rate": 24
  }'

Python (requests)

import requests, time

API_KEY = "sk-yj-你的key"
BASE = "https://ai.yunjii.cn/v1"
H = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}

# 文生图
r = requests.post(f"{BASE}/images/generations",
    headers=H,
    json={"model": "agnes-image-2.1-flash", "prompt": "宇航员在火星"})
print(r.json()["data"][0]["url"])

# 文生视频(异步)
r = requests.post(f"{BASE}/videos",
    headers=H,
    json={"model": "agnes-video-v2.0", "prompt": "A dancing robot", "num_frames": 121})
task_id = r.json()["id"]

# 轮询
while True:
    s = requests.get(f"{BASE}/videos/{task_id}", headers=H).json()
    print(f"状态: {s['status']}  进度: {s.get('progress', 0)}%")
    if s["status"] == "completed":
        print("视频 URL:", s.get("video_url") or s.get("remixed_from_video_id", {}).get("video_url"))
        break
    if s["status"] == "failed":
        print("失败:", s.get("error"))
        break
    time.sleep(3)

Node.js (fetch)

const API_KEY = "sk-yj-你的key";
const BASE = "https://ai.yunjii.cn/v1";
const H = { "Authorization": `Bearer ${API_KEY}`, "Content-Type": "application/json" };

// 文生图
const img = await fetch(`${BASE}/images/generations`, {
  method: "POST", headers: H,
  body: JSON.stringify({ model: "agnes-image-2.1-flash", prompt: "夜空" })
}).then(r => r.json());
console.log(img.data[0].url);

// 文生视频 + 轮询
async function generateVideo(prompt) {
  const t = await fetch(`${BASE}/videos`, {
    method: "POST", headers: H,
    body: JSON.stringify({ model: "agnes-video-v2.0", prompt, num_frames: 121 })
  }).then(r => r.json());
  const id = t.id;
  while (true) {
    const s = await fetch(`${BASE}/videos/${id}`, { headers: H }).then(r => r.json());
    console.log(s.status, s.progress);
    if (s.status === "completed") return s.video_url || s.remixed_from_video_id?.video_url;
    if (s.status === "failed") throw new Error(JSON.stringify(s.error));
    await new Promise(r => setTimeout(r, 3000));
  }
}

❌ 错误码

HTTP含义处理建议
401未提供 Key 或 Key 无效检查 Authorization 头;重新生成 Key
403Key 被禁用用户可能触发了安全规则,重新生成 Key
429调用频率超限加退避重试,或绑定更多 Agnes Key 提高配额
500上游服务异常30 秒后重试;多次失败联系我们
502/503网关问题同上
guest_limit (401)游客免费次数用完登录后即可继续使用
Key 自动切换:当你的某个 Key 触发 401/403/429 错误时,网关会自动用其他 Key 重试。响应头 X-Key-Fallback: true 表示走了兜底。

❓ FAQ

Q: 调用次数有限制吗?

登录用户:基于你绑定的 Agnes Key 的配额,绑定越多配额越高。游客:每天 3 次免费。

Q: 视频生成大概多久?

看帧数和分辨率。一般 121 帧(5 秒)需要 1-3 分钟;441 帧(最长)需要 5-10 分钟。建议每 3 秒轮询一次。

Q: Key 泄漏了怎么办?

立刻在「我的」→ API 接入 → 重新生成。旧 Key 立即失效。

Q: 跟官方 API 有什么区别?

接口协议完全一致,只是域名换成 ai.yunjii.cn,Key 用我们生成的 sk-yj-xxx。其他参数、响应格式、错误码都和官方对齐。

Q: 能在 OpenAI SDK 里直接用吗?

部分可以。把 base_url 设成 https://ai.yunjii.cn/v1api_key 设成你的 sk-yj-xxx,但 只支持图片生成(OpenAI 兼容),视频端点需要用 Agnes 自己的协议。