当前位置:   article > 正文

Java简单实现调用智谱ai,登录,注册和可视化设计_zhipuai-sdk-java-v4

zhipuai-sdk-java-v4

目录

一:Java连接mysql数据库

1.1点击进入mysql jar包下载官网

1.2安装下载Navicat

二:安装Java SDK(智谱AI)

2.1查看自己的API

2.2官方github地址

2.3介绍Maven

2.3.1Meven的下载和安装

2.3.2Meaven的配置(IDEA)

2.3.3如果遇到导入junit不成功的话,可以看下面这个教程

2.3.4如果遇到控制台中文乱码的问题,可以看下面这个教程

2.4加入代码(官方代码)

 2.4.1填充自己的信息

 2.4.2启动示例

2.4.3结果展示

2.4.3.1人工智能问答

2.4.3.2诗歌生成

2.4.3.3语言翻译

 2.4.3.4图片生成

2.4.3.5图生文

2.5需要优化的地方

2.5.1实现多行输出

2.5.2能够反复调用,结合上下文信息

 三:图形化界面

3.1创建一个基于Swing的GUI图形化程序

 3.2图形化界面的需求

3.2.1生成一个窗口(基本),可以支持用户的输入,并且旁边能够输出

3.2.2进一步的需求,一共需要设置七个部分,就是七个模块提供给用户选择

四:数据库 

 4.1数据库的需求

4.1.1用户的登录注册

4.1.2图形化界面的设计

4.1.3实现跳转

五:参考资料


代码放在这里了

https://gitee.com/lylsalt/AI_Embark

一:Java连接mysql数据库

1.1点击进入mysql jar包下载官网

MySQL :: MySQL Community Downloads

 

将下载好的压缩包进行解压

解压之后下图就是连接数据库所用到的jar包:

 将jar包复制到IDEA所用的项目下,放置jar包的目录为lib,需要自己新建。

添加完之后,打开File,点击Project Structure

这样mysql的依赖就配好了。 

1.2安装下载Navicat

这个下载安装会遇到很多问题

看这一篇就够了

https://www.cnblogs.com/sq1995liu/p/12671331.html

二:安装Java SDK(智谱AI)

先进入官网注册一个账号智谱AI开放平台,注册账号实名后,会送token,token就是回答时字的数量。一般都是百万或者千万起送。

2.1查看自己的API

注意:我们常见的API_KEY和API_SECRET,这里采用了统一为API key,使用   .  这个符号进行划分。

举个栗子:yingzix688.xxxx。

那么,API_KEY:yingzix688

           API_SECRET:xxxx

大家只需要看自己的API key进行分割出来即可。

2.2官方github地址

智谱AIJava SDK 地址:MetaGLM/zhipuai-sdk-java-v4 (github.com)

如下方式,将SDK的依赖加入到Maven项目: 

  1. <dependency>
  2. <groupId>cn.bigmodel.openapi</groupId>
  3. <artifactId>oapi-java-sdk</artifactId>
  4. <version>release-V4-2.0.0</version>
  5. </dependency>

到这边可能就会看不太懂,所以需要介绍一下Meaven。再继续添加依赖。 

2.3介绍Maven

我这边简单的概括一些(内容由AI生成),需要深入了解的可以看这篇文章了解

Java之Maven【IDEA版】入门到精通(一篇文章精通系列)_ij maven java入门-CSDN博客

Maven是一个自动化构建工具,主要用于Java项目,但它也支持其他编程语言。Maven提供了用于构建、依赖管理、版本控制和项目信息管理的框架。它使用一个名为pom.xmlProject Object Model)的配置文件来管理项目的构建生命周期、依赖关系和插件。

