AIGC盛行,带你轻松调用开发

文章目录

  • 前言
  • 一、📖AIGC简介
  • 二、📣开通体验
    • 开通模型获取API-KEY
  • 三、📝基于java实现调用
    • 1.设置API-KEY
    • 2.体验大语言模型
      • 多轮对话演示
      • 补充流式输出
    • 3.体验通义千问VL
      • 使用官方提供照片
      • 本地文件
      • 多轮对话
      • 流式输出
  • 总结


前言

本篇文章基于java和阿里云的通义千问大模型手把手带你使用AIGC开发,实现文本对话和图像分析。


一、📖AIGC简介

你知道什么是AIGC吗?不知道?没关系,我来告诉你:

  • AIGC就是由AI自动创作生成的内容(AI Generated Content),比如图片、视频、音乐、文字等。AIGC就像一支神奇的画笔,拥有无限的创造力。这支画笔的特别之处在于,它是由AI打造的。AI利用它的理解力、想象力和创作力,根据指定的需求和风格,创作出各种内容:文章、短篇小说、报告、音乐、图像,甚至是视频。AIGC的出现,打开了一个全新的创作世界,为人们提供了无数的可能性
  • AI,就是人工智能。它的目标是让机器能够像人一样有智能,能够看、听、说、想、做。要实现这个目标,AI需要用到重要的技术:深度学习NLP(自然语言处理)神经网络生成式对抗网络(GAN)

🌤️通过上面的讲诉,无论你曾经不知道还是模棱两可,现在应该大概了解了,下面带你走进AIGC,用程序员的身份打开AIGC。

二、📣开通体验

开通模型获取API-KEY

大家不要害怕开通不会产生收费,本文讲述的完全是免费就可使用的方法。

登录阿里云进入控制台后,鼠标移到下图位置

在这里插入图片描述

然后出现如下界面,找到人工智能与机器学习下的模型服务灵积,点击

在这里插入图片描述

参照开发文档,开通DashScope并创建API-KEY

在这里插入图片描述

总结文档上的开通步骤如下:

在控制台中点击总览,去开通

在这里插入图片描述
立开通(大家不要怕,这是不会产生扣费的)
在这里插入图片描述
开通后,点击 管理中心 的 API-KEY 菜单项,然后创建新的API-KEY
在这里插入图片描述
就会有个Accesskeyid和Secret值(这俩值要记住真正的开发中有用,本文章没用到)的弹窗,然后点击已创建的AIP-KEY查看并复制,这个会用到。

在这里插入图片描述

在这里插入图片描述

三、📝基于java实现调用

📣打开IDEA,开始操作了

1.设置API-KEY

先了解以下如何设置API-KEY值的:

import com.alibaba.dashscope.utils.Constants;
Constants.apiKey="这就是你的API-KEY的值(上面复制的)";

2.体验大语言模型

多轮对话演示

创建一个测试类:
在这里插入图片描述
代码如下:

