JAVA调用deepSeek demo

1.新建一个项目在 IDEA 中,maven 项目,IDEA 的版本最好在2202 之后,支持spring AI 。

deepseek 需要用到用户自己的key, 此key 主要是用来计费的,用户需要充值才能使用。

https://platform.deepseek.com/api_keys

maven. pom.xml 需要的依赖如:

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>4.0.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>LLM01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>LLM01</name>
    <description>LLM01</description>
    <url/>


    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webmvc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webmvc-test</artifactId>
            <scope>test</scope>
        </dependency>
            <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp</artifactId>
                <version>3.14.9</version>
            </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.15.3</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-math3</artifactId>
            <version>3.6.1</version>
        </dependency>
        <dependency>
            <groupId>com.theokanning.openai-gpt3-java</groupId>
            <artifactId>service</artifactId>
            <version>0.18.2</version> <!-- 请检查最新版本 -->
        </dependency>
        <dependency>
            <groupId>com.theokanning.openai-gpt3-java</groupId>
            <artifactId>api</artifactId>
            <version>0.18.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
            <version>1.0.0-M6</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.15.2</version>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>5.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>7.0.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.20.1</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

1.编写一下调用deepceek 的工具类。

java 复制代码
package com.example.llm01;


import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import okhttp3.*;
import org.apache.commons.math3.linear.RealVector;
import org.springframework.ai.embedding.EmbeddingResponse;

import java.io.IOException;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * DeepSeek 的工具类
 */
public class LLMUtils {

    private static final String BASE_URL = "https://api.deepseek.com";
    private static final String COMPLETION_URL = BASE_URL + "/chat/completions";
    private static final String API_KEY = "sk-4dcda1921abf4378aae8e38xxxx1c73a"; // 替换为你的 key

    /**
     * 文本生成模型接口
     *
     * @param prompt 用户输入内容
     * @param model  模型名称(如 deepseek-chat)
     * @return 返回生成的文本
     */
    public static String completion(String prompt, String model) {
        if (model == null || model.isEmpty()) {
            model = "deepseek-chat";
        }

        OkHttpClient client = new OkHttpClient().newBuilder()
                .readTimeout(50, TimeUnit.SECONDS)
                .connectTimeout(50, TimeUnit.SECONDS)
                .build();

        MediaType mediaType = MediaType.parse("application/json");
//        You are a helpful assistant
        //   "content": "你是一位历史学家,需要逐步回答问题。请按照以下步骤完成:1. 确定问题的核心内容。2. 提供关于问题中涉及的历史事件的简要背景。3. 分析该事件的主要原因。 4. 解释该事件对历史发展的主要影响。5. 总结回答。"
        String jsonBody = String.format("""
                {
                  "messages": [
                  {
                      "role": "system",
                      "content": "你是一个虚拟助手。用户问:'我今天应该穿什么衣服?' 你需要根据天气情况给出建议。步骤1:查询天气。步骤2:根据天气给出建议。"
                  },
                    {
                      "role": "user",
                      "content": "%s"
                    }
                  ],
                  "model": "%s",
                  "max_tokens": 2048,
                  "temperature": 1,
                  "top_p": 1,
                  "frequency_penalty": 0,
                  "presence_penalty": 0,
                  "stream": false,
                  "tool_choice": "none",
                  "logprobs": false,
                  "response_format": {
                    "type": "text"
                  }
                }
                """, prompt.replace("\"", "\\\""), model);

        RequestBody body = RequestBody.create(mediaType, jsonBody);
        Request request = new Request.Builder()
                .url(COMPLETION_URL)
                .method("POST", body)
                .addHeader("Content-Type", "application/json")
                .addHeader("Accept", "application/json")
                .addHeader("Authorization", "Bearer " + API_KEY)
                .build();

        try {
            Response response = client.newCall(request).execute();
            String json = response.body().string();

            // 解析返回的内容
            ObjectMapper mapper = new ObjectMapper();
            JsonNode root = mapper.readTree(json);
            JsonNode choices = root.get("choices");
            if (choices != null && choices.isArray() && choices.size() > 0) {
                return choices.get(0).get("message").get("content").asText();
            }
            return "No response content found.";
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }
   }

以下是 JsonBody的运行内容:把用户提问,进行了替换

XML 复制代码
{
  "messages": [
  {
      "role": "system",
      "content": "你是一个虚拟助手。用户问:'我今天应该穿什么衣服?' 你需要根据天气情况给出建议。步骤1:查询天气。步骤2:根据天气给出建议。"
  },
    {
      "role": "user",
      "content": "我今天应该穿什么衣服?"
    }
  ],
  "model": "deepseek-chat",
  "max_tokens": 2048,
  "temperature": 1,
  "top_p": 1,
  "frequency_penalty": 0,
  "presence_penalty": 0,
  "stream": false,
  "tool_choice": "none",
  "logprobs": false,
  "response_format": {
    "type": "text"
  }
}

3.调用验证

java 复制代码
import com.example.llm02.EmbeddingUtils;
import okhttp3.*;
import org.apache.commons.math3.linear.ArrayRealVector;
import org.apache.commons.math3.linear.RealVector;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class DeepSeekDemo {
// https://blog.csdn.net/HUANGXIN9898/article/details/149278215
    public static void main(String[] args) throws Exception {
        String result = LLMUtils.completion("我今天应该穿什么衣服?", "deepseek-chat");

       //  String result = LLMUtils.completion("请描述第二次世界大战的起因,并分析其对世界格局的影响。", "deepseek-chat");
        System.out.println(result);
//        test1();
//        test2();

    }


}

调用成功

使用命令也可以直接调用deepseek:

https://api-docs.deepseek.com/zh-cn/

XML 复制代码
curl https://api.deepseek.com/chat/completions  -H "Content-Type: application/json" -H "Authorization: Bearer sk-c1c599024cf54d59b83cce35xxxxdaf9" -d '{"model": "deepseek-chat", "messages": [{"role": "system", "content":"医生"}, {"role": "user", "content":"感冒"}]}'
相关推荐
9稳2 小时前
基于PLC的液体自动混合加热控制系统设计
开发语言·网络·数据库·labview·plc
爱吃山竹的大肚肚2 小时前
Spring Boot 与 Apache POI 实现复杂嵌套结构 Excel 导出
java·spring boot·后端·spring·spring cloud·excel
Aevget2 小时前
Python开发利器PyCharm v2025.3全新发布——支持主动数据探索
开发语言·ide·python·pycharm
SadSunset2 小时前
(35)使用Spring的AOP
java·数据库·spring
mangge082 小时前
批量把word转图片再转pdf,防止文字被复制
开发语言
better_liang2 小时前
每日Java面试场景题知识点之-Spring AI企业级AI应用开发
java·面试题·智能客服·ai应用·spring ai·企业级开发
小c君tt2 小时前
QT中treewidget中右键添加QAction方法
开发语言·qt
HUST2 小时前
C 语言 第九讲:函数递归
c语言·开发语言·数据结构·算法·c#
CodeCraft Studio2 小时前
国产化Word处理控件Spire.Doc教程:使用C# 编程方式批量转换Word为RTF
开发语言·c#·word·spire.doc·word文档转换·word开发组件·word api库