Maven的主要特点和功能包括:

  1. 依赖管理:Maven自动处理项目依赖的下载和版本冲突,确保项目使用正确版本的库。

  2. 构建生命周期:Maven定义了项目的构建生命周期,包括编译、测试、打包、部署等阶段。

  3. 项目构建标准化:Maven通过标准化的项目目录结构和生命周期阶段,使得不同项目之间的一致性更容易实现。

  4. 插件机制:Maven通过插件来执行构建过程中的具体任务,如编译代码、运行测试、生成文档等。

  5. 多模块项目支持:Maven可以轻松管理包含多个模块的大型项目。

  6. 仓库管理:Maven使用仓库来存储依赖库和项目构建的工件。它支持本地仓库和远程仓库,如中央仓库和私有仓库。

  7. 集成和自动化:Maven可以与持续集成工具(如Jenkins)集成,实现自动化测试和部署。

  8. 项目信息管理:Maven可以生成项目信息和报告,如依赖关系列表、变更日志、测试报告等。

Maven的构建配置文件pom.xml位于项目的根目录中,它定义了项目的元数据、依赖关系、构建插件和构建配置。通过在pom.xml中配置这些信息,Maven可以自动化项目的构建和依赖管理过程。

Maven的命令行工具允许开发人员执行各种构建命令,如mvn clean(清理项目)、mvn compile(编译源代码)、mvn test(运行测试)和mvn package(打包项目)等。

2.3.1Meven的下载和安装

2.3.2Meaven的配置(IDEA)

这两个步骤请看这个链接的第二和第四个部分Java之Maven【IDEA版】入门到精通(一篇文章精通系列)_ij maven java入门-CSDN博客

其中到创建Meaven时候需要注意下面一个点

 关于archetype的说明可以参考这篇文章

Maven创建时archetype的选择说明_创建maven项目archetype选哪个-CSDN博客

 这边建议使用这个模板maven-archetype-quickstart

这张图比较重要

  1. src/main/java —— 存放项目的.java 文件
  2. src/main/resources —— 存放项目资源文件,如数据库的配置文件
  3. src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类
  4. target —— 项目输出位置,编译后的class 文件会输出到此目录
  5. pom.xml ——maven 项目核心配置文件

2.3.3如果遇到导入junit不成功的话,可以看下面这个教程

IDEA使用JUnit时@Test无效以及无法导入org.junit包的问题_idea junit包导入不生效-CSDN博客

2.3.4如果遇到控制台中文乱码的问题,可以看下面这个教程

IDEA2022.2版本(最新版)控制台输出中文乱码,四个方法的介绍 - 知乎 (zhihu.com)

