注册及登录

网址:https://www.modelscope.cn/
1、注册账号(绑定阿里云账号)
2、阿里云实人认证
3、复制API key

注意

1、该网址目前整合了很多开源的大模型
2、网址中的模型有一部分支持API接入
进行筛选
3、大多数模型都支持本地部署,可以更灵活的运用模型
本次示例使用API的方式接入,接入的模型为文生图片:Tongyi-MAI/Z-Image-Turbo

接入示例

  1. 前端JS代码
const handleGenerate = async () => {
    // 清空之前的错误和图片
    setErrorMsg('');
    if (!prompt.trim()) {
      setErrorMsg('请输入正向提示词');
      return;
    }

    setLoading(true);
    setGeneratedImage('');

    try {
      // 1. 构建GET请求参数(编码特殊字符,避免URL解析错误)
      const params = new URLSearchParams();
      params.append('model', selectedModel);
      params.append('prompt', encodeURIComponent(prompt.trim())); // 编码中文/特殊字符
      params.append('negativePrompt', encodeURIComponent(negativePrompt.trim()));

      // 2. 拼接请求URL(参数拼接到query中)
      const requestUrl = `http://localhost:8080/large/model/textToImage?${params.toString()}`;

      // 3. 发起GET请求
      const response = await fetch(requestUrl, {
        method: 'GET',
        headers: {
//           'Authorization': `Bearer ${apiKey}`, // 携带API Key(后端需要则保留)
          'Accept': 'application/json' // 声明接收JSON格式
        }
      });

      // 4. 解析响应
      const result: TextToImageResponse = await response.json();

      // 5. 处理响应结果
      if (!response.ok || result.code !== 200) {
        throw new Error(result.msg || `请求失败:${response.status}`);
      }

      // 设置生成的图片URL
      if (result.data) {
        setGeneratedImage(result.data);
      } else {
        throw new Error('未返回有效图片URL');
      }

    } catch (error) {
      // 捕获错误并提示
      const errMsg = error instanceof Error ? error.message : '生成图片失败,请重试';
      setErrorMsg(errMsg);
      console.error('Generation failed:', error);
    } finally {
      setLoading(false);
    }
  };
  1. 后端Controller
	/**
     * 文字生图片
     */
    @GetMapping("/textToImage")
    @Anonymous
    public R<String> textToImage(String model, String prompt, String negativePrompt)
    {
        return R.ok(iLargeModelIntegrationService.textToImage(model, prompt, negativePrompt));
    }
  1. 后端service
/**
     * 跟据提示词生成图片
     * @param model 模型
     * @param prompt 正向提示词
     * @param negativePrompt 反向提示词
     * @return 图片URL
     */
    String textToImage(String model, String prompt, String negativePrompt);
  1. 后端serviceImpl
@Override
    public String textToImage(String model, String prompt, String negativePrompt) {
    	//由于该模型对英语的支持更好,采用翻译模型,将提示词翻译成英语再生成图片
    	private static final String PREFIX_PROMPT = "将以下文字翻译成英文: ";
        prompt = textGeneration("qwen-plus", PREFIX_PROMPT + prompt);
        return LargeModelIntegration.generationImageSD15(prompt, negativePrompt, 1);
    }
  1. 后端LargeModelIntegration工具类
	public static String generationImageSD15(String prompt, String negativePrompt, Integer n) {
        // 1. 参数校验(与原有风格一致)
        Assert.isTrue(StringUtils.isNotBlank(prompt), "请输入正向提示词");
        Assert.isTrue(n == null || (n >= 1 && n <= 4), "生成图片数量需为1-4");

        // 2. 参数兜底处理
        String finalNegativePrompt = StringUtils.isBlank(negativePrompt) ? "" : negativePrompt;
        int finalN = n == null ? 1 : n;

        // 3. 构建请求头
        Map<String,String> headers=new HashMap<>();
        headers.put("Authorization","Bearer " + MODEL_SCOPE_API_KEY);
        headers.put("Content-Type", "application/json");

        // 4. 封装请求参数
        JSONObject param=new JSONObject();
        param.put("model", MODEL_SCOPE_MODEL_ID); // 固定模型ID
        param.put("prompt", prompt);
        param.put("negative_prompt", finalNegativePrompt);
        param.put("width", 512);
        param.put("height", 512);
        param.put("n", finalN);
        param.put("response_format", "url"); // 返回URL格式
        try {
            // 5. 日志打印(与原有风格一致)
            log.info("请求LargeModelIntegration#generationImageSD15入参:prompt:{}, negativePrompt:{}",
                    URLDecoder.decode(prompt, StandardCharsets.UTF_8),  URLDecoder.decode(negativePrompt, StandardCharsets.UTF_8));
            String result = HttpUtil.postJson(headers, param.toJSONString());
            log.info("请求LargeModelIntegration#generationImageSD15出参:"+result);

            // 解析响应
            JSONObject resultJson=JSONObject.parseObject(result);
            // 异常处理
            if (resultJson.containsKey("error")) {
                String errorMsg = resultJson.getJSONObject("error").getString("message");
                log.error("generationImageSD15调用失败:{}", errorMsg);
                throw new RuntimeException("generationImageSD15调用失败:" + errorMsg);
            }
            // 返回第一张图片URL
            return resultJson.getJSONArray("images").getJSONObject(0).getString("url");
        }catch (Exception e){
            log.error("LargeModelIntegration#generationImageSD15调用异常"+e);
            throw new RuntimeException("LargeModelIntegration#generationImageSD15调用异常");
        }
    }
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