java-调用火山引擎官方API
java-调用火山引擎官方API(字节跳动旗下的AI服务平台),AI模型包括:DeepSeek、豆包、其他。。。
2025-02-20 16:33:06 星期四
一、官方平台入口:
入口如下:https://console.volcengine.com/user/basics/
1>.使用方式:
- 1.在开放平台注册账号
具体按照指引及进行注册即可,包括实名认证、账号绑定登。
- 2.获取并配置 API Key
入口如下:
https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey={}
打开火山方舟管理控制台,如下图:进行创建API Key
- 3.在平台找到AI入口,选择合适的AI模型,参考对应的API文档对接即可
- 4.这篇文章,记录下对接DeepSeek、豆包模型的方法
二、所需maven依赖:
<dependency>
<groupId>com.volcengine</groupId>
<artifactId>volcengine-java-sdk-ark-runtime</artifactId>
<version>LATEST</version>
</dependency>
三、具体代码如下:
核心代码:
package com.ruoyi.school.util;
import com.volcengine.ark.runtime.exception.ArkHttpException;
import com.volcengine.ark.runtime.model.completion.chat.ChatCompletionRequest;
import com.volcengine.ark.runtime.model.completion.chat.ChatMessage;
import com.volcengine.ark.runtime.model.completion.chat.ChatMessageRole;
import com.volcengine.ark.runtime.service.ArkService;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* 火山引擎AI工具类
*/
@Component
public class HuoShanAiUtils {
//填写自己的APIKEY
private static final String API_KEY = "7daf0c27-963a-4a11-***********";
private static final String DEEPSEEK_V3_MODEL = "deepseek-v3-241226";
private static final String DOUBAO_PRO_32K_MODEL = "doubao-pro-32k-241215";
public static void main(String[] args) {
ArkService service = ArkService.builder().apiKey(API_KEY).build();
String problem="{" +
" reading: ," +
" translation: ," +
" exercises: [" +
" {" +
" question: 问题1," +
" options: [A) , B) , C) ]," +
" answer: B," +
" analysis: 正确答案是B。" +
" }," +
" ]" +
"}" +
"根据这些单词:write,climb,shop,message,twelfth,jump,生成一篇500个单词左右的英语阅读理解:,生成对应的阅读的翻译,以及该阅读的习题和答案解析,习题要求:5道习题,习题选项按照ABC的形式显示,最后把阅读理解、翻译内容、习题和答案解析,以json格式返回,输出内容按照以上格式进行:";
System.out.println("\n----- streaming request -----");
final List<ChatMessage> streamMessages = new ArrayList<>();
final ChatMessage streamSystemMessage = ChatMessage.builder().role(ChatMessageRole.SYSTEM).content("你是豆包,是由字节跳动开发的 AI 人工智能助手").build();
final ChatMessage streamUserMessage = ChatMessage.builder().role(ChatMessageRole.USER).content(problem).build();
streamMessages.add(streamSystemMessage);
streamMessages.add(streamUserMessage);
ChatCompletionRequest streamChatCompletionRequest = ChatCompletionRequest.builder()
.model(DEEPSEEK_V3_MODEL)
.messages(streamMessages)
.build();
try {
service.streamChatCompletion(streamChatCompletionRequest)
.doOnError(Throwable::printStackTrace)
.blockingForEach(
choice -> {
if (choice.getChoices().size() > 0) {
System.out.print(choice.getChoices().get(0).getMessage().getContent());
}
}
);
} catch (ArkHttpException e) {
System.out.print(e.toString());
}
service.shutdownExecutor();
}
/**
* ChatCompletions-AI模型生成内容-DeepSeek
* @param problem
* @return
*/
public String chatCompletionsDeepSeek(String problem) {
ArkService service = ArkService.builder().apiKey(API_KEY).build();
StringBuilder resultBuilder = new StringBuilder();
final List<ChatMessage> streamMessages = new ArrayList<>();
final ChatMessage streamSystemMessage = ChatMessage.builder().role(ChatMessageRole.SYSTEM).content("你是豆包,是由字节跳动开发的 AI 人工智能助手").build();
final ChatMessage streamUserMessage = ChatMessage.builder().role(ChatMessageRole.USER).content(problem).build();
streamMessages.add(streamSystemMessage);
streamMessages.add(streamUserMessage);
ChatCompletionRequest streamChatCompletionRequest = ChatCompletionRequest.builder()
.model(DEEPSEEK_V3_MODEL)
.messages(streamMessages)
.build();
try {
service.streamChatCompletion(streamChatCompletionRequest)
.doOnError(Throwable::printStackTrace)
.blockingForEach(
choice -> {
if (choice.getChoices().size() > 0) {
resultBuilder.append(choice.getChoices().get(0).getMessage().getContent());
}
}
);
} catch (ArkHttpException e) {
resultBuilder.append(e.toString());
}
service.shutdownExecutor();
return resultBuilder.toString();
}
/**
* ChatCompletions-AI模型生成内容-豆包
* @param problem
* @return
*/
public String chatCompletionsDouBao(String problem) {
ArkService service = ArkService.builder().apiKey(API_KEY).build();
StringBuilder resultBuilder = new StringBuilder();
final List<ChatMessage> streamMessages = new ArrayList<>();
final ChatMessage streamSystemMessage = ChatMessage.builder().role(ChatMessageRole.SYSTEM).content("你是豆包,是由字节跳动开发的 AI 人工智能助手").build();
final ChatMessage streamUserMessage = ChatMessage.builder().role(ChatMessageRole.USER).content(problem).build();
streamMessages.add(streamSystemMessage);
streamMessages.add(streamUserMessage);
ChatCompletionRequest streamChatCompletionRequest = ChatCompletionRequest.builder()
.model(DOUBAO_PRO_32K_MODEL)
.messages(streamMessages)
.build();
try {
service.streamChatCompletion(streamChatCompletionRequest)
.doOnError(Throwable::printStackTrace)
.blockingForEach(
choice -> {
if (choice.getChoices().size() > 0) {
resultBuilder.append(choice.getChoices().get(0).getMessage().getContent());
}
}
);
} catch (ArkHttpException e) {
resultBuilder.append(e.toString());
}
service.shutdownExecutor();
return resultBuilder.toString();
}
}
2.测试接口代码:
- 1.dto
package com.ruoyi.school.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* AI生成阅读理解dto
*/
@Data
public class NewAiRequestDTO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("上课记录id")
private Long classRecordId;
@ApiModelProperty("选中的单词list")
private List<String> wordList ;
@ApiModelProperty("AI类型:1-DeepSeekAI,2-豆包AI")
private Integer type;
}
- 2.controller
/**
* 火山引擎AI
*/
@ApiOperation(value = "火山引擎AI生成阅读理解")
@PostMapping(value = "/arkGenerateArticle")
public AjaxResult arkGenerateArticle(@RequestBody NewAiRequestDTO dto){
String result = classRecordDetailService.arkGenerateArticle(dto);
Map<String, Object> map = new HashMap<>();
map.put("json", result);
return AjaxResult.success(map);
}
- 3.Impl
@Override
public String arkGenerateArticle(NewAiRequestDTO dto) {
if (StringUtils.isEmpty(dto.getWordList())) {
throw new RuntimeException("请选择单词!");
}
String todayWord = dto.getWordList().stream().collect(Collectors.joining(","));
String problem = "{" +
" reading: ," +
" translation: ," +
" exercises: [" +
" {" +
" question: 问题1," +
" options: [A),B),C),D)]," +
" answer: B," +
" analysis: 正确答案是B。" +
" }," +
" ]" +
"}" +
" 根据这些单词:" + todayWord + ",生成一篇500个单词左右的英语阅读理解:,生成对应的阅读的翻译,以及该阅读的习题和答案解析,习题要求:5道习题,习题选项按照ABCD的形式显示,最后把阅读理解、翻译内容、习题和答案解析,以json格式返回,输出内容按照以上格式进行:";
String resultJson = "";
switch (dto.getType()) {
case 1:
resultJson = huoShanAiUtils.chatCompletionsDeepSeek(problem);
break;
case 2:
resultJson = huoShanAiUtils.chatCompletionsDouBao(problem);
break;
}
resultJson = extractString(resultJson, "```json", "```");
if (StringUtils.isNotEmpty(resultJson)) {
NewAiArticle newAiArticle = new NewAiArticle();
newAiArticle.setClassRecordId(dto.getClassRecordId());
newAiArticle.setContent(resultJson);
newAiArticleMapper.insert(newAiArticle);
}
return resultJson;
}
本文来自博客园,作者:青喺半掩眉砂,转载请注明原文链接:https://www.cnblogs.com/xiaoguo-java/p/18727056
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· spring官宣接入deepseek,真的太香了~