一、前言
Java作为企业级开发的主流语言,在AI浪潮中当然不能缺席。很多Java同学想接入AI能力,但不知道从哪里下手。本文以OpenAI GPT模型 和阿里通义千问为例,手把手教你在Java中调用AI大模型API。
二、准备工作
2.1 获取API Key
OpenAI(ChatGPT):
- 注册 OpenAI 账号:https://platform.openai.com
- 进入 API Keys 页面创建Key
阿里通义千问:
- 访问阿里云百炼:https://bailian.console.aliyun.com
- 申请开通并获取API Key
2.2 创建Maven项目
xml
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.14</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
三、调用OpenAI GPT(同步方式)
3.1 代码实现
java
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 com.google.gson.JsonObject;
import com.google.gson.JsonArray;
import com.google.gson.JsonParser;
public class OpenAIClient {
private static final String API_URL = "https://api.openai.com/v1/chat/completions";
private static final String API_KEY = "你的OpenAI API Key";
public static String chat(String userMessage) throws Exception {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost request = new HttpPost(API_URL);
// 设置请求头
request.addHeader("Content-Type", "application/json");
request.addHeader("Authorization", "Bearer " + API_KEY);
// 构建请求体
JsonObject message = new JsonObject();
message.addProperty("role", "user");
message.addProperty("content", userMessage);
JsonArray messages = new JsonArray();
messages.add(message);
JsonObject body = new JsonObject();
body.addProperty("model", "gpt-3.5-turbo");
body.add("messages", messages);
body.addProperty("max_tokens", 1000);
body.addProperty("temperature", 0.7);
request.setEntity(new StringEntity(body.toString(), "UTF-8"));
try (CloseableHttpResponse response = httpClient.execute(request)) {
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity);
// 解析返回结果
JsonObject jsonResult = JsonParser.parseString(result).getAsJsonObject();
JsonArray choices = jsonResult.getAsJsonArray("choices");
JsonObject choice = choices.get(0).getAsJsonObject();
JsonObject assistantMessage = choice.getAsJsonObject("message");
return assistantMessage.get("content").getAsString();
}
}
public static void main(String[] args) {
try {
String response = chat("用Java写一个Hello World程序");
System.out.println("AI回复:" + response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.2 运行效果
AI回复:当然可以!以下是一个最简单的Java Hello World程序:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
保存为HelloWorld.java后,在终端执行:
javac HelloWorld.java
java HelloWorld
即可看到输出:Hello, World!
四、调用通义千问(阿里云)
阿里通义千问API风格和OpenAI类似,但阿里云有自己的SDK,用起来更方便:
4.1 添加依赖
xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dashscope-sdk-java</artifactId>
<version>1.0.5</version>
</dependency>
4.2 代码实现
java
import com.alibaba.dashscope.aigc聊天对话.*;
import com.alibaba.dashscope.callback.CallbackWarehouse;
import com.alibaba.dashscope.common.*;
public class QwenClient {
public static String chat(String userMessage) {
Chat会话 chat = 聊天对话.builder()
.apiKey("你的阿里云API Key")
.model("qwen-turbo") // 或 qwen-plus、qwen-max
.messages(聊天对话.messagesFromUser(userMessage))
.build();
聊天对话.ChatResult result = chat.call();
return result.getOutput().getChoices().get(0).getMessage().getContent();
}
public static void main(String[] args) {
String response = chat("Java中如何定义一个数组?");
System.out.println("通义千问回复:" + response);
}
}
五、常见问题
| 问题 | 解决方案 |
|---|---|
报错 403 Unauthorized |
检查API Key是否正确,是否有余额 |
报错 429 Rate Limit |
请求过于频繁,添加重试机制或降低频率 |
| 返回内容为空 | 检查model名称是否正确,或查看error字段 |
| 网络超时 | 公司防火墙可能屏蔽了外网API,考虑使用代理 |
六、下一步
学会了调用API,下一步可以学习:
- 流式输出(Streaming):实时显示AI生成内容
- 对话上下文:让AI记住对话历史
- Function Calling:让AI调用外部工具
📌 关注我,后续更新Spring Boot集成AI、LangChain4j实战等系列教程!