可以申请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

 

posted on 2025-06-12 16:49  MyBeans  阅读(255)  评论(0)    收藏  举报