java(spring boot)实现向deepseek/GPT等模型的api发送请求/多轮对话(附源码)

我们再启动应用并获取api密钥后就可以对它发送请求了,但是官方文档对于如何进行多轮对话以及怎么自定义参数并没有说的很清楚,给的模板也没有java的,因此我们需要自己实现。

java 复制代码
import org.json.JSONArray;
import org.json.JSONObject;

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class DeepSeekUtil {
    private static final String API_URL = "https://ark.cn-beijing.volces.com/api/v3/chat/completions"; //  API 地址
    private static final String API_KEY = ""; // 请替换为你的 API 密钥

    // 与模型进行交互
    public static String chat(String userMessage, JSONArray messages) {
        // 如果没有传入消息历史,初始化一个空的 JSONArray
        if (messages == null) {
            messages = new JSONArray();
        }

        // 添加用户的消息到对话历史
        messages.put(new JSONObject().put("role", "user").put("content", userMessage));

        JSONObject requestBody = new JSONObject();
        requestBody.put("model", "deepseek-v3-241226"); // 使用正确的模型名称
        requestBody.put("messages", messages); // 将历史对话传递给 API
        requestBody.put("temperature", 0.7); // 控制生成文本的创意性
        //requestBody.put("max_tokens", 1024); // 最大生成 token 数量,避免生成过长的回答

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(API_URL))
                .header("Content-Type", "application/json")
                .header("Authorization", "Bearer " + API_KEY)
                .POST(HttpRequest.BodyPublishers.ofString(requestBody.toString()))
                .build();

        HttpClient client = HttpClient.newHttpClient();
        try {
            // 发送请求并获取响应
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

            // 检查响应状态
            if (response.statusCode() != 200) {
                System.out.println("API Response Error: " + response.body());
                return "Error: API responded with status code " + response.statusCode();
            }

            // 从响应中获取 API 返回的内容
            String responseBody = response.body();
            System.out.println("API Response: " + responseBody);

            // 解析 API 响应
            JSONObject jsonResponse = new JSONObject(responseBody);
            JSONArray choices = jsonResponse.getJSONArray("choices");

            // 获取第一个 choice 中的 message 内容
            JSONObject firstChoice = choices.getJSONObject(0);
            JSONObject message = firstChoice.getJSONObject("message");
            String apiReply = message.getString("content");

            // 添加模型回复到对话历史
            messages.put(new JSONObject().put("role", "assistant").put("content", apiReply));

            // 返回 API 的回复
            return apiReply;

        } catch (Exception e) {
            // 出现错误时返回错误消息
            e.printStackTrace(); // 打印详细的错误信息
            return "Error: " + e.getMessage();
        }
    }
}

我们再编写测试类

java 复制代码
 @Test
    void testChat(){
        JSONArray array=new JSONArray();

      String response=DeepSeekUtil.chat("你好",array);
        System.out.println(response);
        String response1=DeepSeekUtil.chat("帮我设计一个演示自由落体的网页",array);
        System.out.println(response1);
    }
相关推荐
0xDevNull3 小时前
Java反射机制深度解析:从原理到实战
java·开发语言·后端
华科易迅3 小时前
MybatisPlus增删改查操作
android·java·数据库
standovon4 小时前
Spring Boot整合Redisson的两种方式
java·spring boot·后端
IAUTOMOBILE4 小时前
Python 流程控制与函数定义:从调试现场到工程实践
java·前端·python
hutengyi4 小时前
PostgreSQL版本选择
java
皮皮林5514 小时前
重磅!JetBrains 正式发布全新的 AI 开发工具,定名 AI IDE AIR
java·intellij idea
MX_93594 小时前
SpringMVC请求参数
java·后端·spring·servlet·apache
ID_180079054735 小时前
小红书笔记评论 API,Python 调用示例与完整 JSON 返回参考
java·开发语言
lifewange5 小时前
java连接Mysql数据库
java·数据库·mysql
云原生指北5 小时前
命令行四件套:fd-rg-fzf-bat
java·大数据·elasticsearch