perf(similarasin): LLM 输入图转存前压缩,规避网关拉图超时

- 主图/拼图转存 MinIO supply_images 前统一走 SimilarAsinImageEmbedder.resizeImage
  (长边 1280 / JPEG q0.75 / 迭代降质至 ≤150KB),体积 1~5MB → 100~300KB
- 根因:LLM 网关按 URL 拉取 OSS 图片,原图过大偶发 context deadline exceeded
  (convert_request_failed),27117 等任务 1 行 LLM 500 即整任务卡死
- 压缩失败降级原字节不阻断行处理;压缩前后字节数 INFO 日志便于线上排查
- SimilarAsinImageEmbedder.resizeImage 由包私有改 public 供复用
This commit is contained in:
2026-09-07 22:28:13 +08:00
parent 83e38d4278
commit abcfa5bef7
4 changed files with 38 additions and 5 deletions
@@ -10,6 +10,7 @@ import com.nanri.aiimage.modules.productcategory.service.ProductCategoryService;
import com.nanri.aiimage.modules.similarasin.client.SimilarAsinLlmClient;
import com.nanri.aiimage.modules.similarasin.model.dto.SimilarAsinResultRowDto;
import com.nanri.aiimage.modules.similarasin.util.PuzzleImageMerger;
import com.nanri.aiimage.modules.similarasin.util.SimilarAsinImageEmbedder;
import org.mockito.Mockito;
import java.io.File;
@@ -99,7 +100,8 @@ public class SimilarAsinLlmLocalVerify {
}).when(categoryService).children(Mockito.any(), Mockito.anyLong(), Mockito.anyLong());
SimilarAsinLlmService service = new SimilarAsinLlmService(
client, props, ossProps, categoryService, merger, oss);
client, props, ossProps, categoryService, merger, oss,
new SimilarAsinImageEmbedder(props, oss));
long start = System.currentTimeMillis();
List<SimilarAsinResultRowDto> result = service.inspectRows(rows, null, apiKey, imgSwitch, categorySwitch);
@@ -9,6 +9,7 @@ import com.nanri.aiimage.modules.productcategory.service.ProductCategoryService;
import com.nanri.aiimage.modules.similarasin.client.SimilarAsinLlmClient;
import com.nanri.aiimage.modules.similarasin.model.dto.SimilarAsinResultRowDto;
import com.nanri.aiimage.modules.similarasin.util.PuzzleImageMerger;
import com.nanri.aiimage.modules.similarasin.util.SimilarAsinImageEmbedder;
import org.junit.jupiter.api.Test;
import javax.imageio.ImageIO;
@@ -76,7 +77,8 @@ class SimilarAsinLlmServiceTest {
mock(OssProperties.class),
categoryService,
merger,
ossStorage);
ossStorage,
mock(SimilarAsinImageEmbedder.class));
svc.setDownloadHttpClientForTest(mockHttpClient());
return svc;
}