魔搭大模型API接入
·
注册及登录
网址:https://www.modelscope.cn/
1、注册账号(绑定阿里云账号)
2、阿里云实人认证
3、复制API key
注意
1、该网址目前整合了很多开源的大模型
2、网址中的模型有一部分支持API接入
3、大多数模型都支持本地部署,可以更灵活的运用模型
本次示例使用API的方式接入,接入的模型为文生图片:Tongyi-MAI/Z-Image-Turbo
接入示例
- 前端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);
}
};
- 后端Controller
/**
* 文字生图片
*/
@GetMapping("/textToImage")
@Anonymous
public R<String> textToImage(String model, String prompt, String negativePrompt)
{
return R.ok(iLargeModelIntegrationService.textToImage(model, prompt, negativePrompt));
}
- 后端service
/**
* 跟据提示词生成图片
* @param model 模型
* @param prompt 正向提示词
* @param negativePrompt 反向提示词
* @return 图片URL
*/
String textToImage(String model, String prompt, String negativePrompt);
- 后端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);
}
- 后端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调用异常");
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)