云
6 小时以前 95ae0c83d2aa58d86b4039e3f7f16ee93afb8f00
yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/api/chat/AiChatApiImpl.java
@@ -2,6 +2,7 @@
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.module.ai.dal.dataobject.model.AiModelDO;
import cn.iocoder.yudao.module.ai.enums.model.AiModelCapabilityEnum;
import cn.iocoder.yudao.module.ai.enums.model.AiModelTypeEnum;
import cn.iocoder.yudao.module.ai.service.model.AiModelService;
import jakarta.annotation.Resource;
@@ -17,6 +18,9 @@
import java.util.Base64;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.ai.enums.ErrorCodeConstants.MODEL_VISION_NOT_ENABLED;
@Service
@Slf4j
@@ -40,13 +44,13 @@
    @Override
    public String chatWithImage(String systemPrompt, String userMessage, String imageBase64, String mimeType) {
        // 优先选择视觉模型(模型名含 vl),否则回退到默认对话模型
        List<AiModelDO> chatModels = modelService.getModelListByStatusAndType(
                CommonStatusEnum.ENABLE.getStatus(), AiModelTypeEnum.CHAT.getType(), null);
        AiModelDO visionModel = chatModels.stream()
                .filter(m -> m.getModel() != null && m.getModel().contains("vl"))
        // 图片识别必须走视觉能力的模型:文本模型不接受图片输入,回退过去只会报错
        AiModelDO visionModel = modelService.getModelListByStatusAndType(
                        CommonStatusEnum.ENABLE.getStatus(), AiModelTypeEnum.CHAT.getType(), null)
                .stream()
                .filter(m -> AiModelCapabilityEnum.VISION.getCapability().equals(m.getCapability()))
                .findFirst()
                .orElseGet(() -> modelService.getRequiredDefaultModel(AiModelTypeEnum.CHAT.getType()));
                .orElseThrow(() -> exception(MODEL_VISION_NOT_ENABLED));
        ChatModel chatModel = modelService.getChatModel(visionModel.getId());
        byte[] imageBytes = Base64.getDecoder().decode(imageBase64);