generate - 生成示例参考
GenerateModel 是非常自由的一个接口,本质是组装一个 http post 请求,并尝试解析响应内容。但仍然有大量的 ai 模型无法覆盖(花样太多了),可使用 HttpUtils 直接请求。
一般涉及图片、声音、视频的生成,都会比较慢。所以大多平台都是异步的,生成结果是个 taskUrl 拼装的地址。
1、示例:输入文本,生成图片
import org.junit.jupiter.api.Test;
import org.noear.solon.ai.generate.GenerateModel;
import org.noear.solon.ai.generate.GenerateResponse;
@Test
public void case1_text2image() throws IOException {
//生成图片
String apiUrl = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text2image/image-synthesis";
String taskUrl = "https://dashscope.aliyuncs.com/api/v1/tasks/";
GenerateModel generateModel = GenerateModel.of(apiUrl)
.apiKey(apiKey)
.taskUrl(taskUrl)
.model("wanx2.1-t2i-turbo")
.headerSet("X-DashScope-Async", "enable")
.build();
//一次性返回
GenerateResponse resp = generateModel.prompt("a white siamese cat")
.options(o -> o.size("1024x1024"))
.call();
//打印消息
log.info("{}", resp.getContent());
assert resp.getContent().getUrl() != null;
assert resp.getContent().getUrl().startsWith("https://");
}
2、示例:输入图片,生成新图片(调整图片)
import org.junit.jupiter.api.Test;
import org.noear.solon.ai.generate.GenerateModel;
import org.noear.solon.ai.generate.GenerateResponse;
@Test
public void case2_image2image() throws IOException {
//编辑图片
String apiUrl = "https://dashscope.aliyuncs.com/api/v1/services/aigc/image2image/image-synthesis";
String taskUrl = "https://dashscope.aliyuncs.com/api/v1/tasks/";
GenerateModel generateModel = GenerateModel.of(apiUrl)
.apiKey(apiKey)
.taskUrl(taskUrl)
.model("wanx2.1-imageedit")
.headerSet("X-DashScope-Async", "enable")
.build();
GenerateResponse resp = generateModel.prompt(GeneratePrompt.ofKeyValues(
"function", "stylization_all",
"prompt", "转换成法国绘本风格",
"base_image_url", "http://wanx.alicdn.com/material/20250318/stylization_all_1.jpeg")
)
.options(o -> o.optionAdd("n", 1))
.call();
log.warn("{}", resp.getData());
assert resp.getContent().getUrl() != null;
assert resp.getContent().getUrl().startsWith("https://");
}
3、示例:输入文本,输出声音(音乐)
import org.junit.jupiter.api.Test;
import org.noear.solon.ai.generate.GenerateModel;
import org.noear.solon.ai.generate.GenerateResponse;
@Test
public void case3_music() throws IOException {
String apiUrl = "https://ai.gitee.com/v1/async/music/generations";
String taskUrl = "https://ai.gitee.com/v1/task/";
GenerateModel generateModel = GenerateModel.of(apiUrl)
.apiKey(apiKey)
.taskUrl(taskUrl)
.model("ACE-Step-v1-3.5B")
.build();
//一次性返回
GenerateResponse resp = generateModel.prompt(GeneratePrompt.ofKeyValues(
"prompt", "大海的哥",
"task", "text2music"
))
.call();
log.warn("{}", resp.getData());
assert resp.getContent().getUrl() != null;
assert resp.getContent().getUrl().startsWith("https://");
}
4、示例:输入文本,生成视频
import org.junit.jupiter.api.Test;
import org.noear.solon.ai.generate.GenerateModel;
import org.noear.solon.ai.generate.GenerateResponse;
@Test
public void case4_video() throws IOException {
//生成动画
String apiUrl = "https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis";
String taskUrl = "https://dashscope.aliyuncs.com/api/v1/tasks/";
GenerateModel generateModel = GenerateModel.of(apiUrl)
.apiKey(apiKey)
.taskUrl(taskUrl)
.model("wan2.2-i2v-plus")
.headerSet("X-DashScope-Async", "enable")
.build();
GenerateResponse resp = generateModel.prompt(GeneratePrompt.ofKeyValues(
"prompt", "一只猫在草地上奔跑",
"img_url", "https://cdn.translate.alibaba.com/r/wanx-demo-1.png")
)
.options(o -> o.optionAdd("resolution", "480P")
.optionAdd("prompt_extend", true))
.call();
log.warn("{}", resp.getData());
assert resp.getContent().getUrl() != null;
assert resp.getContent().getUrl().startsWith("https://");
}