HiAPI
博客

教程

Seedream API 成本优化:如何在 hiapi 上降低图像生成成本

2026年11月3日
Seedream API 成本优化:如何在 hiapi 上降低图像生成成本

Seedream 在 hiapi 上以四个不同层级提供——seedream-5.0-flash、seedream-5.0-lite、seedream-5.0-pro 以及旧版 seedream-4.5——每个层级的计费方式都不同。选错层级或选错分辨率,你可能每张图要多付 2-4 倍的钱,却没有任何可见的画质提升。本指南展示每个层级的实际定价结构,并给出一个可运行的代码范式,用于调用满足你要求的最低成本模型。

你将构建什么,以及先决条件

你将构建一个小型 Python 客户端,通过 hiapi 的统一任务 API 创建 Seedream 图像任务,等待结果,并有意识地选择分辨率/模型组合,而不是照搬教程里复制粘贴的默认值。首先,从你的 hiapi 控制台获取 API 密钥——下面每个请求都以 Authorization: Bearer sk-... 形式发送它。

你要优化的定价结构

当前每张图定价(上线前请始终核对实时定价页面,因为费率会变动):

  • seedream-5.0-flash —— 统一 $0.025/张,文生图和图生图同价。平台最便宜的层级;最适合草稿、缩略图,以及任何你会重新生成多次再挑选最终结果的场景。
  • seedream-5.0-lite —— 统一 $0.035/张,并且关键在于,无论你以 2K 还是 4K 渲染,价格都相同。在这个层级上,从成本角度永远没有理由请求 2K——4K 是免费升级。
  • seedream-4.5(旧版)—— 两个端点均为统一 $0.045/张。
  • seedream-5.0-pro —— 按分辨率分层,而非统一价:文生图在 1K 为 $0.05,在 2K 为 $0.10;图生图在 1K 为 $0.06,在 2K 为 $0.10。在这个层级上,分辨率才是你预算真正流向的地方——一张 1K 草稿的成本大约是 2K 最终渲染的一半。

这种不对称性就是整个优化要点:lite 奖励请求更高分辨率(免费),pro 惩罚更高分辨率(成本大约翻倍)。 在调用代码中对它们区别对待,而不是到处硬编码同一个分辨率。

最小可运行示例

每次 Seedream 调用都经过相同的异步任务端点:用 POST /v1/tasks 创建,然后轮询 GET /v1/tasks/{taskId} 或接收 webhook 回调。模型 ID 是裸的——没有前置的 models/ 或厂商前缀。

import os
import time
import requests

API_KEY = os.environ["HIAPI_API_KEY"]  # starts with sk-
BASE_URL = "https://api.hiapi.ai/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}


def create_task(model: str, input_payload: dict) -> str:
    resp = requests.post(f"{BASE_URL}/tasks", headers=HEADERS,
                          json={"model": model, "input": input_payload}, timeout=30)
    resp.raise_for_status()
    return resp.json()["data"]["taskId"]


def wait_task(task_id: str, interval: float = 3.0, timeout: float = 180.0) -> dict:
    deadline = time.time() + timeout
    while time.time() < deadline:
        resp = requests.get(f"{BASE_URL}/tasks/{task_id}", headers=HEADERS, timeout=30)
        resp.raise_for_status()
        data = resp.json()["data"]
        if data["status"] == "success":
            return data
        if data["status"] == "fail":
            raise RuntimeError(data["error"])
        time.sleep(interval)
    raise TimeoutError(f"task {task_id} did not finish within {timeout}s")


# seedream-5.0-lite: 4K costs the same $0.035 as 2K, so always ask for 4K here.
task_id = create_task(
    "seedream-5.0-lite/text-to-image",
    {"prompt": "a minimalist product photo of a ceramic mug on a wooden table", "resolution": "4K"},
)
result = wait_task(task_id)
image_url = result["output"][0]["url"]
print(image_url)

seedream-5.0-lite 上的 resolution 只接受 2K 或 4K(没有 1K)。seedream-5.0-pro 则接受 1K/2K,并且额外要求 aspect_ratio(取值为 1:1、4:3、3:4、16:9、9:16、2:3、3:2、21:9 之一)——每个 Seedream 层级的输入模式略有不同,所以不要认为一个模型接受的字段能沿用到另一个模型。

生产级范式

