DeepSeek-r1模型本地部署整合java案例
点击Download(根据自身需求下载)由于下载非常慢提供一个百度网盘下载地址(Windows)通过网盘分享的文件:ollama链接:提取码: 7f6m。
·
ollama安装
进入官网:Ollama
点击Download(根据自身需求下载)
由于下载非常慢提供一个百度网盘下载地址(Windows)
通过网盘分享的文件:ollama链接: 百度网盘 请输入提取码 提取码: 7f6m
Windows安装ollama点击下一步即可
ollama常用命令
启动ollama服务
ollama serve
查看正在运行的模型
ollama ps
查看本地模型列表
ollama list
运行模型
ollama run deepseek-r1:7b
deepseek-r1:7b 模型版本,本地不存在会先下载
删除模型
ollama rm 模型名称
停止运行模型
ollama stop
整合Java
映入依赖
<!--okhttp-->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.3</version> <!-- 请根据需要选择合适的版本 -->
</dependency>
代码案例
package com.lg.template.deepseek;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.lg.template.deepseek.vo.request.DeepSeekRequest;
import com.lg.template.deepseek.vo.response.DeepSeekResponse;
import okhttp3.*;
public class Test {
public static void main(String[] args) throws IOException {
// DeepSeek本地地址
String url = "http://127.0.0.1:11434/api/chat";
/**
* 创建DeepSeekRequest对象 属性注解均在实体类中
* 官方案例文档地址:https://api-docs.deepseek.com/zh-cn/api/create-chat-completion
*/
DeepSeekRequest requestObject = new DeepSeekRequest();
List<DeepSeekRequest.Message> messages = new ArrayList<>();
// 添加消息 根据自身情况调整
messages.add(new DeepSeekRequest.Message("写一段关于蛇年的祝福语", "user"));
requestObject.setMessages(messages);
// 模型 根据自身情况调整
requestObject.setModel("deepseek-r1:7b");
requestObject.setFrequency_penalty(0);
requestObject.setMax_tokens(2048);
requestObject.setPresence_penalty(0);
requestObject.setResponse_format(new DeepSeekRequest.ResponseFormat("text"));
requestObject.setStop(null);
requestObject.setStream(false);
requestObject.setStream_options(null);
requestObject.setTemperature(1);
requestObject.setTop_p(1);
requestObject.setTools(null);
requestObject.setTool_choice("none");
requestObject.setLogprobs(false);
requestObject.setTop_logprobs(null);
// 使用Gson将请求对象转换为JSON字符串
Gson gson = new Gson();
String jsonBody = gson.toJson(requestObject);
// 创建OkHttpClient实例,并设置超时时间
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(300, java.util.concurrent.TimeUnit.SECONDS)
.readTimeout(300, java.util.concurrent.TimeUnit.SECONDS)
.writeTimeout(300, java.util.concurrent.TimeUnit.SECONDS)
.build();
// 设置请求体的媒体类型为JSON
MediaType mediaType = MediaType.parse("application/json");
// 创建请求体,包含JSON字符串
RequestBody body = RequestBody.create(mediaType, jsonBody);
// 创建HTTP POST请求
Request request = new Request.Builder()
.url(url)
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "application/json")
.build();
// 发送请求并获取响应
Response response = client.newCall(request).execute();
// 打印响应体内容
System.out.println(response.body().string());
// 将响应体内容转换为DeepSeekResponse对象
// DeepSeekResponse deepSeekResponse = gson.fromJson(response.body().string(), DeepSeekResponse.class);
// System.out.println(deepSeekResponse.getMessage().getContent());
}
}
入参对象
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DeepSeekRequest {
/**
* 消息列表,包含对话中的消息对象
*/
private List<Message> messages;
/**
* 模型名称,指定要使用的模型
*/
private String model;
/**
* 频率惩罚,用于减少重复内容的概率
* 介于 -2.0 和 2.0 之间的数字。如果该值为正,那么新 token 会根据其在已有文本中的出现频率受到相应的惩罚,降低模型重复相同内容的可能性
*/
private double frequency_penalty;
/**
* 最大生成的令牌数
* 介于 1 到 8192 间的整数,限制一次请求中模型生成 completion 的最大 token 数。输入 token 和输出 token 的总长度受模型的上下文长度的限制。
* 如未指定 max_tokens参数,默认使用 4096
*/
private int max_tokens;
/**
* 存在惩罚,用于增加新话题的概率
*/
private double presence_penalty;
/**
* 响应格式,指定返回的响应格式
*/
private ResponseFormat response_format;
/**
* 停止序列,指定生成文本时的停止条件
*/
private Object stop;
/**
* 是否流式返回结果
*/
private boolean stream;
/**
* 流式选项,指定流式返回的选项
* stream 为 true 时,才可设置此参数
*/
private Object stream_options;
/**
* 温度,控制生成文本的随机性
* 介于 0 和 2 之间的数字,值越低,更加准确
*/
private double temperature;
/**
* 核采样参数,控制生成文本的多样性
*/
private double top_p;
/**
* 工具列表,指定可用的工具
*/
private Object tools;
/**
* 工具选择,指定使用的工具
*/
private String tool_choice;
/**
* 是否返回对数概率
*/
private boolean logprobs;
/**
* 对数概率选项,指定返回的对数概率选项
*/
private Object top_logprobs;
/**
* 消息对象,包含单个消息的内容和角色
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Message {
/**
* 消息内容
*/
private String content;
/**
* 消息角色,例如 "system" 或 "user"
*/
private String role;
}
/**
* 响应格式对象,指定返回的响应格式类型
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class ResponseFormat {
/**
* 响应格式类型,例如 "text"
*/
private String type;
}
}
响应对象
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DeepSeekResponse {
/**
* API 模型名称,标识使用的模型版本。
*/
private String model;
/**
* 响应创建时间,格式为 ISO 8601 标准的时间戳。
*/
private String createdAt;
/**
* 消息内容,包含角色和具体内容。
*/
private Message message;
/**
* 完成原因,表示请求完成的具体原因。
*/
private String doneReason;
/**
* 是否完成,表示请求是否成功完成。
*/
private boolean done;
/**
* 总持续时间,单位为纳秒,表示整个请求处理的总时间。
*/
private long totalDuration;
/**
* 加载持续时间,单位为纳秒,表示加载阶段的耗时。
*/
private long loadDuration;
/**
* 提示评估次数,表示提示评估的次数。
*/
private int promptEvalCount;
/**
* 提示评估持续时间,单位为纳秒,表示提示评估的总耗时。
*/
private long promptEvalDuration;
/**
* 评估次数,表示总的评估次数。
*/
private int evalCount;
/**
* 评估持续时间,单位为纳秒,表示总的评估耗时。
*/
private long evalDuration;
/**
* 内部静态类,用于封装消息内容。
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class Message {
/**
* 消息的角色,例如 "system" 或 "user"。
*/
private String role;
/**
* 消息的具体内容。
*/
private String content;
}
}
点击阅读全文
更多推荐
所有评论(0)