package com.chart.web.controller.doubao.dialogue;
import com.chart.common.core.domain.AjaxResult;
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 okhttp3.ConnectionPool;
import okhttp3.Dispatcher;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("/dialogue")
public class ChatCompletionsExample {
static String apiKey = "ddfb";
//static String apiKey = "679a9eb90ad053";
// 增加最大线程数,允许更多并发请求
static Dispatcher dispatcher = new Dispatcher();
// 增大连接池大小,保持更多的空闲连接
static ConnectionPool connectionPool = new ConnectionPool(50, 10, TimeUnit.MINUTES); // 增大连接池
// 初始化 ArkService 使用自定义的 Dispatcher 和 ConnectionPool
static ArkService service = ArkService.builder()
.dispatcher(dispatcher) // 设置自定义的 Dispatcher
.connectionPool(connectionPool) // 设置自定义的连接池
.baseUrl("https://ark.cn-beijing.volces.com/api/v3")
.apiKey(apiKey)
.build();
// 增加最大并发请求数
static {
dispatcher.setMaxRequests(100); // 增加最大并发请求数
dispatcher.setMaxRequestsPerHost(50); // 每个主机允许的最大请求数
}
@GetMapping("chart")
public AjaxResult chartDoubao(@RequestParam String msg) {
StringBuilder responseContent = new StringBuilder();
// 构建标准请求
final List<ChatMessage> messages = new ArrayList<>();
final ChatMessage systemMessage = ChatMessage.builder()
.role(ChatMessageRole.SYSTEM)
.content("你是豆包,是由字节跳动开发的 AI 人工智能助手")
.build();
final ChatMessage userMessage = ChatMessage.builder()
.role(ChatMessageRole.USER)
.content(msg)
.build();
messages.add(systemMessage);
messages.add(userMessage);
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
.model("ep-20250211134843-mdtqw")
.messages(messages)
.build();
// 获取标准请求的响应内容
service.createChatCompletion(chatCompletionRequest).getChoices().forEach(choice ->
responseContent.append(choice.getMessage().getContent()).append("\n")
);
// 构建流式请求
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("常见的十字花科植物有哪些?")
// .build();
streamMessages.add(streamSystemMessage);
//streamMessages.add(streamUserMessage);
ChatCompletionRequest streamChatCompletionRequest = ChatCompletionRequest.builder()
.model("ep-20250211134843-mdtqw")
.messages(streamMessages)
.build();
// 获取流式请求的响应内容
service.streamChatCompletion(streamChatCompletionRequest)
.doOnError(Throwable::printStackTrace)
.blockingForEach(choice -> {
if (choice.getChoices().size() > 0) {
responseContent.append(choice.getChoices().get(0).getMessage().getContent());
}
});
// 返回响应内容
return AjaxResult.success(responseContent.toString());
}
}
豆包对话模型
最新推荐文章于 2025-04-13 22:22:56 发布