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":"感冒"}]}'
相关推荐
jasligea17 分钟前
构建个人智能助手
开发语言·python·自然语言处理
kokunka21 分钟前
【源码+注释】纯C++小游戏开发之射击小球游戏
开发语言·c++·游戏
C雨后彩虹25 分钟前
CAS与其他并发方案的对比及面试常见问题
java·面试·cas·同步·异步·
云栖梦泽1 小时前
易语言开发从入门到精通:补充篇·网络编程进阶+实用爬虫开发·API集成·代理IP配置·异步请求·防封禁优化
开发语言
java1234_小锋1 小时前
Java高频面试题:SpringBoot为什么要禁止循环依赖?
java·开发语言·面试
铅笔侠_小龙虾2 小时前
Flutter Demo
开发语言·javascript·flutter
2501_944525542 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 账户详情页面
android·java·开发语言·前端·javascript·flutter
计算机学姐2 小时前
基于SpringBoot的电影点评交流平台【协同过滤推荐算法+数据可视化统计】
java·vue.js·spring boot·spring·信息可视化·echarts·推荐算法
福大大架构师每日一题2 小时前
ComfyUI v0.11.1正式发布:新增开发者专属节点支持、API节点强化、Python 3.14兼容性更新等全方位优化!
开发语言·python
wangdaoyin20102 小时前
若依vue2前后端分离集成flowable
开发语言·前端·javascript