教程
Grok 文生视频 API:通过 hiapi 调用 grok-imagine 视频模型
为什么选择通过聚合 API 调用 Grok 视频生成
视频生成很少只是单一模型的问题。你从一个创意出发,紧接着就需要一个更便宜的变体用于草稿,一个保真度更高的模型用于终稿,以及在某家提供商状态不佳时的备用方案。如果为每一种情况都直接对接,就意味着维护各自的凭证、请求格式和错误语义——这些工作与你想生成的视频毫无关系。
hiapi 为 Grok 文生视频模型提供了一个统一的接口。你只需保留一份凭证和一套请求约定,而 grok-imagine/text-to-video 和 grok-imagine-1.5-lite 都位于同一组端点之下。切换变体只需更改模型名称,而无需重写集成,你的提示词模板、重试逻辑和资源处理都保持不变。
还有一个运维层面的理由。聚合访问意味着模型可用性和弃用都在上游处理,因此新的 grok-imagine 变体无需重新部署即可进入你的流水线。对于将视频功能交付到产品中的团队来说,这减少了你所负责的范围:你只需对提示词和产品体验负责,而无需关心提供商的底层管道。
认识模型变体:grok-imagine/text-to-video 与 grok-imagine-1.5-lite
hiapi 提供两个 Grok 文生视频变体,它们分别位于保真度与吞吐量权衡曲线的不同位置。
grok-imagine/text-to-video
这是通用文生视频模型。当输出质量是优先考虑时,请选择它:主视觉片段、营销素材、概念提案,以及任何会被人仔细审视运动效果的情况。当你还不确定某个提示词会表现如何时,它是更稳妥的默认选择,因为此时你是在模型最强状态下评估它。
grok-imagine-1.5-lite
lite 变体致力于降低延迟和减少资源消耗。将其用于迭代循环——提示词探索、故事板预览、候选片段的批量生成——在这些场景中,你希望先收敛出一个提示词,再花费昂贵的成本进行生成。在生产环境中,它也可以服务于高并发、低风险的场景,在这些场景中快速响应比完美的画面更重要。
如何抉择
一条实用的规则:用 grok-imagine-1.5-lite 做草稿,用 grok-imagine/text-to-video 做终稿。由于两者在 hiapi 上共享同一请求约定,你可以在客户端中将模型名参数化,并按任务层级进行切换。如果 lite 生成的草稿看起来已经不错,就把同一个提示词提升到完整模型以产出交付物。如果不行,你就节省了一次缓慢而昂贵的尝试。
文生视频请求的构成
你通过 hiapi 发出的每一次文生视频调用都由少量部分组成。分别理解它们可以让调试快得多。
model 字段
模型标识符用于选择变体(grok-imagine/text-to-video 或 grok-imagine-1.5-lite)。把它当作配置,而不是埋在函数里的硬编码字符串——你之后会需要按层级路由。
提示词
提示词是主要的创意输入。它应按重要性顺序描述主体、动作、场景和风格。没有动作的场景只是一张图像;动作子句才是让它成为视频的关键。我们稍后会深入介绍提示词结构。
运动模式
运动模式引导模型如何解读镜头和主体的移动。它是最常被忽视的参数,也最常导致尽管提示词很好、输出却“看起来不对”。让它与你的提示词所描述的内容一致,而不是保留默认值。
输出与交付
视频生成是异步的。调用会返回一个任务,你跟踪该任务直至完成,然后通过其引用获取生成的资源。由于渲染需要真实时间,你的客户端必须显式处理等待期——轮询或 webhook 式的完成检查——而不是假设会有内联响应。计费按输出秒数计算,因此从第一版草稿起就要留意时长意图。
选择与提示词匹配的运动模式
运动模式是一个强先验。它在模型解析你提示词中更精细的细节之前,就告诉它应偏向哪种运动。当模式与提示词不一致时,输出往往会折中处理,结果两者都不满足。
让模式匹配主导运动
如果你的提示词描述的是镜头运动——缓慢推近、横向跟踪拍摄、围绕主体环绕——请选择以镜头运动为导向的运动模式。如果你的提示词描述的是主体在基本静止的画面中运动——一个人行走、烟雾升起、水流涌动——请选择以主体运动为导向的模式。如果片段应感觉像固定机位镜头但带有微妙的生命力,请选择最克制的选项。
每个片段只保留一个主导运动
试图在几秒内同时完成镜头运动、主体动作和场景过渡的片段通常会显得混乱。挑选最重要的单一运动,设置支持它的模式,并让提示词描述辅助细节,而不要加入相互竞争的运动动词。如果你需要复合序列,请生成单独的片段再剪辑到一起。
先迭代模式,再重写提示词
当结果感觉不对但主体和风格正确时,先更改运动模式。这比重写长提示词的实验成本更低,并且能隔离出问题出在运动解读还是内容描述上。
一个可用的请求,逐步拆解
下面的流程是 hiapi 上 Grok 文生视频任务的一般形式。负载中的参数名称遵循端点的请求模式;上线前请查阅 API 参考以获取确切的字段集合。
第 1 步:构建负载
从结构化对象开始,而不是松散的字符串拼接,这样你可以记录并复用它。
{
"model": "grok-imagine/text-to-video",
"prompt": "黄昏时分,一只红色风筝在受风吹拂的海滩上升起,镜头缓慢上摇,柔和的金色光线",
"motion_mode": "<与镜头上摇相匹配的模式>"
}
第 2 步:提交任务
将负载发送到文生视频端点,并在授权头中携带你的 hiapi 凭证。响应会返回任务标识符和状态。立即持久化该标识符——它是你后续一切操作的句柄。
curl -X POST "$HIAPI_BASE_URL/v1/video/generations" \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d @payload.json
第 3 步:轮询是否完成
渲染是异步的。按带退避的间隔查询任务状态,并在任务报告终态时停止。将“pending”和“processing”视为正常状态,而不是错误。
第 4 步:获取资源
任务完成后,响应中会带有生成视频的引用。将其下载到你自己的存储,而不是热链接一个临时 URL,这样你的产品就不会依赖于生成产物的生命周期。
第 5 步:记录输入
将模型、提示词、运动模式和任务 id 与存储的资源一起记录。当片段之后被判定为好或坏时,你需要确切的输入来复现或修复它。
编写视频模型真正能执行的提示词
视频提示词是镜头描述,而不是情绪板。模型需要具体、物理上合理的指令,以便在时间维度上进行动画化。
使用稳定的子句顺序
主体、动作、场景、镜头、风格。这个顺序将重要内容前置,并在模型不得不在细节与连贯性之间取舍时给出清晰的层级。在你的模板中保持相同顺序,以便有意义地比较结果。
一个动作,用动词表述
“一个骑行者”是静止画面。“一个骑行者在上坡蹬车”才是片段。明确说出动作并保持单一。如果你想要次要运动,将其作为辅助细节添加——“在上坡蹬车,骑行服飘动”——而不是第二个相互竞争的动作。
用直白的语言描述镜头运动
说明镜头做什么:上摇、左移、保持稳定。避免“动态角度”这类可能意味着任何东西的含糊表述。镜头指令越清晰,与你所选运动模式的配合就越好。
约束风格,而非规格
描述光照、色调和质感(“柔和的金色光线、柔和的色彩、轻微的颗粒感”)。避免发明模型并未暴露的技术参数——分辨率和时长是请求设置,而不是提示词内容。将两者混在一起会迷惑模型和阅读日志的开发者。
维护模板库
为每种用例维护几个提示词骨架——产品镜头、风景、角色时刻——并为主体和动作留出槽位。模板让输出更一致,也让失败更容易归因到单个改变的变量。
为生产环境加固集成
第一次成功调用是容易的部分。区分演示与产品的是当任务缓慢、提示词被拒绝或流量激增时集成如何表现。
将生成视为队列
永远不要阻塞用户请求等待视频渲染。提交任务,向客户端返回任务 id,让 worker 轮询完成并在就绪时推送结果。这将你的请求延迟与渲染延迟解耦,并让你无需重新提示用户即可重试。
带退避重试,且仅在可重试的失败上重试
瞬时错误和超时值得使用带抖动的指数退避。验证错误——格式错误的提示词或不支持的字段——每次都会以相同方式失败;将那些错误呈现给调用方,而不是浪费重试。在客户端代码中显式分类错误。
对模型分层
将草稿路由到 grok-imagine-1.5-lite,终稿路由到 grok-imagine/text-to-video。由于计费按输出秒数计算,草稿层是你控制支出的地方:以低成本收敛提示词,然后将其提升。限制每个用户的并发任务数以防止失控的生成循环。
对提示词进行版本管理
存储提示词时附带版本标签,并记录哪个版本产出了哪个资源。当你更改模板时,可以与之前的输出比较并回滚回归,而不是靠猜测。
验证资源,否则丢弃
在向用户展示之前,对获取的视频运行轻量检查——文件完整性、预期时长、内容非空。一个低成本的验证步骤可以防止损坏的播放器出现在客户面前,并告诉你某个模型变体表现异常。
凭借一个端点、两个模型层级和精心选择的运动模式,Grok 文生视频 API 可以干净地融入生产流水线。先从 grok-imagine/text-to-video 上的单个提示词开始,让循环端到端跑通,然后为迭代添加 lite 层级。