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;
    }
}

点击阅读全文
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