2.4加入代码(官方代码)

  1. package com.zhipu.oapi.demo;
  2. import com.alibaba.fastjson.JSON;
  3. import com.fasterxml.jackson.annotation.JsonInclude;
  4. import com.fasterxml.jackson.core.JsonProcessingException;
  5. import com.fasterxml.jackson.core.type.TypeReference;
  6. import com.fasterxml.jackson.databind.DeserializationFeature;
  7. import com.fasterxml.jackson.databind.ObjectMapper;
  8. import com.fasterxml.jackson.databind.PropertyNamingStrategy;
  9. import com.zhipu.oapi.ClientV4;
  10. import com.zhipu.oapi.Constants;
  11. import com.zhipu.oapi.service.v4.embedding.EmbeddingApiResponse;
  12. import com.zhipu.oapi.service.v4.embedding.EmbeddingRequest;
  13. import com.zhipu.oapi.service.v4.file.FileApiResponse;
  14. import com.zhipu.oapi.service.v4.file.QueryFileApiResponse;
  15. import com.zhipu.oapi.service.v4.file.QueryFilesRequest;
  16. import com.zhipu.oapi.service.v4.fine_turning.*;
  17. import com.zhipu.oapi.service.v4.image.CreateImageRequest;
  18. import com.zhipu.oapi.service.v4.image.ImageApiResponse;
  19. import com.zhipu.oapi.service.v4.model.*;
  20. import io.reactivex.Flowable;
  21. import java.util.ArrayList;
  22. import java.util.HashMap;
  23. import java.util.List;
  24. import java.util.Map;
  25. import java.util.concurrent.atomic.AtomicBoolean;
  26. public class V4OkHttpClientTest {
  27. private static final String API_KEY = "";
  28. private static final String API_SECRET = "";
  29. private static final ClientV4 client = new ClientV4.Builder(API_KEY,API_SECRET).build();
  30. private static final ObjectMapper mapper = defaultObjectMapper();
  31. public static ObjectMapper defaultObjectMapper() {
  32. ObjectMapper mapper = new ObjectMapper();
  33. mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  34. mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  35. mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
  36. mapper.addMixIn(ChatFunction.class, ChatFunctionMixIn.class);
  37. mapper.addMixIn(ChatCompletionRequest.class, ChatCompletionRequestMixIn.class);
  38. mapper.addMixIn(ChatFunctionCall.class, ChatFunctionCallMixIn.class);
  39. return mapper;
  40. }
  41. // 请自定义自己的业务id
  42. private static final String requestIdTemplate = "mycompany-%d";
  43. public static void main(String[] args) throws Exception {
  44. System.setProperty("org.slf4j.simpleLogger.logFile", "System.out");
  45. // 1. sse-invoke调用模型,使用标准Listener,直接返回结果
  46. testSseInvoke();
  47. // 2. invoke调用模型,直接返回结果
  48. // testInvoke();
  49. // 3. 异步调用
  50. // String taskId = testAsyncInvoke();
  51. // 4.异步查询
  52. // testQueryResult(taskId);
  53. // 5.文生图
  54. // testCreateImage();
  55. // 6. 图生文
  56. // testImageToWord();
  57. // 7. 向量模型
  58. // testEmbeddings();
  59. // 8.微调-上传微调数据集
  60. // testUploadFile();
  61. // 9.微调-查询上传文件列表
  62. // testQueryUploadFileList();
  63. // 10.微调-创建微调任务
  64. // testCreateFineTuningJob();
  65. // 11.微调-查询微调任务事件
  66. // testQueryFineTuningJobsEvents();
  67. // 12.微调-查询微调任务
  68. // testRetrieveFineTuningJobs();
  69. // 13.微调-查询个人微调任务
  70. // testQueryPersonalFineTuningJobs();
  71. // 14.微调-调用微调模型(参考模型调用接口,并替换成要调用模型的编码model)
  72. }
  73. private static void testQueryPersonalFineTuningJobs() {
  74. QueryPersonalFineTuningJobRequest queryPersonalFineTuningJobRequest = new QueryPersonalFineTuningJobRequest();
  75. queryPersonalFineTuningJobRequest.setLimit(1);
  76. QueryPersonalFineTuningJobApiResponse queryPersonalFineTuningJobApiResponse = client.queryPersonalFineTuningJobs(queryPersonalFineTuningJobRequest);
  77. System.out.println("model output:" + JSON.toJSONString(queryPersonalFineTuningJobApiResponse));
  78. }
  79. private static void testQueryFineTuningJobsEvents() {
  80. QueryFineTuningJobRequest queryFineTuningJobRequest = new QueryFineTuningJobRequest();
  81. queryFineTuningJobRequest.setJobId("ftjob-20240119114544390-zkgjb");
  82. // queryFineTuningJobRequest.setLimit(1);
  83. // queryFineTuningJobRequest.setAfter("1");
  84. QueryFineTuningEventApiResponse queryFineTuningEventApiResponse = client.queryFineTuningJobsEvents(queryFineTuningJobRequest);
  85. System.out.println("model output:" + JSON.toJSONString(queryFineTuningEventApiResponse));
  86. }
  87. /**
  88. * 查询微调任务
  89. */
  90. private static void testRetrieveFineTuningJobs() {
  91. QueryFineTuningJobRequest queryFineTuningJobRequest = new QueryFineTuningJobRequest();
  92. queryFineTuningJobRequest.setJobId("ftjob-20240119114544390-zkgjb");
  93. // queryFineTuningJobRequest.setLimit(1);
  94. // queryFineTuningJobRequest.setAfter("1");
  95. QueryFineTuningJobApiResponse queryFineTuningJobApiResponse = client.retrieveFineTuningJobs(queryFineTuningJobRequest);
  96. System.out.println("model output:" + JSON.toJSONString(queryFineTuningJobApiResponse));
  97. }
  98. /**
  99. * 创建微调任务
  100. */
  101. private static void testCreateFineTuningJob() {
  102. FineTuningJobRequest request = new FineTuningJobRequest();
  103. String requestId = String.format(requestIdTemplate, System.currentTimeMillis());
  104. request.setRequestId(requestId);
  105. request.setModel("chatglm3-6b");
  106. request.setTraining_file("file-20240118082608327-kp8qr");
  107. CreateFineTuningJobApiResponse createFineTuningJobApiResponse = client.createFineTuningJob(request);
  108. System.out.println("model output:" + JSON.toJSONString(createFineTuningJobApiResponse));
  109. }
  110. /**
  111. * 微调文件上传列表查询
  112. */
  113. private static void testQueryUploadFileList() {
  114. QueryFilesRequest queryFilesRequest = new QueryFilesRequest();
  115. QueryFileApiResponse queryFileApiResponse = client.queryFilesApi(queryFilesRequest);
  116. System.out.println("model output:" + JSON.toJSONString(queryFileApiResponse));
  117. }
  118. /**
  119. * 微调上传数据集
  120. */
  121. private static void testUploadFile() {
  122. String filePath = "/Users/wujianguo/Downloads/transaction-data.jsonl";
  123. String purpose = "fine-tune";
  124. FileApiResponse fileApiResponse = client.invokeUploadFileApi(purpose, filePath);
  125. System.out.println("model output:" + JSON.toJSONString(fileApiResponse));
  126. }
  127. private static void testEmbeddings() {
  128. EmbeddingRequest embeddingRequest = new EmbeddingRequest();
  129. embeddingRequest.setInput("hello world");
  130. embeddingRequest.setModel(Constants.ModelEmbedding2);
  131. EmbeddingApiResponse apiResponse = client.invokeEmbeddingsApi(embeddingRequest);
  132. System.out.println("model output:" + JSON.toJSONString(apiResponse));
  133. }
  134. /**
  135. * 图生文
  136. */
  137. private static void testImageToWord() {
  138. List<ChatMessage> messages = new ArrayList<>();
  139. List<Map<String, Object>> contentList = new ArrayList<>();
  140. Map<String, Object> textMap = new HashMap<>();
  141. textMap.put("type", "text");
  142. textMap.put("text", "图里有什么");
  143. Map<String, Object> typeMap = new HashMap<>();
  144. typeMap.put("type", "image_url");
  145. Map<String, Object> urlMap = new HashMap<>();
  146. urlMap.put("url", "https://cdn.bigmodel.cn/enterpriseAc/3f328152-e15c-420c-803d-6684a9f551df.jpeg?attname=24.jpeg");
  147. typeMap.put("image_url", urlMap);
  148. contentList.add(textMap);
  149. contentList.add(typeMap);
  150. ChatMessage chatMessage = new ChatMessage(ChatMessageRole.USER.value(), contentList);
  151. messages.add(chatMessage);
  152. String requestId = String.format(requestIdTemplate, System.currentTimeMillis());
  153. ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
  154. .model(Constants.ModelChatGLM4V)
  155. .stream(Boolean.FALSE)
  156. .invokeMethod(Constants.invokeMethod)
  157. .messages(messages)
  158. .requestId(requestId)
  159. .build();
  160. ModelApiResponse modelApiResponse = client.invokeModelApi(chatCompletionRequest);
  161. System.out.println("model output:" + JSON.toJSONString(modelApiResponse));
  162. }
  163. private static void testCreateImage() {
  164. CreateImageRequest createImageRequest = new CreateImageRequest();
  165. createImageRequest.setModel(Constants.ModelCogView);
  166. // createImageRequest.setPrompt("画一个温顺可爱的小狗");
  167. ImageApiResponse imageApiResponse = client.createImage(createImageRequest);
  168. System.out.println("imageApiResponse:" + JSON.toJSONString(imageApiResponse));
  169. }
  170. /**
  171. * sse调用
  172. */
  173. private static void testSseInvoke() {
  174. List<ChatMessage> messages = new ArrayList<>();
  175. ChatMessage chatMessage = new ChatMessage(ChatMessageRole.USER.value(), "ChatGLM和你哪个更强大");
  176. // ChatMessage chatMessage = new ChatMessage(ChatMessageRole.USER.value(), "你能帮我查询2024年1月1日从北京南站到上海的火车票吗?");
  177. messages.add(chatMessage);
  178. String requestId = String.format(requestIdTemplate, System.currentTimeMillis());
  179. // 函数调用参数构建部分
  180. List<ChatTool> chatToolList = new ArrayList<>();
  181. ChatTool chatTool = new ChatTool();
  182. chatTool.setType(ChatToolType.FUNCTION.value());
  183. ChatFunctionParameters chatFunctionParameters = new ChatFunctionParameters();
  184. chatFunctionParameters.setType("object");
  185. Map<String, Object> properties = new HashMap<>();
  186. properties.put("departure", new HashMap<String, Object>() {{
  187. put("type", "string");
  188. put("description", "出发城市或车站");
  189. }});
  190. properties.put("destination", new HashMap<String, Object>() {{
  191. put("type", "string");
  192. put("description", "目的地城市或车站");
  193. }});
  194. properties.put("date", new HashMap<String, Object>() {{
  195. put("type", "string");
  196. put("description", "要查询的车次日期");
  197. }});
  198. List<String> required = new ArrayList<>();
  199. required.add("departure");
  200. required.add("destination");
  201. required.add("date");
  202. chatFunctionParameters.setProperties(properties);
  203. ChatFunction chatFunction = ChatFunction.builder()
  204. .name("query_train_info")
  205. .description("根据用户提供的信息,查询对应的车次")
  206. .parameters(chatFunctionParameters)
  207. .required(required)
  208. .build();
  209. chatTool.setFunction(chatFunction);
  210. chatToolList.add(chatTool);
  211. ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
  212. .model(Constants.ModelChatGLM4)
  213. .stream(Boolean.TRUE)
  214. .messages(messages)
  215. .requestId(requestId)
  216. .tools(chatToolList)
  217. .toolChoice("auto")
  218. .build();
  219. ModelApiResponse sseModelApiResp = client.invokeModelApi(chatCompletionRequest);
  220. if (sseModelApiResp.isSuccess()) {
  221. AtomicBoolean isFirst = new AtomicBoolean(true);
  222. ChatMessageAccumulator chatMessageAccumulator = mapStreamToAccumulator(sseModelApiResp.getFlowable())
  223. .doOnNext(accumulator -> {
  224. {
  225. if (isFirst.getAndSet(false)) {
  226. System.out.print("Response: ");
  227. }
  228. if (accumulator.getDelta() != null && accumulator.getDelta().getTool_calls() != null) {
  229. String jsonString = mapper.writeValueAsString(accumulator.getDelta().getTool_calls());
  230. System.out.println("tool_calls: " + jsonString);
  231. }
  232. if (accumulator.getDelta() != null && accumulator.getDelta().getContent() != null) {
  233. System.out.print(accumulator.getDelta().getContent());
  234. }
  235. }
  236. })
  237. .doOnComplete(System.out::println)
  238. .lastElement()
  239. .blockingGet();
  240. Choice choice = new Choice(chatMessageAccumulator.getChoice().getFinishReason(), 0L, chatMessageAccumulator.getDelta());
  241. List<Choice> choices = new ArrayList<>();
  242. choices.add(choice);
  243. ModelData data = new ModelData();
  244. data.setChoices(choices);
  245. data.setUsage(chatMessageAccumulator.getUsage());
  246. data.setId(chatMessageAccumulator.getId());
  247. data.setCreated(chatMessageAccumulator.getCreated());
  248. data.setRequestId(chatCompletionRequest.getRequestId());
  249. sseModelApiResp.setFlowable(null);
  250. sseModelApiResp.setData(data);
  251. }
  252. System.out.println("model output:" + JSON.toJSONString(sseModelApiResp));
  253. }
  254. public static Flowable<ChatMessageAccumulator> mapStreamToAccumulator(Flowable<ModelData> flowable) {
  255. return flowable.map(chunk -> {
  256. return new ChatMessageAccumulator(chunk.getChoices().get(0).getDelta(), null, chunk.getChoices().get(0), chunk.getUsage(), chunk.getCreated(), chunk.getId());
  257. });
  258. }
  259. /**
  260. * 同步调用
  261. */
  262. private static void testInvoke() {
  263. List<ChatMessage> messages = new ArrayList<>();
  264. ChatMessage chatMessage = new ChatMessage(ChatMessageRole.USER.value(), "ChatGLM和你哪个更强大");
  265. messages.add(chatMessage);
  266. String requestId = String.format(requestIdTemplate, System.currentTimeMillis());
  267. // 函数调用参数构建部分
  268. List<ChatTool> chatToolList = new ArrayList<>();
  269. ChatTool chatTool = new ChatTool();
  270. chatTool.setType(ChatToolType.FUNCTION.value());
  271. ChatFunctionParameters chatFunctionParameters = new ChatFunctionParameters();
  272. chatFunctionParameters.setType("object");
  273. Map<String, Object> properties = new HashMap<>();
  274. properties.put("location", new HashMap<String, Object>() {{
  275. put("type", "string");
  276. put("description", "城市,如:北京");
  277. }});
  278. properties.put("unit", new HashMap<String, Object>() {{
  279. put("type", "string");
  280. put("enum", new ArrayList<String>() {{
  281. add("celsius");
  282. add("fahrenheit");
  283. }});
  284. }});
  285. chatFunctionParameters.setProperties(properties);
  286. ChatFunction chatFunction = ChatFunction.builder()
  287. .name("get_weather")
  288. .description("Get the current weather of a location")
  289. .parameters(chatFunctionParameters)
  290. .build();
  291. chatTool.setFunction(chatFunction);
  292. chatToolList.add(chatTool);
  293. ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
  294. .model(Constants.ModelChatGLM4)
  295. .stream(Boolean.FALSE)
  296. .invokeMethod(Constants.invokeMethod)
  297. .messages(messages)
  298. .requestId(requestId)
  299. .tools(chatToolList)
  300. .toolChoice("auto")
  301. .build();
  302. ModelApiResponse invokeModelApiResp = client.invokeModelApi(chatCompletionRequest);
  303. try {
  304. System.out.println("model output:" + mapper.writeValueAsString(invokeModelApiResp));
  305. } catch (JsonProcessingException e) {
  306. e.printStackTrace();
  307. }
  308. }
  309. /**
  310. * 异步调用
  311. */
  312. private static String testAsyncInvoke() {
  313. List<ChatMessage> messages = new ArrayList<>();
  314. ChatMessage chatMessage = new ChatMessage(ChatMessageRole.USER.value(), "ChatLM和你哪个更强大");
  315. messages.add(chatMessage);
  316. String requestId = String.format(requestIdTemplate, System.currentTimeMillis());
  317. // 函数调用参数构建部分
  318. List<ChatTool> chatToolList = new ArrayList<>();
  319. ChatTool chatTool = new ChatTool();
  320. chatTool.setType(ChatToolType.FUNCTION.value());
  321. ChatFunctionParameters chatFunctionParameters = new ChatFunctionParameters();
  322. chatFunctionParameters.setType("object");
  323. Map<String, Object> properties = new HashMap<>();
  324. properties.put("location", new HashMap<String, Object>() {{
  325. put("type", "string");
  326. put("description", "城市,如:北京");
  327. }});
  328. properties.put("unit", new HashMap<String, Object>() {{
  329. put("type", "string");
  330. put("enum", new ArrayList<String>() {{
  331. add("celsius");
  332. add("fahrenheit");
  333. }});
  334. }});
  335. chatFunctionParameters.setProperties(properties);
  336. ChatFunction chatFunction = ChatFunction.builder()
  337. .name("get_weather")
  338. .description("Get the current weather of a location")
  339. .parameters(chatFunctionParameters)
  340. .build();
  341. chatTool.setFunction(chatFunction);
  342. chatToolList.add(chatTool);
  343. ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
  344. .model(Constants.ModelChatGLM4)
  345. .stream(Boolean.FALSE)
  346. .invokeMethod(Constants.invokeMethodAsync)
  347. .messages(messages)
  348. .requestId(requestId)
  349. .tools(chatToolList)
  350. .toolChoice("auto")
  351. .build();
  352. ModelApiResponse invokeModelApiResp = client.invokeModelApi(chatCompletionRequest);
  353. System.out.println("model output:" + JSON.toJSONString(invokeModelApiResp));
  354. return invokeModelApiResp.getData().getTaskId();
  355. }
  356. /**
  357. * 查询异步结果
  358. *
  359. * @param taskId
  360. */
  361. private static void testQueryResult(String taskId) {
  362. QueryModelResultRequest request = new QueryModelResultRequest();
  363. request.setTaskId(taskId);
  364. QueryModelResultResponse queryResultResp = client.queryModelResult(request);
  365. try {
  366. System.out.println("model output:" + mapper.writeValueAsString(queryResultResp));
  367. } catch (JsonProcessingException e) {
  368. e.printStackTrace();
  369. }
  370. }
  371. }

 2.4.1填充自己的信息

