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":"感冒"}]}'