Java调用通义千问API的详细步骤

 更新时间:2026年03月30日 09:45:43   作者:别掉进我的异常  
这篇文章主要介绍了在Java中接入通义千问API的步骤,包括获取APIKey、添加依赖、配置模型和流式响应等,并提供了响应处理和高级功能实现示例,以及常见问题解决方案,需要的朋友可以参考下

要在Java中接入通义千问API,请按以下步骤操作:

1. 准备工作

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20231013</version>
</dependency>

2. 完整代码示例

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
public class TongyiQianwenClient {
    // 从环境变量获取API Key(推荐)
    private static final String API_KEY = System.getenv("DASHSCOPE_API_KEY");
    private static final String API_URL = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation";
    public static void main(String[] args) {
        try {
            String response = callQianwenAPI("解释一下量子计算");
            System.out.println("API 响应:\n" + response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static String callQianwenAPI(String userInput) throws Exception {
        // 1. 创建HTTP客户端
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            // 2. 构建请求
            HttpPost httpPost = new HttpPost(API_URL);
            httpPost.setHeader("Authorization", "Bearer " + API_KEY);
            httpPost.setHeader("Content-Type", "application/json");
            httpPost.setHeader("X-DashScope-SSE", "enable"); // 启用流式输出(可选)
            // 3. 构建请求体
            JSONObject requestBody = new JSONObject();
            requestBody.put("model", "qwen-turbo"); // 模型名称
            JSONObject input = new JSONObject();
            JSONObject message = new JSONObject();
            message.put("role", "user");
            message.put("content", userInput);
            input.put("messages", new Object[]{message});
            JSONObject parameters = new JSONObject();
            parameters.put("result_format", "text"); // 返回纯文本格式
            requestBody.put("input", input);
            requestBody.put("parameters", parameters);
            httpPost.setEntity(new StringEntity(requestBody.toString()));
            // 4. 发送请求并处理响应
            try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    String result = EntityUtils.toString(entity);
                    // 5. 解析响应
                    JSONObject jsonResponse = new JSONObject(result);
                    return jsonResponse.getJSONObject("output")
                                      .getString("text");
                }
            }
        }
        return "未收到有效响应";
    }
}

3. 关键配置说明

模型选择(根据需求替换):

  • qwen-turbo:高速版(推荐常规使用)
  • qwen-plus:增强版(适合复杂任务)
  • qwen-max:最强能力版

流式响应:如需实时流式输出,添加:

httpPost.setHeader("X-DashScope-SSE", "enable");

安全建议:API Key应通过环境变量传递:

# 设置环境变量(Linux/macOS)
export DASHSCOPE_API_KEY=your_api_key
# Windows
set DASHSCOPE_API_KEY=your_api_key

4. 响应处理示例

成功响应结构:

{
  "output": {
    "text": "量子计算是一种利用量子力学原理...",
    "finish_reason": "stop"
  },
  "usage": {
    "input_tokens": 10,
    "output_tokens": 210
  }
}

5. 高级功能实现

流式输出处理

// 添加流式支持
httpPost.setHeader("X-DashScope-SSE", "enable");

// 处理流式响应
InputStream content = entity.getContent();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(content))) {
    String line;
    while ((line = reader.readLine()) != null) {
        if (line.startsWith("data: ")) {
            String jsonStr = line.substring(6);
            JSONObject data = new JSONObject(jsonStr);
            if (!data.has("output")) continue;
            System.out.print(data.getJSONObject("output")
                                 .getString("text"));
        }
    }
}

异常处理

if (response.getStatusLine().getStatusCode() != 200) {
    String errorBody = EntityUtils.toString(entity);
    throw new RuntimeException("API调用失败: " + errorBody);
}

常见问题解决

  1. 401错误:检查API Key是否正确且未过期
  2. 400错误:验证请求体JSON格式是否正确
  3. 限流错误429:降低请求频率或联系阿里云扩容
  4. 超时问题:增加超时设置:
RequestConfig config = RequestConfig.custom()
    .setConnectTimeout(30000)
    .setSocketTimeout(60000)
    .build();
httpPost.setConfig(config);

到此这篇关于Java调用通义千问API的详细步骤的文章就介绍到这了,更多相关Java调用通义千问API内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java结合prometheus如何实现自定义数据监控

    java结合prometheus如何实现自定义数据监控

    文章介绍了如何配置Prometheus监控系统,包括配置文件prometheus.yml、被监控应用的指标暴露配置以及自定义监控指标的实现,同时,还详细说明了监控应用如何通过Prometheus API获取数据、处理数据并返回结果
    2024-12-12
  • idea没有services窗口、没有springboot启动项问题

    idea没有services窗口、没有springboot启动项问题

    这篇文章主要介绍了idea没有services窗口、没有springboot启动项问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • spring+mybatis实现图书管理系统

    spring+mybatis实现图书管理系统

    这篇文章主要为大家详细介绍了spring+mybatis实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • 更简单更高效的Mybatis Plus最新代码生成器AutoGenerator

    更简单更高效的Mybatis Plus最新代码生成器AutoGenerator

    这篇文章主要为大家介绍了更简单更高效的Mybatis Plus最新代码生成器AutoGenerator使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 解决Sentinel链路模式规则无效问题

    解决Sentinel链路模式规则无效问题

    本文介绍了如何在Spring Cloud Alibaba项目中使用Sentinel链路流控规则,并解决规则不生效的问题,通过关闭Sentinel过滤器,可以避免重复统计请求
    2025-01-01
  • 深入浅析MyBatis foreach标签

    深入浅析MyBatis foreach标签

    Mybatis foreach 标签用于循环语句,它很好的支持了数据和 List、set 接口的集合,并对此提供遍历的功能,本文给大家介绍MyBatis foreach标签的相关知识,感兴趣的朋友一起看看吧
    2021-09-09
  • 在Java与Kotlin之间如何进行互操作详解

    在Java与Kotlin之间如何进行互操作详解

    这篇文章主要给大家介绍了关于在Java和Kotlin之间如何进行互操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • 使用MapStruct实现Java对象映射的示例代码

    使用MapStruct实现Java对象映射的示例代码

    本文主要介绍了使用MapStruct实现Java对象映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09
  • Java数组的去重

    Java数组的去重

    这篇文章主要介绍了Java数组去重,结合实例形式分析了Java针对数组的去重,需要的朋友可以参考下,希望能够给你带来帮助
    2021-10-10
  • SpringBoot2.6.x默认禁用循环依赖后的问题解决

    SpringBoot2.6.x默认禁用循环依赖后的问题解决

    由于SpringBoot从底层逐渐引导开发者书写规范的代码,同时也是个忧伤的消息,循环依赖的应用场景实在是太广泛了,所以SpringBoot 2.6.x不推荐使用循环依赖,本文给大家说下SpringBoot2.6.x默认禁用循环依赖后的应对策略,感兴趣的朋友一起看看吧
    2022-02-02

最新评论