使用spring ai alibaba报错:Exception: 400 “message“:“url error, please check url!“

75 阅读1分钟

问题:

在调用多模态大模型时报错: Exception: 400 - {"request_id":"xxx","code":"InvalidParameter","message":"url error, please check url! For details, see: help.aliyun.com/zh/model-st…

根据官方文档设置multiModel并更新SDK仍无法解决

原因:

虽然启用了 multiModel 选项,但底层 DashScopeApi 默认仍使用普通文本模型的请求路径(如 /v1/chat/completions),而多模态模型需使用专用端点 /api/v1/services/aigc/multimodal-generation/generation。

解决办法:

对于多模态模型,在ChatModel的dashScopeApi额外设置一条参数:

@Bean("imageAgent")
public ReactAgent imageAgent() {

    ChatModel chatModel = DashScopeChatModel.builder()
            .dashScopeApi(DashScopeApi.builder()
                    .apiKey(System.getenv("AI_DASHSCOPE_API_KEY"))
                    // 额外设置专用端点
                    .completionsPath("/api/v1/services/aigc/multimodal-generation/generation")
                    .build())
            .defaultOptions(DashScopeChatOptions.builder()
                    .multiModel(true)
                    .model(model)
                    .build())
            .build();
    return ReactAgent.builder()
            .name("xxx")
            .model(chatModel)
            .saver(redisSaver)
            .instruction("You are a helpful assistant.")
            .build();
}

即可正常使用:

image.png

@GetMapping(value = "/memory/chat/image")
@Operation(summary = "memory/chat/image")
public String doChatImage(@RequestParam(name = "question", defaultValue = "描述这个图片") String question,
                          @RequestParam String memoryId) throws Exception{

    RunnableConfig config = RunnableConfig.builder()
            .threadId(memoryId)
            .build();

    URI uri = URI.create("https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg");

    UserMessage userMessage = UserMessage.builder()
            .media(Media.builder()
                    .mimeType(MimeTypeUtils.IMAGE_JPEG)
                    .data(uri)
                    .build())
            .text(question)
            .build();

    return imageAgent.call(userMessage, config).getText();
}

解决方法来源github.com/alibaba/spr…