本文目录导读:

我来为您提供一个完整的Java调用文心一言(ERNIE Bot)API的案例。
准备工作
1 获取API密钥
- 访问百度智能云控制台
- 创建应用获取API Key和Secret Key
- 注意:文心一言API需要先申请开通
2 Maven依赖
<dependencies>
<!-- HTTP客户端 -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<!-- JSON处理 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.32</version>
</dependency>
<!-- JSON处理(备选) -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
完整代码实现
1 文心一言调用客户端
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
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 java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
/**
* 文心一言 API 调用客户端
*/
public class WenxinYiyanClient {
// 配置信息
private static final String API_KEY = "你的API_KEY";
private static final String SECRET_KEY = "你的SECRET_KEY";
// API地址
private static final String ACCESS_TOKEN_URL = "https://aip.baidubce.com/oauth/2.0/token";
private static final String CHAT_URL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro";
private String accessToken;
private long expireTime;
/**
* 获取访问令牌
*/
private String getAccessToken() throws IOException {
// 检查token是否过期
if (accessToken != null && System.currentTimeMillis() < expireTime) {
return accessToken;
}
CloseableHttpClient httpClient = HttpClients.createDefault();
String url = ACCESS_TOKEN_URL + "?grant_type=client_credentials" +
"&client_id=" + API_KEY +
"&client_secret=" + SECRET_KEY;
HttpPost httpPost = new HttpPost(url);
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
String responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
JSONObject jsonObject = JSON.parseObject(responseBody);
// 设置token和过期时间(提前5分钟过期以确保安全)
this.accessToken = jsonObject.getString("access_token");
int expiresIn = jsonObject.getInteger("expires_in");
this.expireTime = System.currentTimeMillis() + (expiresIn - 300) * 1000;
return this.accessToken;
}
}
/**
* 调用文心一言API
* @param message 用户输入的消息
* @return 文心一言的回复
*/
public String chat(String message) throws IOException {
String token = getAccessToken();
String url = CHAT_URL + "?access_token=" + token;
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
// 设置请求头
httpPost.setHeader("Content-Type", "application/json");
// 构建请求体
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("messages", new Object[]{
Map.of("role", "user", "content", message)
});
// 可选参数
requestBody.put("temperature", 0.8);
requestBody.put("top_p", 0.8);
requestBody.put("penalty_score", 1.0);
requestBody.put("stream", false);
String jsonBody = JSON.toJSONString(requestBody);
httpPost.setEntity(new StringEntity(jsonBody, StandardCharsets.UTF_8));
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
HttpEntity entity = response.getEntity();
String responseBody = EntityUtils.toString(entity, StandardCharsets.UTF_8);
JSONObject jsonResponse = JSON.parseObject(responseBody);
// 检查是否有错误
if (jsonResponse.containsKey("error_code")) {
String errorMsg = jsonResponse.getString("error_msg");
throw new IOException("API调用失败: " + errorMsg);
}
// 获取回复内容
return jsonResponse.getJSONObject("result")
.getJSONArray("content")
.getJSONObject(0)
.getString("content");
}
}
/**
* 流式调用文心一言API(适用于长对话)
*/
public void streamChat(String message, MessageCallback callback) throws IOException {
String token = getAccessToken();
String url = CHAT_URL + "?access_token=" + token;
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Content-Type", "application/json");
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("messages", new Object[]{
Map.of("role", "user", "content", message)
});
requestBody.put("stream", true);
String jsonBody = JSON.toJSONString(requestBody);
httpPost.setEntity(new StringEntity(jsonBody, StandardCharsets.UTF_8));
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
// 处理流式响应
// 实际实现需要读取InputStream并解析SSE格式
// 这里简化处理,实际使用请参考完整实现
}
}
/**
* 消息回调接口
*/
public interface MessageCallback {
void onMessage(String content);
void onError(Exception e);
void onComplete();
}
}
2 使用示例
import java.io.IOException;
import java.util.Scanner;
/**
* 文心一言调用示例
*/
public class WenxinYiyanDemo {
public static void main(String[] args) {
WenxinYiyanClient client = new WenxinYiyanClient();
Scanner scanner = new Scanner(System.in);
System.out.println("=== 文心一言对话测试 ===");
System.out.println("输入 'exit' 退出程序");
System.out.println("=" .repeat(40));
while (true) {
System.out.print("\n用户: ");
String input = scanner.nextLine();
if ("exit".equalsIgnoreCase(input)) {
System.out.println("再见!");
break;
}
try {
System.out.println("文心一言: ");
String response = client.chat(input);
System.out.println(response);
} catch (IOException e) {
System.err.println("调用失败: " + e.getMessage());
}
}
scanner.close();
}
}
3 高级用法 - 多轮对话
/**
* 多轮对话示例
*/
public class MultiTurnChat {
public static void main(String[] args) throws IOException {
WenxinYiyanClient client = new WenxinYiyanClient();
// 多轮对话示例
String[] conversations = {
"你是谁?",
"你能做什么?",
"刚才我问了你什么问题?"
};
for (String question : conversations) {
System.out.println("用户: " + question);
String response = client.chat(question);
System.out.println("文心一言: " + response);
System.out.println("-".repeat(40));
}
}
}
错误处理
/**
* 增强的错误处理示例
*/
public class ErrorHandlingDemo {
public static void main(String[] args) {
WenxinYiyanClient client = new WenxinYiyanClient();
try {
String response = client.chat("你好");
System.out.println("回复: " + response);
} catch (IOException e) {
System.err.println("网络错误: " + e.getMessage());
} catch (Exception e) {
System.err.println("系统错误: " + e.getMessage());
} finally {
// 清理资源
}
}
}
配置文件示例 (application.properties)
# 文心一言配置 wenxin.api.key=你的API_KEY wenxin.secret.key=你的SECRET_KEY wenxin.api.url=https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro wenxin.access.token.url=https://aip.baidubce.com/oauth/2.0/token # 模型参数 wenxin.temperature=0.8 wenxin.top_p=0.8 wenxin.penalty_score=1.0 wenxin.max_tokens=2048
注意事项
- API配额限制:注意免费额度和调用频率限制
- 错误码处理:建议实现完整的错误码处理逻辑
- 安全性:API密钥不要硬编码在代码中,建议使用环境变量或配置文件
- 超时设置:建议设置合理的连接超时和读取超时时间
- 会话管理:多轮对话时注意维护会话上下文
这个示例提供了一个完整的基础实现,您可以根据实际需求进行调整和优化。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播