跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaAIjava

Java 调用国内主流 AI 大语言模型实战指南

Java 集成 DashScope SDK 实现通义千问与 DeepSeek 模型调用。涵盖 API Key 配置、单轮及多轮对话逻辑、流式输出处理。重点说明 DeepSeek 思考过程获取及版本兼容性要求,提供完整代码示例与异常处理方案。

imJackJia发布于 2026/3/21更新于 2026/10/2386 浏览
Java 调用国内主流 AI 大语言模型实战指南

Java 集成 DashScope SDK 调用通义千问与 DeepSeek

在国内大模型生态中,阿里云百炼平台(DashScope)提供了稳定的 API 服务。通过 Java SDK,我们可以便捷地接入通义千问、DeepSeek 等主流模型。本文将跳过繁琐的账号注册流程,直接聚焦于代码层面的集成与调试。

1. Java 调用通义千问

通义千问支持多模态理解与分析。在项目中引入 DashScope SDK 后,即可通过 Generation 类发起请求。

1.1 环境准备

首先确保 Maven 依赖已配置。注意 SDK 版本建议不低于 2.12.0,以获取最新特性:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dashscope-sdk-java</artifactId>
    <version>2.9.0</version>
</dependency>
1.2 基础调用示例

初始化时,建议将 API Key 配置在环境变量 DASHSCOPE_API_KEY 中,避免硬编码泄露风险。若未配置环境变量,可直接传入 Key 字符串。

import java.util.Arrays;
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()  ApiException, NoApiKeyException, InputRequiredException {
            ();
        
           Message.builder()
                .role(Role.SYSTEM.getValue())
                .content()
                .build();
        
           Message.builder()
                .role(Role.USER.getValue())
                .content()
                .build();

           GenerationParam.builder()
                .apiKey(System.getenv()) 
                .model() 
                .messages(Arrays.asList(systemMsg, userMsg))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .build();
         gen.call(param);
    }

        {
         {
               callWithMessage();
            System.out.println(JsonUtils.toJson(result));
        }  (ApiException | NoApiKeyException | InputRequiredException e) {
            System.err.println( + e.getMessage());
        }
    }
}
throws
Generation
gen
=
new
Generation
// 系统提示词,定义助手角色
Message
systemMsg
=
"You are a helpful assistant."
// 用户提问
Message
userMsg
=
"你是谁?"
GenerationParam
param
=
"DASHSCOPE_API_KEY"
// 优先读取环境变量
"qwen-plus"
// 指定模型版本
return
public
static
void
main
(String[] args)
try
GenerationResult
result
=
catch
"调用生成服务出错:"

默认输出为 JSON 格式,包含完整的元数据。如果只需要纯文本回复,可提取 choices[0].message.content 字段:

String content = result.getOutput().getChoices().get(0).getMessage().getContent();
System.out.println(content);

2. Java 调用 DeepSeek

DeepSeek-R1 等模型具备推理能力,返回结果中包含 reasoning_content(思考过程)。注意: 若要获取该字段,SDK 版本需不低于 2.18.2。

2.1 快速开始

调用逻辑与通义千问类似,但需注意模型名称及参数配置:

// 确保 dashscope SDK 版本 >= 2.18.2
import java.util.Arrays;
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()
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("deepseek-r1")
                .messages(Arrays.asList(userMsg))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE) // 必须设置为 MESSAGE,否则无法获取 reasoning_content
                .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());
        }
    }
}
2.2 多轮对话实现

API 默认不保留历史上下文。如需模拟'记忆',需在每次请求时将之前的对话记录拼接到 messages 列表中:

// 构建包含历史记录的对话列表
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()
        .apiKey(System.getenv("DASHSCOPE_API_KEY"))
        .model("deepseek-r1")
        .messages(Arrays.asList(userMsg1, assistantMsg, userMsg2))
        .resultFormat(GenerationParam.ResultFormat.MESSAGE)
        .build();
2.3 流式输出优化

DeepSeek-R1 的思考过程可能较长,同步等待容易触发超时。使用流式输出(Streaming)可以实时接收片段,提升体验并降低超时风险。

import io.reactivex.Flowable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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()
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("deepseek-r1")
                .messages(Arrays.asList(userMsg))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .incrementalOutput(true) // 开启流式输出
                .build();
    }

    public static void streamCallWithMessage(Generation gen, Message userMsg) throws NoApiKeyException, ApiException, InputRequiredException {
        GenerationParam param = buildGenerationParam(userMsg);
        Flowable<GenerationResult> 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);
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            logger.error("An exception occurred: {}", e.getMessage());
        }
    }
}

通过上述方式,我们可以在 Java 应用中灵活集成国内主流大模型,并根据业务需求选择同步或流式交互模式。

目录

  1. Java 集成 DashScope SDK 调用通义千问与 DeepSeek
  2. 1. Java 调用通义千问
  3. 1.1 环境准备
  4. 1.2 基础调用示例
  5. 2. Java 调用 DeepSeek
  6. 2.1 快速开始
  7. 2.2 多轮对话实现
  8. 2.3 流式输出优化

更多推荐文章

查看全部
  • 基于 AI 设计技能的独立前端开发全流程实战
  • 平衡车核心算法与工程实现
  • Llama3-8B 实测对比:性能、逻辑与编码能力评估
  • ToDesk 集成 ToClaw:AI Agent 融入日常办公流
  • ima Copilot 任务模式 PPT 生成功能评测
  • OpenClaw 接入自定义模型并通过 WebUI 实现智能操作
  • 大模型时代,新手与程序员如何转型入局 AI 行业
  • Java 核心面试题精选:基础、并发与容器详解
  • Spring 事务管理与传播机制详解
  • AI 智慧医疗:机器学习在医疗保健中的应用与进展
  • 转行 AI 产品经理:如何利用比较优势找到最优赛道
  • 滑动窗口算法详解与实战案例
  • 算法基础:一维前缀和与最大子段和实战
  • Linux 进程池设计与实现:原理、代码与优化
  • SpringDoc OpenAPI 常用注解详解与实战示例
  • 基于 Python 的电商商城系统设计:协同过滤与会员积分体系
  • Spring 事务注解及传播机制详解
  • Windows 本地部署 OpenClaw 接入飞书 AI 机器人实战
  • RAG 技术入门:核心原理、优化方案与评估体系详解
  • CSS 背景样式详解:颜色、图片与复合属性

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online