import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.aigc.generation.models.QwenParam;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.MessageManager;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import org.mockito.internal.matchers.Contains;import java.awt.*;class test {public static void callWithMessage()throws NoApiKeyException, ApiException, InputRequiredException {// 设置API-KEY值Constants.apiKey="你的API-KEY值";Generation gen = new Generation();MessageManager msgManager = new MessageManager(10);Message systemMsg =Message.builder().role(Role.SYSTEM.getValue()).content("You are a helpful assistant.").build();//告知模型他是个助手(设置角色)Message userMsg = Message.builder().role(Role.USER.getValue()).content("你好,周末去哪里玩?").build();//对话问题msgManager.add(systemMsg);msgManager.add(userMsg);QwenParam param =QwenParam.builder().model(Generation.Models.QWEN_PLUS).messages(msgManager.get()).resultFormat(QwenParam.ResultFormat.MESSAGE).topP(0.8).enableSearch(true).build();GenerationResult result = gen.call(param);System.out.println(result);//输出回复msgManager.add(result);System.out.println(JsonUtils.toJson(result));//JSON格式输出回复param.setPrompt("找个近点的");//继续问题param.setMessages(msgManager.get());result = gen.call(param);System.out.println(result);System.out.println(JsonUtils.toJson(result));}public static void main(String[] args){try {callWithMessage();} catch (ApiException | NoApiKeyException | InputRequiredException e) {System.out.println(e.getMessage());}System.exit(0);}
}

上诉代码就是向模型提问周末去哪玩,模型给出回复后,又继续说让他说个近点的地方

在这里插入图片描述
在这里插入图片描述

补充流式输出

import java.util.Arrays;
import java.util.concurrent.Semaphore;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.aigc.generation.models.QwenParam;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.ResultCallback;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;
import io.reactivex.Flowable;
import com.alibaba.dashscope.utils.Constants;public class Main {public static void streamCallWithMessage()throws NoApiKeyException, ApiException, InputRequiredException {Constants.apiKey="你的API-KEY值";Generation gen = new Generation();Message userMsg = Message.builder().role(Role.USER.getValue()).content("如何做西红柿炖牛腩?").build();QwenParam param =QwenParam.builder().model(Generation.Models.QWEN_PLUS).messages(Arrays.asList(userMsg)).resultFormat(QwenParam.ResultFormat.MESSAGE).topP(0.8).enableSearch(true).incrementalOutput(true) // get streaming output incrementally.build();Flowable<GenerationResult> result = gen.streamCall(param);StringBuilder fullContent = new StringBuilder();result.blockingForEach(message -> {fullContent.append(message.getOutput().getChoices().get(0).getMessage().getContent());System.out.println(JsonUtils.toJson(message));});System.out.println("Full content: \n" + fullContent.toString());}public static void streamCallWithCallback()throws NoApiKeyException, ApiException, InputRequiredException,InterruptedException {Generation gen = new Generation();Message userMsg = Message.builder().role(Role.USER.getValue()).content("如何做西红柿炖牛腩?").build();QwenParam param = QwenParam.builder().model(Generation.Models.QWEN_PLUS).resultFormat(QwenParam.ResultFormat.MESSAGE).messages(Arrays.asList(userMsg)).topP(0.8).incrementalOutput(true) // get streaming output incrementally.build();Semaphore semaphore = new Semaphore(0);StringBuilder fullContent = new StringBuilder();gen.streamCall(param, new ResultCallback<GenerationResult>() {@Overridepublic void onEvent(GenerationResult message) {fullContent.append(message.getOutput().getChoices().get(0).getMessage().getContent());System.out.println(message);}@Overridepublic void onError(Exception err){System.out.println(String.format("Exception: %s", err.getMessage()));semaphore.release();}@Overridepublic void onComplete(){System.out.println("Completed");semaphore.release();}});semaphore.acquire();System.out.println("Full content: \n" + fullContent.toString());}public static void main(String[] args) {try {streamCallWithMessage();} catch (ApiException | NoApiKeyException | InputRequiredException e) {System.out.println(e.getMessage());}try {streamCallWithCallback();} catch (ApiException | NoApiKeyException | InputRequiredException | InterruptedException e) {System.out.println(e.getMessage());}System.exit(0);}
}

3.体验通义千问VL

下面使用接口实现图片解析

使用官方提供照片

首先大家看一下官方提供的图片:
在这里插入图片描述

/*** @Version: 1.0.0* @Author: Dragon_王* @ClassName: test1* @Description: TODO描述* @Date: 2023/12/28 17:41*/import java.util.Arrays;
import java.util.Collections;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;class test1 {public static void simpleMultiModalConversationCall()throws ApiException, NoApiKeyException, UploadFileException {Constants.apiKey="你的api-key";MultiModalConversation conv = new MultiModalConversation();MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue()).content(Arrays.asList(Collections.singletonMap("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"),Collections.singletonMap("text", "这是什么?"))).build();// 对话的问题MultiModalConversationParam param = MultiModalConversationParam.builder().model(MultiModalConversation.Models.QWEN_VL_PLUS).message(userMessage).build();MultiModalConversationResult result = conv.call(param);System.out.println(result);}public static void main(String[] args) {try {simpleMultiModalConversationCall();} catch (ApiException | NoApiKeyException | UploadFileException e) {System.out.println(e.getMessage());}System.exit(0);}
}

在这里插入图片描述

本地文件

import java.util.Arrays;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.utils.Constants;public class MultiModalConversationLocalFile2 {/*** sample of use local file* Windows file format: file:///D:/test/images/test.png* Linux & Mac format: file://The_absolute_local_path* */public static void callWithLocalFile()throws ApiException, NoApiKeyException, UploadFileException {Constants.apiKey="你的api-key";String localFilePath = "file://The_file_absolute_path"; MultiModalConversation conv = new MultiModalConversation();// must create mutable map.MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue()).content(Arrays.asList(new HashMap<String, Object>(){{put("image", localFilePath);}}, new HashMap<String, Object>(){{put("text", "这是什么?");}})).build();// 对话问题MultiModalConversationParam param = MultiModalConversationParam.builder().model(MultiModalConversation.Models.QWEN_VL_PLUS).message(userMessage).build();Flowable<MultiModalConversationResult> result = conv.streamCall(param);result.blockingForEach(item -> {System.out.println(item);});}public static void main(String[] args) {try {callWithLocalFile();} catch (ApiException | NoApiKeyException | UploadFileException e) {System.out.println(e.getMessage());}System.exit(0);}
}

多轮对话

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;public class Main {private static final String modelName = "qwen-vl-plus";public static void MultiRoundConversationCall() throws ApiException, NoApiKeyException, UploadFileException {Constants.apiKey="你的api-key";MultiModalConversation conv = new MultiModalConversation();MultiModalMessage systemMessage = MultiModalMessage.builder().role(Role.SYSTEM.getValue()).content(Arrays.asList(Collections.singletonMap("text", "You are a helpful assistant."))).build();MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue()).content(Arrays.asList(Collections.singletonMap("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"), Collections.singletonMap("text", "图片里有什么动物?"))).build();// 第一个对话问题List<MultiModalMessage> messages = new ArrayList<>();messages.add(systemMessage);messages.add(userMessage);MultiModalConversationParam param = MultiModalConversationParam.builder().model(MultiModalConversationUsage2.modelName).messages(messages).build();MultiModalConversationResult result = conv.call(param);System.out.println(result);// add the result to conversationmessages.add(result.getOutput().getChoices().get(0).getMessage());MultiModalMessage msg = MultiModalMessage.builder().role(Role.USER.getValue()).content(Arrays.asList(Collections.singletonMap("text", "图片动物是什么?"))).build();// 第二个对话问题messages.add(msg);// new messagesparam.setMessages((List)messages);result = conv.call(param);System.out.print(result);}public static void main(String[] args) {try {MultiRoundConversationCall();} catch (ApiException | NoApiKeyException | UploadFileException e) {System.out.println(e.getMessage());}System.exit(0);

流式输出

只是输出采用的方式不一样

import java.util.Arrays;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.utils.Constants;public class MultiModalConversationStream {public static void streamCall()throws ApiException, NoApiKeyException, UploadFileException {Constants.apiKey="你的api-key";MultiModalConversation conv = new MultiModalConversation();// must create mutable map.MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue()).content(Arrays.asList(new HashMap<String, Object>(){{put("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg");}}, new HashMap<String, Object>(){{put("text", "基于这幅图,讲一个故事");}})).build();MultiModalConversationParam param = MultiModalConversationParam.builder().model(MultiModalConversation.Models.QWEN_VL_PLUS).message(userMessage).build();Flowable<MultiModalConversationResult> result = conv.streamCall(param);result.blockingForEach(item -> {System.out.println(item);});}public static void main(String[] args) {try {streamCall();} catch (ApiException | NoApiKeyException | UploadFileException e) {System.out.println(e.getMessage());}System.exit(0);}
}

总结

上面就是使用java调用通义千问大模型的案例,上诉代码都可以运行,如果想改变问题,就将对话问题修改就行。如果再自己写一个UI界面的话,你就拥有了自己的AIGC了(虽然是调用的API🌤️)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/683472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++的进阶泛型编程学习(1):函数模板的基本概念和机制

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、模板1.1 模板的概念1.1.1 形象的解释&#xff1a;模板就是通用的模具&#xff0c;目的是提高通用性1.1.1 模板的特点&#xff1a;1.1.2 综述模板的作用 1.2…

揭秘Angular世界的奥秘:全面提升你的前端开发技能!

介绍&#xff1a;Angular是一个由Google维护的开源JavaScript框架&#xff0c;专为构建Web应用程序而设计&#xff0c;特别适合开发大型单页应用&#xff08;SPA&#xff09;。以下是对Angular的详细介绍&#xff1a; 技术栈&#xff1a;Angular使用HTML作为模板语言&#xff0…

耳机壳UV树脂制作私模定制耳塞需要注意什么问题?

制作私模定制耳塞需要注意以下问题&#xff1a; 耳模制作&#xff1a;获取准确的耳模是制作私模定制耳塞的关键步骤。需要使用合适的材料和方法&#xff0c;确保耳模的准确性和稳定性。材料选择&#xff1a;选择合适的UV树脂和其它相关材料&#xff0c;确保它们的质量和性能符…

2024.2.15每日一题

LeetCode 二叉树的层序遍历 II 107. 二叉树的层序遍历 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&am…

SpringCloud-Hystrix:服务熔断与服务降级

8. Hystrix&#xff1a;服务熔断 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系&#xff0c;每个依赖关系在某些时候将不可避免失败&#xff01; 8.1 服务雪崩 多个微服务之间调用的时候&#xff0c;假设微服务A调用微服务B和微服务C&#xff0c;微服…

深度学习疆界:探索基本原理与算法,揭秘应用力量,展望未来发展与智能交互的新纪元

目录 什么是深度学习 深度学习的基本原理和算法 深度学习的应用实例 深度学习的挑战和未来发展方向 挑战 未来发展方向 深度学习与机器学习的关系 深度学习与人类的智能交互 什么是深度学习 深度学习是一种基于神经网络的机器学习方法&#xff0c;旨在模仿人类大脑分析…

2024.02.14作业

1. 请编程实现二维数组的杨辉三角 #include <stdio.h> #include <stdlib.h> #include <string.h>int main() {int n;scanf("%d", &n);int a[n][n];memset(a, 0, sizeof(a));a[0][0] 1;for (int i 1; i < n; i){for (int j 0; j < i …

云原生之容器编排-Docker Swarm

1. 前言 上一篇我们讲到Docker Compose可以定义和运行多容器应用程序&#xff0c;用一个YAML配置文件来声明式管理服务&#xff0c;在一台安装了Docker engine的Linux系统上可以很好的工作&#xff0c;但是现实中不可能只有一台Linux系统&#xff0c;一台Linux系统不可能有足够…

单片机学习笔记---LCD1602功能函数代码

目录 LCD1602.c 模拟写指令的时序 模拟写数据的时序 初始化 显示字符 显示字符串 显示数字 显示有符号的数字 显示16进制数字 显示二进制数 LCD1602.h main.c 上一篇讲了LCD1602的工作原理&#xff0c;这一节开始代码演示&#xff01; 新创建工程&#xff1a;LCD1…

黑马程序员——移动Web——day02

目录 空间转换 空间转换简介平移视距旋转左手法则rotate3d-了解立体呈现案例-3d导航缩放动画 动画实现步骤animation复合属性animation拆分写法案例-走马灯精灵动画多组动画综合案例-全名出游 背景云彩位置和动画文字动画 1.空间转换 空间转换简介 空间&#xff1a;是从坐标…

AcWing 112. 雷达设备(区间贪心)

[题目概述] 假设海岸是一条无限长的直线&#xff0c;陆地位于海岸的一侧&#xff0c;海洋位于另外一侧。 每个小岛都位于海洋一侧的某个点上。 雷达装置均位于海岸线上&#xff0c;且雷达的监测范围为 d&#xff0c;当小岛与某雷达的距离不超过 d 时&#xff0c;该小岛可以被雷…

[Angular 基础] - 自定义事件 自定义属性

[Angular 基础] - 自定义事件 & 自定义属性 之前的笔记&#xff1a; [Angular 基础] - Angular 渲染过程 & 组件的创建 [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 以上是能够实现渲染静态页面的基础 之前的内容主要学习了怎么通过…

第13章 网络 Page727~728 asio定时器例子:后创建的定时器先产生到点事件

代码&#xff1a; 35行&#xff0c;42行&#xff0c;51行&#xff0c;分别构造三个对象&#xff0c; 36行&#xff0c;43行&#xff0c;52行&#xff0c;设置了三个任务peng1、peng2、peng3&#xff0c;并将任务交给io_service对象&#xff08;不需要ios的run()方法启动起来&a…

如何创建和填写 PDF 表单,简化您的文档工作流

阅读本文&#xff0c;了解如何在开源办公套件 ONLYOFFICE 中创建和填写 PDF 表单。 ONLYOFFICE表单发展小史 ONLYOFFICE 表单首个版本发布于2022年1月18日&#xff0c;是 ONLYOFFICE 版本 7.0 更新的一部分。 您可以使用 ONLYOFFICE 表单&#xff0c;创建各种类型的模板文档&a…

Linux多线程[一]

引入知识 进程在线程内部执行是OS的系统调度单位。 内核中针对地址空间&#xff0c;有一种特殊的结构&#xff0c;VM_area_struct。这个用来控制虚拟内存中每个malloc等申请的空间&#xff0c;来区别每个malloc的是对应的堆区哪一段。OS可以做到资源的精细度划分。 对于磁盘…

Android之Android.bp文件格式语法(一百八十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

vue学习106-120

创建项目p106 router&#xff0c;store和app.vue不用删 清一下router里的路由配置 vant组件库p107 目标&#xff1a;认识第三方vue组件库vant-ui&#xff08;cv战士&#xff09; 封装好了的组件整合在一起就是组件库 http://vant-contrib.gitee.io/vant/v2/#/zh-CN/ vue2用va…

2024.02.13作业

21. c 22. b 23. b 5先出栈意味着1234都在栈内&#xff0c;此时1不能比2&#xff0c;3先出栈 24. b, c, d: 10, 12, 120 25. 2, 5 26. 数组越界&#xff0c;可能出现段错误 27. 0, 41 28. 1, 320 29. *a *b; *b *a - *b; *a - *b; 30. 0x801005&#xff1b;0x8…

计算机设计大赛 深度学习YOLOv5车辆颜色识别检测 - python opencv

文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0…

Java实现贫困地区人口信息管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 人口信息管理模块2.2 精准扶贫管理模块2.3 特殊群体管理模块2.4 案件信息管理模块2.5 物资补助模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 人口表3.2.2 扶贫表3.2.3 特殊群体表3.2.4 案件表3.2.5 物资补助表 四…