一、问题描述
1、异常信息
java.lang.RuntimeException: Image generation still pending at com.alibaba.cloud.ai.dashscope.image.DashScopeImageModel.lambda$call$1(DashScopeImageModel.java:165)~[spring-ai-alibaba-core-1.0.0.2.jar:1.0.0.2]at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:357)~[spring-retry-2.0.12.jar:na]at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:246)~[spring-retry-2.0.12.jar:na]at com.alibaba.cloud.ai.dashscope.image.DashScopeImageModel.lambda$call$3(DashScopeImageModel.java:149)~[spring-ai-alibaba-core-1.0.0.2.jar:1.0.0.2]at io.micrometer.observation.Observation.observe(Observation.java:564)~[micrometer-observation-1.15.3.jar:1.15.3]at com.alibaba.cloud.ai.dashscope.image.DashScopeImageModel.call(DashScopeImageModel.java:147)~[spring-ai-alibaba-core-1.0.0.2.jar:1.0.0.2]at com.atguigu.study.controller.Text2ImageController.image(Text2ImageController.java:49)~[classes/:na]at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)~[na:na]二、解决办法
这个java.lang.RuntimeException: Image generation still pending错误通常出现在使用Spring AI Alibaba调用阿里云的文生图(Image Generation)服务时。
这并不是代码本身的逻辑错误,而是服务端处理状态的一种反馈。简单来说,你的请求已经成功发送到阿里云,但图片生成任务过于复杂或排队人数较多,服务端在规定的时间内没有完成处理,因此返回了“仍在处理中”的状态。
以下是导致此问题的常见原因及解决方案:
1. 核心原因:同步调用超时
Spring AI 默认使用的是同步调用模式。这意味着你的 Java 程序会一直阻塞等待,直到服务端返回结果或超时。
- 现象:如果图片生成时间超过了 Spring AI 客户端设置的读取超时时间(Read Timeout),客户端就会抛出异常,提示任务仍在等待(pending)。
- 解决方案:
- 增加超时时间:在配置文件(
application.yml或application.properties)中增加 HTTP 客户端的超时设置,给服务端更多的时间来处理。spring:ai:dashscope:# 增加连接超时和读取超时,单位毫秒(例如设置为 60 秒)connect-timeout:60000read-timeout:60000 - 改用异步调用:如果使用的是支持异步的版本,可以使用
ImageModel.callAsync()方法,避免阻塞主线程。
- 增加超时时间:在配置文件(
2. 模型负载或网络波动
- 原因:阿里云的免费或共享模型资源(如
wanx-v1系列)在高峰期可能存在排队现象。此外,如果网络不稳定,数据传输慢也会导致看似“挂起”的状态。 - 解决方案:
- 重试机制:在代码中加入重试逻辑(例如使用 Spring Retry),当捕获到此异常时自动重试几次。
- 检查网络:确保你的服务器或本地环境可以顺畅访问阿里云的服务(
dashscope.aliyuncs.com)。
3. 请求参数复杂度过高
- 原因:如果你请求的图片分辨率极高(如 1024x1024 或更高),或者提示词(Prompt)非常复杂,模型推理时间会显著增加,容易触发超时。
- 解决方案:
- 尝试降低图片分辨率(如先试用 512x512)。
- 简化提示词,看是否能快速出图。
4. 版本兼容性问题
- 原因:你使用的 Spring AI Alibaba 版本可能对视频或图像生成任务的处理逻辑尚不完善(特别是早期的 SNAPSHOT 版本)。
- 解决方案:
- 检查你的
pom.xml或build.gradle,尝试升级到最新的稳定版本。 - 参考官方示例代码,确认配置方式是否正确(例如是否正确配置了
DashScopeImageOptions)。
- 检查你的
💡 建议的排查步骤
- 先测通断:写一个最简单的“你好”文字生成图片的请求,看是否还会报错。如果简单请求正常,复杂请求报错,那就是超时问题。
- 调整配置:优先在配置文件中增加
read-timeout的时间。 - 查看文档:确认你使用的模型(Model)是否支持同步快速返回,或者是否必须使用异步任务模式。