下面这个是整体的目录信息,提供一个参考

 成功输出

 2.4.2启动示例

这里解释一下四个的区别

testSseInvoke 使用的是逐渐输出,AI回答的结果是一段一段的展示。

testInvoke 使用的是同步执行,当AI全部的回答都输出后才会展示出来。

testAsyncInvoke 与testQueryResult 搭配使用,先通过testAsyncInvoke 让AI去执行,直接返回一个成功或者失败,之后通过获得的taskId,再用testQueryResult去查询获得结果即可。

2.4.3结果展示

2.4.3.1人工智能问答

2.4.3.2诗歌生成

2.4.3.3语言翻译

The soft rustle of leaves danced in the gentle breeze as the sun dipped below the horizon, casting hues of pink and gold across the sky

语言模型上基本上都大差不差,下面尝试一下多模态的图片理解功能

 2.4.3.4图片生成

这个没有免费的token包可以用,所以要往自己的账户里面充值一点钱,不用特别多。

图片生成如下(通过链接进行展示)https://sfile.chatglm.cn/testpath/3278f28a-746e-5d10-ad8f-91e838bffa3c_0.png

2.4.3.5图生文

这里的图片必须是一个链接(比如下面这个)

https://cdn.bigmodel.cn/enterpriseAc/3f328152-e15c-420c-803d-6684a9f551df.jpeg?attname=24.jpeg
  1. model output:{"code":200,"data":{"choices":[{"finishReason":"stop","index":0,"message":
  2. {"content":"图中是一张营业执照的副本。上面有统一社会信用代码91310000MA1FPFR44,
  3. 证照编号为0100002201908280013。该公司的名称为极易净水科技(上海)有限公司,
  4. 类型为有限责任公司(台港澳法人独资),成立日期是2019年08月28日,营业期限至2049年08月27日。
  5. 法定代表人是朱芮。经营范围包括水处理设备、环保产品及零部件、空气调节设备及其零部件、
  6. 家用电器、燃气器具、电热水器具、太阳能设备、医疗器械的研究、批发、进出口、
  7. 佣金代理(拍卖除外)并提供相关配套服务。住所位于上海市黄浦区新码头街55号4幢3楼。执照右下角有一个二维码,旁边写着“扫描二维码登录‘国家企业信用信息公示系统’了解更多登记、备案、许可、监管信息。
  8. ”并盖有上海市市场监督管理局和上海市黄浦区市场监督管理局的公章,时间为2019年08月28日。左下方还有国家企业信用信息公示系统的网址:http://www.gsxt.gov.cn。

 其实啊,这张图片和文字输出的结果有点像提取文字,并不能代表说AI是否理解了这副图片,所以我换了一个输入

https://www.bing.com/images/search?view=detailV2&ccid=p41EIG2y&id=3D6E0D23D9749CB1CC85DF31C907D9EDC995B2D2&thid=OIP.p41EIG2yb0HU0sRxX7yZEgHaE7&mediaurl=https%3a%2f%2fpic.52112.com%2f180303%2f180303_54%2fkYqA49HIMB.jpg&exph=532&expw=800&q=%e5%b0%8f%e5%a5%b3%e5%ad%a9%e5%9d%90%e5%9c%a8%e8%8d%89%e5%9c%b0%e4%b8%8a&simid=608026494945680312&FORM=IRPRST&ck=044E02C2E870928F13BED7BA1395AE64&selectedIndex=2&itb=0

 输入之后,报错,参数调用有误,请检查文档

其实猜测就是要用图片的地址链接

 理解成功,经过实验,这些功能都是可以直接调用使用的,非常方便。

2.5需要优化的地方

2.5.1实现多行输出

2.5.2能够反复调用,结合上下文信息

 三:图形化界面

3.1创建一个基于Swing的GUI图形化程序

可以参考下面这个链接

Java使用IntelliJ IDEA创建一个基于Swing的GUI图形化程序,打包发布为jar_idea swing gui-CSDN博客

 快速了解Swing组件,可以参考下面这个链接

GUI ——java的图形界面快速入门 - 知乎 (zhihu.com)

 3.2图形化界面的需求

3.2.1生成一个窗口(基本),可以支持用户的输入,并且旁边能够输出

3.2.2进一步的需求,一共需要设置七个部分,就是七个模块提供给用户选择

分别是人工智能问答,诗歌生成,问答知识库,语言翻译和自动修改文章错别字(这些统一调用一一个就可以了),就是下面这个,testSseInvoke,API都是一个,调用的模型不一样。

还有图片理解,图片理解分为文生图,和图生文。这两个模块需要调用两个

四:数据库 

4.1数据库的需求

在数据库设计方面,需要实现以下两个功能

4.1.1用户的登录注册

注册方面在数据库中添加用户的信息。登录的话用查找,对用户的输入进行查找和比对,如果正确,输出登录成功,如果查找或者比对不正确,输出用户名或者密码错误,请用户再次输入。

4.1.2图形化界面的设计

设计一个用户登录的界面,有用户名和密码两个。图形化界面要和数据库关联在一起。

4.1.3实现跳转

用户登录后跳转到用户输入的页面。

五:打包程序

5.1在线数据库

5.2打包程序

exe4j下载和使用(超详细)-CSDN博客

六:参考资料

 智谱AI开放平台 (bigmodel.cn)

Java连接mysql数据库及mysql驱动jar包下载和使用(详细记录)_mysql connnector jar包要导入几个-CSDN博客

Navicat Premium15安装与激活(完整激活版) - 小芒果测开笔记 - 博客园 (cnblogs.com)

Java | 智谱API调用实践_com.zhipu.oapi.demo-CSDN博客

Java之Maven【IDEA版】入门到精通(一篇文章精通系列)_ij maven java入门-CSDN博客

Maven创建时archetype的选择说明_创建maven项目archetype选哪个-CSDN博客

IDEA2022.2版本(最新版)控制台输出中文乱码,四个方法的介绍 - 知乎 (zhihu.com)

IDEA使用JUnit时@Test无效以及无法导入org.junit包的问题_idea junit包导入不生效-CSDN博客

zhipuai/zhipuai-sdk-java (github.com)

如何用Python调用智谱AI的API进行智能问答 - 知乎 (zhihu.com)

GUI ——java的图形界面快速入门 - 知乎 (zhihu.com)

ChatGPT | OpenAI

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/836968
推荐阅读
相关标签
  

闽ICP备14008679号