码森林 - AI 赋以翼,赋 AI 以魂

用了一下午浪费¥2.4,我终于跑通了自动化生图

2026/03/27
4
0

事情是这样的,老板说要搞一套信息图自动生成流程,我心想这有啥难的,结果…


01 接到任务

周五下午 3 点,老板把我叫过去:

"咱们那篇 Harness Engineering 的文章不错,做成信息图发小红书吧。"

"行,我找设计师排期。"

"不用,你搞个自动化流程,以后每篇文章都能用。"

…行吧,自己挖的坑自己填。


02 第一步就卡住了

我寻思着阿里云百炼有图像生成 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,开通前看清楚文档。


03 第二个坑:端点格式

换了 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 文档分散在多个页面,一定要找到对应服务的准确文档,别信示例代码。


04 第三个坑:URL 过期

终于生成成功了!返回了图片 URL:

https://dashscope-7c2c.oss-accelerate.aliyuncs.com/.../xxx.png?Expires=1775210221&...

我心想太好了,赶紧发群里给老板看。

3 分钟后:图片打不开了。

真相:OSS 返回的是临时签名 URL,有效期很短(大概 5-10 分钟)。你不及时下载,链接就废了。

💡 教训 3:生成的图片必须立即保存到本地,别依赖临时 URL。


05 第四个坑:手贱删文件

这个坑是我自己挖的,也是最贵的一个坑。

当时我已经生成了 10 张图,但有些文件名不对,我想清理一下:

rm "/Users/wangc/Pictures/AI 生图库/"*.png

然后整个世界安静了。

10 张图,全没了。

原因是通配符匹配了所有 PNG 文件,包括刚生成的。

💡 教训 4:执行 rm 之前,先用 ls 看一下会匹配到什么文件。别相信我,我错了。


06 第五个坑:API 限流

重新生成吧。

{"code":"Throttling.RateQuota","message":"Requests rate limit exceeded."}

真相:阿里云百炼有请求频率限制,大概是每分钟 10-15 次。连续请求会被限流。

解决方案:在请求之间加 sleep 5,等 5 秒再发下一个。

💡 教训 5:批量生成时要控制节奏,别把 API 打挂了。


07 最终方案

踩完这些坑,我搞了个靠谱的脚本:

#!/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

核心原则

  1. 生成后立即提取 URL

  2. 立即下载到本地

  3. 验证文件大小(大于 10KB 才算成功)

  4. 每张图之间 sleep 5


08 成果

一下午,10 张信息图,全部搞定:

编号

文件名

大小

01

01-封面.png

1.0M

02

02-OpenAI 案例.png

1.3M

03

03-马具比喻.png

1.2M

04

04-三大支柱.png

1.0M

05

05-上下文工程.png

1.1M

06

06-架构约束.png

1.1M

07

07-熵管理.png

1.2M

08

08-实操指南.png

1.0M

09

09-思维转变.png

1.2M

10

10-开始构建.png

1.2M

总计:11MB,16:9 比例,Notion 手绘风格。


09 成本核算

通义万相 qwen-image-2.0-pro 的定价大概是 ¥0.12/张。

  • 第一次生成 10 张:¥1.2(URL 过期,浪费)

  • 第二次生成 10 张:¥1.2(手贱删了,浪费)

  • 第三次生成 10 张:¥1.2(成功保存)

总成本:¥3.6 有效成本:¥1.2 浪费成本:¥2.4

钱不多,但心疼。主要是耽误时间。


10 经验总结

给要接入图像生成 API 的同学:

  1. 先开通服务 — 别拿到 Key 就直接用,先去控制台确认服务已开通

  2. 找对 API 文档 — 阿里云的文档太分散了,一定要找到对应服务的准确页面

  3. 立即保存 — 临时 URL 有效期很短,生成后马上下载

  4. 批量要限流 — 加 sleep,别把 API 打挂了

  5. rm 之前先 ls — 这个最重要,血的教训

给老板的:

自动化流程第一次肯定有坑,预算要留够。 这次浪费了 ¥2.4,下次就不会了。


11 后续优化

这个流程还能改进:

  1. 提示词模板化 — 把 Notion 风格的提示词做成模板,复用

  2. 失败重试 — 生成失败自动重试,别手动来

  3. 质量检查 — 生成的图太丑要能识别出来

  4. 批量队列 — 一次提交 10 个任务,异步生成

但这些,等下次吧。

今天先到这里,下班。


最后

自动化不是银弹,第一次肯定比手动慢。 但跑通之后,边际成本趋近于零。 这大概就是工程师的价值吧。