/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
Agnes AI API 踩坑续篇:视频排队 20 分钟 vs 80 秒,顺手封装了文本大模型
本文是 《Agnes AI 全模态 API 免费实测报告》 的续篇,记录视频 API 调试中踩到的两个关键坑,以及如何把 agnes-2.0-flash 文本模型封装进技能并开源到 GitHub。
一、问题:视频生成永久排队
上篇发完后,我继续深度测试视频生成 API。用官方文档示例提交任务,然后用 task_id 轮询:
# ❌ 官方文档示例方式(会导致异常排队)
GET https://apihub.agnes–ai.com/v1/videos/{task_id}
结果视频状态一直是 queued,硬等了 20 多分钟还没开始生成,也没有任何错误提示。
二、根因:官方推荐用 video_id 查询,别用 task_id
在社区里翻到官方一句话提示:
「记住让你的 skills 用 video_id 查询,不要用 task_id 查询,以避免过长的视频排队!如果视频排队超过 5 分钟,大概率是接口搞错了」
原来问题在这里!
提交视频任务后,响应里会返回一个 video_id 字段(和 task_id 不同),必须用 video_id 去查询,排队时间才会正常。
# ✅ 正确方式(官方推荐)
GET https://apihub.agnes–ai.com/agnesapi?video_id=<VIDEO_ID>
实测对比
| task_id + /v1/videos/{task_id} | 20+ 分钟 | 异常排队 |
| video_id + /agnesapi?video_id=… | ~80 秒 | 正常 |
换成正确方式后,同样参数的视频 80 秒就生成完成,差距近 20 倍。
修正后的完整代码
import requests, time, os
from openai import OpenAI
API_KEY = "sk-你的Key" # 从 https://platform.agnes-ai.com 获取
BASE = "https://apihub.agnes-ai.com/v1"
VIDEO_API = "https://apihub.agnes-ai.com/agnesapi"
headers = {"Authorization": f"Bearer {API_KEY}"}
# 1. 提交视频生成任务
resp = requests.post(f"{BASE}/videos", json={
"model": "agnes-video-v2.0",
"prompt": "A cute Shiba Inu walking on the beach, cinematic shot",
"width": 1152,
"height": 768,
"num_frames": 121,
"frame_rate": 24,
}, headers={**headers, "Content-Type": "application/json"})
data = resp.json()
video_id = data.get("video_id", "") # ⭐ 关键:保存这个!
task_id = data.get("task_id", "")
print(f"提交成功 | task_id={task_id} | video_id={video_id}")
# 2. 用 video_id 轮询(不要用 task_id!)
start = time.time()
while True:
r = requests.get(f"{VIDEO_API}?video_id={video_id}", headers=headers)
result = r.json()
status = result.get("status", "unknown")
progress = result.get("progress", 0)
elapsed = int(time.time() – start)
print(f"[{elapsed}s] 状态: {status} 进度: {progress}%")
if status == "completed":
video_url = result.get("video_url") or result.get("remixed_from_video_id")
print(f"✅ 生成完成!视频地址: {video_url}")
break
elif status == "failed":
print(f"❌ 生成失败: {result.get('error')}")
break
time.sleep(10)
三、第二个坑:num_frames 参数
num_frames(视频总帧数)有两个隐藏约束:
合法值只有这 10 个:
VALID_FRAMES = {81, 121, 161, 201, 241, 281, 321, 361, 401, 441}
| 81 | ~3.4 秒 | 最短 |
| 121 | ~5.0 秒 | 推荐 |
| 241 | ~10.0 秒 | 适中 |
| 441 | ~18.4 秒 | 最长 |
建议在代码里加一层校验,避免提交非法值:
VALID_FRAMES = {81, 121, 161, 201, 241, 281, 321, 361, 401, 441}
if args.frames not in VALID_FRAMES:
print(f"错误: num_frames={args.frames} 非法!仅支持: {sorted(VALID_FRAMES)}")
sys.exit(1)
四、顺手把文本大模型也封装了
视频 API 调通之后,发现 Agnes 还有文本对话模型 agnes-2.0-flash,支持流式输出和 Thinking 模式,于是也一并封装进来了。
调用示例
from openai import OpenAI
client = OpenAI(
api_key="sk-你的Key",
base_url="https://apihub.agnes-ai.com/v1"
)
# 普通对话
response = client.chat.completions.create(
model="agnes-2.0-flash",
messages=[{"role": "user", "content": "用 Python 写一个贪吃蛇游戏"}],
)
print(response.choices[0].message.content)
# 流式输出(逐字显示)
for chunk in client.chat.completions.create(
model="agnes-2.0-flash",
messages=[{"role": "user", "content": "介绍一下自己"}],
stream=True
):
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
五、做成SKILL技能,开源到 GitHub
为了方便非技术用户使用,我把整套 API 封装成了一个 ** 技能**,已开源到 GitHub。
GitHub 仓库
👉 https://github.com/cnskycn/agnes-api-skill
技能功能
agnes_api.py
├── setup # 引导式配置 API Key(首次使用必选,非技术用户友好)
├── image # 文生图 / 图生图
├── video # 文生视频 / 图生视频 / 关键帧动画(已修复排队问题)
└── chat # 文本对话(agnes-2.0-flash,新增)
非技术用户也能用:setup 引导配置
考虑到很多用户不知道如何获取和配置 API Key,新增了 setup 子命令:
python agnes_api.py setup
运行后会:
以后运行任何命令都不再需要输入 Key。
快速开始
# 1. 配置 API Key(只需一次)
python agnes_api.py setup
# 2. 生成图片
python agnes_api.py image –prompt "一只柴犬在樱花树下" –size 1024×1024 –save result.jpg
# 3. 生成视频
python agnes_api.py video –prompt "A cat walking on the beach" –frames 121 –save result.mp4
# 4. 文本对话
python agnes_api.py chat –prompt "你好,介绍一下你自己" –stream
六、两篇文章覆盖内容对照
| 注册与基础配置 | ✅ | — |
| 文生图测试 | ✅ | — |
| 文生视频基础 | ✅ | — |
| 视频音频能力 | ✅ | — |
| video_id vs task_id 排队问题 | — | ✅ 核心 |
| num_frames 合法值 | — | ✅ 新增 |
| 文本大模型封装 | — | ✅ 新增 |
| setup 引导配置 | — | ✅ 新增 |
| GitHub 开源 | — | ✅ 新增 |
七、相关链接
- 上篇 CSDN:Agnes AI 全模态 API 免费实测报告(文生图 + 文生视频)
- Agnes AI 官网:https://agnes-ai.com
- API 文档:https://agnes-ai.com/doc
- 平台注册:https://platform.agnes-ai.com
- 技能 GitHub 仓库:https://github.com/cnskycn/agnes-api-skill
- WorkBuddy:https://www.workbuddy.ai
如果本文对你有帮助,欢迎点赞收藏 ⭐