以编程方式选择层级,而不是凭习惯。 在调用点旁边维护一张小的成本表,根据预算/质量需求路由,而不是到处硬编码同一个模型——把数字当作定价页面的缓存,而不是事实来源:

SEEDREAM_COST_USD = {
    ("seedream-5.0-flash", None): 0.025,
    ("seedream-5.0-lite", "2K"): 0.035,
    ("seedream-5.0-lite", "4K"): 0.035,   # same price — always prefer 4K
    ("seedream-5.0-pro", "1K"): 0.05,      # text-to-image; i2i 1K is $0.06
    ("seedream-5.0-pro", "2K"): 0.10,
}

def pick_model_for_draft_vs_final(is_final: bool) -> tuple[str, dict]:
    if not is_final:
        return "seedream-5.0-flash", {}  # $0.025, iterate freely
    return "seedream-5.0-pro", {"resolution": "2K"}  # $0.10, one shot at the end

优先使用回调而非紧密轮询。 在高吞吐管道中,不要每隔几秒循环调用 wait_task,而是在创建请求中加入 callback:

task_id_resp = requests.post(
    f"{BASE_URL}/tasks", headers=HEADERS,
    json={
        "model": "seedream-5.0-lite/text-to-image",
        "input": {"prompt": "...", "resolution": "4K"},
        "callback": {"url": "https://yourapp.example.com/webhooks/hiapi", "when": "final"},
    },
    timeout=30,
)

当任务达到终态(success 或 fail)时,你的 webhook 处理器会收到一次 POST,而不是让你的 worker 在轮询循环中消耗请求。如果你无法暴露公共 HTTPS 端点(本地开发、内部工具),轮询仍是更简单的选择——一旦以真实规模运行,就改用回调。

在创建任务之前去重,而不是之后。 任务 API 在创建时计费,因此重试的请求(超时、worker 崩溃、队列消费者重新部署)如果重新提交同一作业,会被计费两次。在调用 create_task 之前,检查你自己的存储中是否已有以 (model, input_hash) 为键的现有任务,如果该任务已在执行中或已成功,则跳过创建——hiapi 的任务端点没有内置去重,所以这必须放在你的代码里。

显式处理认证失败。 无效或已撤销的密钥会返回 HTTP 401 及结构化响应体,而不是通用错误页面:

{"error": {"code": "permission_denied", "type": "hiapi_error", "request_id": "..."}}

专门检查 error.code == "permission_denied",这样坏密钥会快速失败,而不是重试到超时。

相关 hiapi 资源

常见问题

哪个 Seedream 模型对快速草稿或图标最便宜? seedream-5.0-flash,统一 $0.025/张——平台最便宜的层级,文生图和图生图同价。

在 Seedream 5.0 Lite 上请求 4K 而不是 2K 会更贵吗? 不会。seedream-5.0-lite 统一 $0.035/张,无论 resolution 是 2K 还是 4K,所以在这个层级上默认请求 4K。

Seedream 5.0 Pro 每张图多少钱? 按分辨率分层:文生图在 1K 为 $0.05,在 2K 为 $0.10;图生图在 1K 为 $0.06,在 2K 为 $0.10。与 lite 不同,分辨率在这里确实会改变你的账单。

如果我的作业重试,如何避免被计费两次? 任务 API 没有服务端幂等键,所以在客户端去重:在调用 create_task 之前为 (model, input_hash) 存储一个键,如果该键已在执行中或已成功,则跳过创建。

我应该轮询还是使用 webhook 回调? 如果你无法暴露公共 HTTPS 端点(本地开发、脚本),就轮询 GET /v1/tasks/{taskId}。一旦以真实规模运行,就改用 callback.url + when: "final"——它用每个任务一次推送通知替代轮询循环。

无效 API 密钥会返回什么? HTTP 401 及 {"error": {"code": "permission_denied", "type": "hiapi_error", "request_id": "..."}}。显式检查该错误码,而不是用坏密钥重试到超时。

我可以先不使用 API 密钥就使用这些价格吗? 不可以——每次 /v1/tasks 调用都需要来自你在控制台中创建的真实密钥的有效 Authorization: Bearer sk-... 请求头;生产生成没有无密钥或免注册试用的路径。

立即开始构建持久 AI 产物

获取 API 密钥,通过一个基于任务(task)的 API 调用图像、视频和音频模型。

阅读 API 文档