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

02-28 阅读 0评论

文章目录

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

            前言

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

            AIGC盛行,带你轻松调用开发,AIGC盛行,带你轻松调用开发,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,人工智能,自然语言处理,第1张
            (图片来源网络,侵删)

            一、📖AIGC简介

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

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

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

              二、📣开通体验

              开通模型获取API-KEY

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

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

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

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

              AIGC盛行,带你轻松调用开发,AIGC盛行,带你轻松调用开发,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,人工智能,自然语言处理,第3张
              (图片来源网络,侵删)

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

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

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

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

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

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

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

              开通后,点击 管理中心 的 API-KEY 菜单项,然后创建新的API-KEY

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

              就会有个Accesskeyid和Secret值(这俩值要记住真正的开发中有用,本文章没用到)的弹窗,然后点击已创建的AIP-KEY查看并复制,这个会用到。

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

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

              三、📝基于java实现调用

              📣打开IDEA,开始操作了

              1.设置API-KEY

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

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

              2.体验大语言模型

              多轮对话演示

              创建一个测试类:

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

              代码如下:

              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);
                  }
              }
              

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

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

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

              补充流式输出

              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 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() {
                    @Override
                    public void onEvent(GenerationResult message) {
                      fullContent.append(message.getOutput().getChoices().get(0).getMessage().getContent());
                      System.out.println(message);
                    }
                    @Override
                    public void onError(Exception err){
                      System.out.println(String.format("Exception: %s", err.getMessage()));
                      semaphore.release();
                    }
                    @Override
                    public 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

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

              使用官方提供照片

              首先大家看一下官方提供的图片:

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

              /**
               * @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);
                  }
              }
              

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

              本地文件

              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(){{put("image", localFilePath);}}, 
                      new HashMap(){{put("text", "这是什么?");}})).build();// 对话问题
                      MultiModalConversationParam param = MultiModalConversationParam.builder()
                              .model(MultiModalConversation.Models.QWEN_VL_PLUS)
                              .message(userMessage)
                              .build();
                      Flowable 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 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 conversation
                      messages.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 messages
                      param.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(){{put("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg");}}, 
                      new HashMap(){{put("text", "基于这幅图,讲一个故事");}})).build();
                      MultiModalConversationParam param = MultiModalConversationParam.builder()
                              .model(MultiModalConversation.Models.QWEN_VL_PLUS)
                              .message(userMessage)
                              .build();
                      Flowable 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🌤️)。


免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]