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

image

  • 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;
    }
posted @   青喺半掩眉砂  阅读(43)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示