【AI大模型】——使用Java调用国内各种流行的AI大语言模型,全世界都在拥抱AI!!!_java 调用 大模型
🎼个人主页:【Y小夜】
😎作者简介:一位双非学校的大三学生,编程爱好者,
专注于基础和实战分享,欢迎私信咨询!
🎆入门专栏:🎇【MySQL,Javaweb,Rust,python】
🎈热门专栏:🎊【Springboot,Redis,Springsecurity,Docker,AI】
感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️
目录
🎈Java调用通义千问
🎄开通服务
🎄调用模型
🎈Java调用deepseek
🎄快速开始
🎄多轮对话
🎄流式输出
🎈Java调用通义千问
通义千问是由阿里云自主研发的大模型,用于理解和分析用户输入的自然语言,以及图片、音频、视频等多模态数据。 在不同领域和任务为用户提供服务和帮助。 您可以通过提供尽可能清晰详细的指令,来获取符合您预期的结果。 您可以在 模型体验中心 试用通义千问模型。
🎄开通服务
官网:阿里云百炼阿里云百炼阿里云百炼
点击开通服务
然后正在开通中,耐心等待一下。
点击API-KEY
创建一个自己的KEY
🎄调用模型
然后根据API文档,调用一下自己的模型:
通义千问API参考_大模型服务平台百炼(Model Studio)-阿里云帮助中心
这演示的是通过 DashScope(模型服务灵积) 的方式调用模型。
先引入依赖
com.alibaba dashscope-sdk-java 2.9.0
然后进行调用:
// 建议dashscope SDK的版本 >= 2.12.0import java.util.Arrays;import java.lang.System;import com.alibaba.dashscope.aigc.generation.Generation;import com.alibaba.dashscope.aigc.generation.GenerationParam;import com.alibaba.dashscope.aigc.generation.GenerationResult;import com.alibaba.dashscope.common.Message;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;public class Main { public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException { Generation gen = new Generation(); 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(); GenerationParam param = GenerationParam.builder() // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey(\"sk-xxx\") .apiKey(System.getenv(\"DASHSCOPE_API_KEY\")) // 此处以qwen-plus为例,可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models .model(\"qwen-plus\") .messages(Arrays.asList(systemMsg, userMsg)) .resultFormat(GenerationParam.ResultFormat.MESSAGE) .build(); return gen.call(param); } public static void main(String[] args) { try { GenerationResult result = callWithMessage(); System.out.println(JsonUtils.toJson(result)); } catch (ApiException | NoApiKeyException | InputRequiredException e) { // 使用日志框架记录异常信息 System.err.println(\"An error occurred while calling the generation service: \" + e.getMessage()); } System.exit(0); }}
输出是JSON格式的
如果你只想要输出内容,可以替换为以下代码
GenerationResult result = callWithMessage();String content =result.getOutput().getChoices().get(0).getMessage().getContent();System.out.println(content);
输出就只有内容了:
🎈Java调用deepseek
🎄快速开始
还是在大模型服务平台百炼上,我们直接使用官方提供的示例代码:
但是注意,因为我们要 返回reasoning_content
(思考过程)字段,你的 DashScope Java SDK 版本需要不低于2.18.2。
// dashscope SDK的版本 >= 2.18.2import java.util.Arrays;import java.lang.System;import com.alibaba.dashscope.aigc.generation.Generation;import com.alibaba.dashscope.aigc.generation.GenerationParam;import com.alibaba.dashscope.aigc.generation.GenerationResult;import com.alibaba.dashscope.common.Message;import com.alibaba.dashscope.common.Role;import com.alibaba.dashscope.exception.ApiException;import com.alibaba.dashscope.exception.InputRequiredException;import com.alibaba.dashscope.exception.NoApiKeyException;public class Main { public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException { Generation gen = new Generation(); Message userMsg = Message.builder() .role(Role.USER.getValue()) .content(\"你是谁?\") .build(); GenerationParam param = GenerationParam.builder() // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey(\"sk-xxx\") .apiKey(System.getenv(\"DASHSCOPE_API_KEY\")) .model(\"deepseek-r1\") .messages(Arrays.asList(userMsg)) // 不可以设置为\"text\" .resultFormat(GenerationParam.ResultFormat.MESSAGE) .build(); return gen.call(param); } public static void main(String[] args) { try { GenerationResult result = callWithMessage(); System.out.println(\"思考过程:\"); System.out.println(result.getOutput().getChoices().get(0).getMessage().getReasoningContent()); System.out.println(\"回复内容:\"); System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent()); } catch (ApiException | NoApiKeyException | InputRequiredException e) { // 使用日志框架记录异常信息 System.err.println(\"An error occurred while calling the generation service: \" + e.getMessage()); } System.exit(0); }}
🎄多轮对话
百炼提供的 DeepSeek API 默认不会记录你的历史对话信息。多轮对话功能可以让大模型“拥有记忆”,满足如追问、信息采集等需要连续交流的场景。
// dashscope SDK的版本 >= 2.18.2import java.util.Arrays;import java.lang.System;import com.alibaba.dashscope.aigc.generation.Generation;import com.alibaba.dashscope.aigc.generation.GenerationParam;import com.alibaba.dashscope.aigc.generation.GenerationResult;import com.alibaba.dashscope.common.Message;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;public class Main { public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException { Generation gen = new Generation(); Message userMsg1 = Message.builder() .role(Role.USER.getValue()) .content(\"你好\") .build(); Message AssistantMsg = Message.builder() .role(Role.ASSISTANT.getValue()) .content(\"你好!很高兴见到你,有什么我可以帮忙的吗?\") .build(); Message UserMsg2 = Message.builder() .role(Role.USER.getValue()) .content(\"你是谁\") .build(); GenerationParam param = GenerationParam.builder() // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey(\"sk-xxx\") .apiKey(System.getenv(\"DASHSCOPE_API_KEY\")) .model(\"deepseek-r1\") .messages(Arrays.asList(userMsg1,AssistantMsg,UserMsg2)) // 不可以设置为\"text\" .resultFormat(GenerationParam.ResultFormat.MESSAGE) .build(); return gen.call(param); } public static void main(String[] args) { try { GenerationResult result = callWithMessage(); System.out.println(\"思考过程:\"); System.out.println(result.getOutput().getChoices().get(0).getMessage().getReasoningContent()); System.out.println(\"回复内容:\"); System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent()); } catch (ApiException | NoApiKeyException | InputRequiredException e) { // 使用日志框架记录异常信息 System.err.println(\"An error occurred while calling the generation service: \" + e.getMessage()); } System.exit(0); }}
这样模型就有了记忆长对话的能力
🎄流式输出
DeepSeek-R1 类模型可能会输出较长的思考过程,为了降低超时风险,建议使用流式输出方式调用 DeepSeek-R1 类模型。
// dashscope SDK的版本 >= 2.18.2import java.util.Arrays;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.alibaba.dashscope.aigc.generation.Generation;import com.alibaba.dashscope.aigc.generation.GenerationParam;import com.alibaba.dashscope.aigc.generation.GenerationResult;import com.alibaba.dashscope.common.Message;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 io.reactivex.Flowable;import java.lang.System;public class Main { private static final Logger logger = LoggerFactory.getLogger(Main.class); private static StringBuilder reasoningContent = new StringBuilder(); private static StringBuilder finalContent = new StringBuilder(); private static boolean isFirstPrint = true; private static void handleGenerationResult(GenerationResult message) { String reasoning = message.getOutput().getChoices().get(0).getMessage().getReasoningContent(); String content = message.getOutput().getChoices().get(0).getMessage().getContent(); if (!reasoning.isEmpty()) { reasoningContent.append(reasoning); if (isFirstPrint) { System.out.println(\"====================思考过程====================\"); isFirstPrint = false; } System.out.print(reasoning); } if (!content.isEmpty()) { finalContent.append(content); if (!isFirstPrint) { System.out.println(\"\\n====================完整回复====================\"); isFirstPrint = true; } System.out.print(content); } } private static GenerationParam buildGenerationParam(Message userMsg) { return GenerationParam.builder() // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey(\"sk-xxx\") .apiKey(System.getenv(\"DASHSCOPE_API_KEY\")) .model(\"deepseek-r1\") .messages(Arrays.asList(userMsg)) // 不可以设置为\"text\" .resultFormat(GenerationParam.ResultFormat.MESSAGE) .incrementalOutput(true) .build(); } public static void streamCallWithMessage(Generation gen, Message userMsg) throws NoApiKeyException, ApiException, InputRequiredException { GenerationParam param = buildGenerationParam(userMsg); Flowable result = gen.streamCall(param); result.blockingForEach(message -> handleGenerationResult(message)); } public static void main(String[] args) { try { Generation gen = new Generation(); Message userMsg = Message.builder().role(Role.USER.getValue()).content(\"你是谁?\").build(); streamCallWithMessage(gen, userMsg);// 打印最终结果// if (reasoningContent.length() > 0) {// System.out.println(\"\\n====================完整回复====================\");// System.out.println(finalContent.toString());// } } catch (ApiException | NoApiKeyException | InputRequiredException e) { logger.error(\"An exception occurred: {}\", e.getMessage()); } System.exit(0); }}
他是一个动态的过程