事情是这样的,老板说要搞一套信息图自动生成流程,我心想这有啥难的,结果…
周五下午 3 点,老板把我叫过去:
"咱们那篇 Harness Engineering 的文章不错,做成信息图发小红书吧。"
"行,我找设计师排期。"
"不用,你搞个自动化流程,以后每篇文章都能用。"
…行吧,自己挖的坑自己填。
我寻思着阿里云百炼有图像生成 API,接上不就行了。
第一个坑:API Key 权限
curl -X POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-to-image/generation \
-H "Authorization: Bearer sk-xxx" \
-d '{"model":"qwen-image-2.0","input":{"prompt":"三角形"}}'返回:
{"code":"InvalidApiKey","message":"Invalid API-key provided."}我心想完了,Key 是假的。找老板要了个新的,还是报错。
真相:聊天模型的 Key 和图像生成的 Key 不是一回事。你得在阿里云百炼控制台单独开通通义万相服务。
💡 教训 1:同一个平台的 API,不同服务可能要用不同的 Key,开通前看清楚文档。
换了 Key 之后,继续报错:
{"code":"InvalidParameter","message":"url error, please check url!"}我检查了半天 URL,拼写没错啊。
真相:通义万相的 API 端点不是 /text-to-image/generation,而是 /multimodal-generation/generation,而且输入格式是 messages 数组,不是简单的 input.prompt。
正确格式:
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--data '{
"model": "qwen-image-2.0-pro",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"text": "你的提示词"
}
]
}
]
},
"parameters": {
"n": 1,
"watermark": false,
"size": "1280*720"
}
}'💡 教训 2:阿里云的 API 文档分散在多个页面,一定要找到对应服务的准确文档,别信示例代码。
终于生成成功了!返回了图片 URL:
https://dashscope-7c2c.oss-accelerate.aliyuncs.com/.../xxx.png?Expires=1775210221&...我心想太好了,赶紧发群里给老板看。
3 分钟后:图片打不开了。
真相:OSS 返回的是临时签名 URL,有效期很短(大概 5-10 分钟)。你不及时下载,链接就废了。
💡 教训 3:生成的图片必须立即保存到本地,别依赖临时 URL。
这个坑是我自己挖的,也是最贵的一个坑。
当时我已经生成了 10 张图,但有些文件名不对,我想清理一下:
rm "/Users/wangc/Pictures/AI 生图库/"*.png然后整个世界安静了。
10 张图,全没了。
原因是通配符匹配了所有 PNG 文件,包括刚生成的。
💡 教训 4:执行
rm之前,先用ls看一下会匹配到什么文件。别相信我,我错了。
重新生成吧。
{"code":"Throttling.RateQuota","message":"Requests rate limit exceeded."}真相:阿里云百炼有请求频率限制,大概是每分钟 10-15 次。连续请求会被限流。
解决方案:在请求之间加 sleep 5,等 5 秒再发下一个。
💡 教训 5:批量生成时要控制节奏,别把 API 打挂了。
踩完这些坑,我搞了个靠谱的脚本:
#!/bin/bash
# 生成并保存图片的脚本
generate_and_save() {
local prompt="$1"
local output="$2"
# 生成图片,输出到临时文件
curl -s --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--data "{
\"model\": \"qwen-image-2.0-pro\",
\"input\": {
\"messages\": [{\"role\": \"user\", \"content\": [{\"text\": \"$prompt\"}]}]
},
\"parameters\": {\"n\": 1, \"watermark\": false, \"size\": \"1280*720\"}
}" > /tmp/img.json
# 提取 URL
URL=$(grep -o '"image":"[^"]*"' /tmp/img.json | cut -d'"' -f4)
# 立即下载
curl -L "$URL" -o "$output"
# 验证文件
if [ -f "$output" ] && [ $(stat -f%z "$output") -gt 10000 ]; then
echo "✅ 保存成功:$output"
else
echo "❌ 保存失败:$output"
exit 1
fi
}
# 使用示例
generate_and_save "Notion 风格手绘插画,纯黄色线条,中央大标题 Harness Engineering" \
"/Users/wangc/Pictures/AI 生图库/01-封面.png"
# 等 5 秒避免限流
sleep 5核心原则:
生成后立即提取 URL
立即下载到本地
验证文件大小(大于 10KB 才算成功)
每张图之间 sleep 5
一下午,10 张信息图,全部搞定:
总计:11MB,16:9 比例,Notion 手绘风格。
通义万相 qwen-image-2.0-pro 的定价大概是 ¥0.12/张。
第一次生成 10 张:¥1.2(URL 过期,浪费)
第二次生成 10 张:¥1.2(手贱删了,浪费)
第三次生成 10 张:¥1.2(成功保存)
总成本:¥3.6 有效成本:¥1.2 浪费成本:¥2.4
钱不多,但心疼。主要是耽误时间。
先开通服务 — 别拿到 Key 就直接用,先去控制台确认服务已开通
找对 API 文档 — 阿里云的文档太分散了,一定要找到对应服务的准确页面
立即保存 — 临时 URL 有效期很短,生成后马上下载
批量要限流 — 加 sleep,别把 API 打挂了
rm 之前先 ls — 这个最重要,血的教训
自动化流程第一次肯定有坑,预算要留够。 这次浪费了 ¥2.4,下次就不会了。
这个流程还能改进:
提示词模板化 — 把 Notion 风格的提示词做成模板,复用
失败重试 — 生成失败自动重试,别手动来
质量检查 — 生成的图太丑要能识别出来
批量队列 — 一次提交 10 个任务,异步生成
但这些,等下次吧。
今天先到这里,下班。
最后:
自动化不是银弹,第一次肯定比手动慢。 但跑通之后,边际成本趋近于零。 这大概就是工程师的价值吧。