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 {//填写自己的APIKEYprivate 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
@Overridepublic 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;}