可以申请deepseek账号充值apiKey或者在本地部署。
本地JDK8版本
1本地部署:本地先安装好ollama和模型package zzxt;
import java.util.HashMap; import java.util.Map; import org.junit.Test; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONUtil; public class T{ @Test public void test(){ // url:放请求地址 String url = "http://localhost:11434/api/generate"; HttpRequest request = HttpUtil.createPost(url); Map<String, String> headers = new HashMap<>(); String authorization = ""; headers.put("Authorization", authorization); request.addHeaders(headers); JSONObject jsonObject = new JSONObject(); jsonObject.put("model","deepseek-r1:7b");//选择自己本地的模型 jsonObject.put("prompt","今天星期几?"); jsonObject.put("stream",false);
jsonObject.put("load_in_8bit", true); // 启用8-bit量化 jsonObject.put("low_vram_mode", true); // 启用低显存模式 // 封装参数,对象转json String body = JSONUtil.toJsonStr(jsonObject); // 发送请求 String infoStr = request.body(body).timeout(30000).execute().body(); System.out.println(infoStr); System.out.println("----------------------------------------"); //java字符串转JSON对象 JSONObject jo = JSON.parseObject(infoStr); //可以直接从json对象里拿到想要的字段 String response = jo.getString("response"); System.out.println(response); } }
2申请apiKey远程连接
DeepSeek 开放平台此处创建APIkey后充值
controller import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.ahhxkj.djps.service.deepseek.DeepSeekService; import javax.annotation.Resource; @RestController @RequestMapping("/deepseek") public class ChatController { @Resource private DeepSeekService deepSeekService; @RequestMapping("/send") public String send(String query) { return deepSeekService.generateResponse(query); } }
service package com.ahhxkj.djps.service.deepseek; import com.ahhxkj.djps.config.DeepSeekConfig; import com.ahhxkj.djps.config.ChatRequest; import com.ahhxkj.djps.config.ChatResponse; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import cn.hutool.http.Method; import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Collections; import java.util.Optional; @Slf4j @Service public class DeepSeekService { @Resource private DeepSeekConfig deepSeekConfig; public String generateResponse(String query) { try { // 构建 deepseek 请求对象 ChatRequest request = buildRequest(query); // 执行 HTTP 请求 HttpResponse execute = HttpUtil.createRequest(Method.POST, deepSeekConfig.getApiUrl()) .body(JSONUtil.toJsonStr(request)) .header("Content-Type", "application/json") .header("Authorization", "Bearer " + deepSeekConfig.getApiKey()) .header("Accept", "application/json") .execute(); // 获取并日志记录响应内容 String resp = execute.body(); log.info("deepseek response: {}", resp); // 解析响应并提取内容 ChatResponse chatResponse = JSONUtil.toBean(resp, ChatResponse.class); return extractResponse(chatResponse); } catch (Exception e) { log.error("Error generating response for query: {}", query, e); throw new RuntimeException("Failed to generate response", e); } } /** * 构建 deepseek 请求对象 */ private ChatRequest buildRequest(String query) { return ChatRequest.builder() .model(deepSeekConfig.getModel()) .temperature(deepSeekConfig.getTemperature()) .max_tokens(deepSeekConfig.getMaxTokens()) .messages(Collections.singletonList(new ChatRequest.Message("user", query))) .build(); } /** * 提取回复内容 */ private String extractResponse(ChatResponse response) { return Optional.ofNullable(response) .map(ChatResponse::getChoices) .filter(choices -> !choices.isEmpty()) .map(choices -> choices.get(0)) .map(choice -> choice.getMessage().getContent()) .orElseThrow(() -> new RuntimeException("Empty response")); } }
request类和response类 package com.ahhxkj.djps.config; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; @Data @Builder @NoArgsConstructor @AllArgsConstructor public class ChatRequest { private String model; private List<Message> messages; private Double temperature; private Integer max_tokens; @Data @NoArgsConstructor @AllArgsConstructor public static class Message { private String role; private String content; } } package com.ahhxkj.djps.config; import lombok.Data; import java.util.List; @Data public class ChatResponse { private String id; private String object; private Integer created; private String model; private List<Choices> choices; private Usage usage; private String system_fingerprint; @Data public static class Choices { private Integer index; private Message message; private String logprobs; private String finish_reason; @Data public static class Message { private String role; private String content; } } @Data public static class Usage { private Integer prompt_tokens; private Integer completion_tokens; private Integer total_tokens; private Prompt_tokens_details prompt_tokens_details; private Integer prompt_cache_hit_tokens; private Integer prompt_cache_miss_tokens; @Data public static class Prompt_tokens_details { private Integer cached_tokens; } } }
config import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @Data @Configuration public class DeepSeekConfig { private String apiKey="sk-XXXXX";//填写申请的apiKey private String apiUrl="https://api.deepseek.com/chat/completions"; private String model="deepseek-chat"; private Double temperature=0.7; private Integer maxTokens=1000; }
没充钱报错
[INFO ] [06-12 14:37:32] com.ahhxkj.djps.service.deepseek.DeepSeekService :38 - deepseek response: {"error":{"message":"Insufficient Balance","type":"unknown_error","param":null,"code":"invalid_request_error"}} [ERROR] [06-12 14:37:32] com.ahhxkj.djps.service.deepseek.DeepSeekService :44 - Error generating response for query: 你是谁?
来源:
使用java调用deepseek,调用大模型,处理问题。ollama_java调用deepseek接口-CSDN博客
spring-boot-ai-deepseek: SpringBoot2.x(JDK1.8)项目中接入DeepSeek
浙公网安备 33010602011771号