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":"感冒"}]}'
相关推荐
星火开发设计几秒前
Java面向对象三大特性:封装、继承与多态的深度解析及实战
java·开发语言·microsoft·多态·继承·面向对象·封装
hhzz8 分钟前
EasyPoi的核心映射工具:@Excel注解详解
java·服务器·excel·springboot·easypoi
码农小卡拉16 分钟前
数据库:主键 VS 唯一索引 区别详解
java·数据库·sql
旅途中的宽~17 分钟前
【Python】pip install -v e .命令不想自动更新torch版本
开发语言·python·pip
lly20240619 分钟前
Vue3 指令详解
开发语言
_OP_CHEN33 分钟前
【从零开始的Qt开发指南】(二十三)Qt 界面优化之 QSS 实战指南:从入门到精通,让你的界面颜值飙升!
开发语言·c++·qt·前端开发·界面美化·qss·客户端开发
e***985736 分钟前
Java性能优化实战:从原理到案例
java·开发语言·性能优化
HellowAmy38 分钟前
我的C++规范 - 跳跃的对象
开发语言·c++·代码规范
lph00939 分钟前
QtMqtt 的编译与QT环境加载配置
开发语言·qt
焦糖玛奇朵婷1 小时前
盲盒小程序:开发视角下的功能与体验
java·大数据·jvm·算法·小程序