Solon AI 开发学习18 - generate - 生成示例参考

GenerateModel 是非常自由的一个接口,本质是组装一个 http post 请求,并尝试解析响应内容。但仍然有大量的 ai 模型无法覆盖(花样太多了),可使用 HttpUtils 直接请求。

一般涉及图片、声音、视频的生成,都会比较慢。所以大多平台大多是异步的,生成结果一般会是个 taskUrl 拼装的地址(也会有 base64 输出)。

1、示例:输入文本,生成图片

java 复制代码
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、示例:输入图片,生成新图片(调整图片)

java 复制代码
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、示例:输入文本,输出声音(音乐)

java 复制代码
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、示例:输入文本,生成视频

java 复制代码
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://");
}
相关推荐
Elastic 中国社区官方博客2 分钟前
Elastic 的 AI agent skills
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
TENSORTEC腾视科技21 分钟前
腾视科技AI大模型应用:提效、破局与落地,重塑智能新生态
人工智能·科技·安全·ai·ai大模型·无人叉车及智能调度系统解决方案
DigitalOcean1 小时前
既要 LLM 推理性能可预测,又要成本可控?专用推理了解一下
llm·agent
weixin_699602442 小时前
CoQA 数据集介绍
ai
Lyon198505282 小时前
《文字定律》AI读后感来自——ChatGPT
人工智能·ai·语言模型·chatgpt·生命
Elastic 中国社区官方博客2 小时前
Elasticsearch 9.4 为 Elastic AI 生态系统的下一阶段提供支持:Dell AI Data Platform(与 NVIDIA 合作)
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
用户69371750013842 小时前
Hermes + DeepSeek:AI 真的开始帮我维护 Linux 了
llm·ai编程
却尘3 小时前
Tool Use 到底能保证什么?搞懂这条边界,你的 LLM 提取再也不会"格式炸了"
gpt·chatgpt·claude
ZFSS3 小时前
PixVerse 视频生成 API 实战教程
人工智能·ai·ai作画·音视频·ai编程
Agent产品评测局4 小时前
传统RPAvsAI Agent,制造业生产场景能力对比详解 —— 2026企业级自动化选型全景盘点
运维·人工智能·ai·chatgpt·自动化