豆包对话模型

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());
    }
}

### 使用Python集成豆包模型实现多轮对话 为了通过Python与豆包模型进行交互并支持多轮对话,通常会采用HTTP请求的方式调用API接口。下面是一个基于`requests`库的例子,展示了如何初始化连接、发送消息以及处理返回的结果。 ```python import requests import json class DoubaoChatBot: def __init__(self, api_key, base_url="https://api.doubao.com/v1"): """ 初始化聊天机器人实例 :param str api_key: 用户的API密钥 :param str base_url: API的基础URL,默认为官方地址 """ headers = { 'Content-Type': 'application/json', 'Authorization': f'Bearer {api_key}' } self.session = requests.Session() self.session.headers.update(headers) self.base_url = base_url self.conversation_id = None def start_conversation(self): """启动新的对话""" url = f"{self.base_url}/conversations" response = self.session.post(url=url).json() self.conversation_id = response.get('id') def send_message(self, message_text): """ 向当前对话发送一条消息,并接收回复 :param str message_text: 需要发送的消息文本 :return dict: 返回服务器响应的数据字典 """ if not self.conversation_id: raise ValueError("No active conversation found.") payload = {"message": message_text} url = f"{self.base_url}/conversations/{self.conversation_id}/messages" response = self.session.post(url=url, data=json.dumps(payload)).json() return response['reply'] # 实例化对象并测试功能 if __name__ == "__main__": bot = DoubaoChatBot(api_key='your_api_key_here') bot.start_conversation() # 开始新对话 reply = bot.send_message(message_text="你好") # 发送问候语 print(f"收到回复:{reply}") # 输出接收到的回答 ``` 上述代码片段定义了一个名为`DoubaoChatBot`类,用于管理与豆包模型之间的通信过程。该类提供了创建对话(`start_conversation`)和传递信息给对方(`send_message`)的方法。每次当用户想要发起一轮或多轮交流时,只需先建立一个新的对话实例,之后就可以连续不断地向其输入问题或陈述获取相应的回应了[^1]。 需要注意的是,在实际应用中应当妥善保管自己的API key,并遵循服务提供商的安全指南;另外也要注意阅读最新的文档说明以确保使用的API版本是最新的并且正确无误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值