找回密码
 立即注册
首页 业界区 安全 Windows本地部署和运行Deepseek且如何在Java程序中调用D ...

Windows本地部署和运行Deepseek且如何在Java程序中调用DeepSeek

怃膝镁 5 小时前
前言

为什么要进行本地部署大模型?

本地部署 DeepSeek 主要是为了保障数据隐私安全、实现低延迟离线运行、降低长期使用成本、满足行业合规要求以及支持深度定制化开发。
一、下载及安装


  • 访问Ollama进行下载
    1.png

  • 系统选择(这里我们以Windows为例)
    2.png

  • 下载安装
    如果我们下载好默认安装的话会直接安装到D盘,我们直接cmd打开命令窗口输入。
    D:\>OllamaSetup.exe /DIR=D:\Ollama
    这样我们就会安装到指定的D盘Ollama的目录下了。
    安装以后我打开命令窗口输入 ollama -v查看版本信息如果存在即安装成功,我们顺手再输入ollama list查看模型信息发现为空
    3.png

二、配置环境变量

设置OLLAMA_HOST的作用是为了允许局域网内其他设备访问本地Ollama服务
4.png

如果我们对下载模型地址没要求,直接下载模型即可,如果要配置首先我们Quit Ollama,退出Ollama然后去环境变量中配置模型下载地址如下新建OLLAMA_MODELS这个环境变量
5.png

三、模型下载

因为各个模型对硬件要求不一致,所以我简单列出了各个模型的区别
模型版本参数数量文件大小适用场景优点缺点CPU要求内存要求显卡(英伟达40/50系列)1.5B1.5B1.1GB资源有限的环境文件较小,易于下载和部署性能较低,适用于较简单的任务4核及以上8GB+RTX 4060 8GB(可选,纯CPU也可运行)7B7B4.7GB需要较高性能的任务平衡了性能和文件大小,适用范围广泛相比小模型,仍需要较强的硬件支持8核及以上16GB+RTX 4060 Ti 16GB 或 RTX 4070 12GB8B8B4.9GB中等性能需求的任务性能好,适合大部分NLP任务文件大小较大,部署时需要较大存储空间8核及以上16GB+RTX 4070 Ti 12GB 或 RTX 4080 16GB14B14B9.0GB高性能应用,复杂任务适用于复杂推理和大规模任务需要较强的计算资源和存储支持12核及以上32GB+RTX 4080 16GB 或 RTX 5070Ti 16GB32B32B20GB大规模高负载任务高度优化,能够处理复杂任务对硬件要求极高,计算资源消耗大16核及以上64GB+RTX 4090 24GB(需INT4量化)70B70B43GB超高性能任务,科研应用极高的计算能力和性能,适用于尖端研究对硬件和存储要求非常苛刻,下载和运行困难24核及以上128GB+2×RTX 4090 24GB(SLI)或 RTX 5090671B671B404GB超大规模高复杂度任务性能最强,适用于最复杂的应用和任务极高的硬件需求,几乎只适用于大型数据中心64核及以上512GB+4×RTX 4090 24GB(集群)就拿我的设备为例:显卡5070Ti 16GB CPU i7-14700KF(14核20线程) 64GB 最好的就是14B的模型。
然后我们去官网去准备下载
6.png

7.png

8.png

到下面这个页面我们就可以获取相对应下载模型的指令
9.png

下载好以后输入ollama list,r如果如下就显示安装成功
10.png

如果我们之前有配置地址那么模型下载的地址就在我们配置的环境变量的地址里面,否则就在C盘的文件中。
四、下载设置可视化聊天

访问Chatbox官网https://chatboxai.app/zh
11.png

下载好打开后我们这里设置之前我们设置的本地访问的路径
12.png

这里我们对模型设置要求
13.png

五、Java代码调用本地模型

首先我们先保证ollama是开启的,打开cmd,输入ollama serve,如果显示如下则成功,失败则再重新检查。
14.png

紧接着我们要开始配置模型和路径地址,模型我们可以在cmd输入我们的ollama list查看所有可用的模型,然后加上我们之前设置的本地访问路径
15.png

最后将完整代码附上,如下
  1. package com.example.demo.chat;
  2. import com.alibaba.fastjson.JSONObject;
  3. import cn.hutool.http.HttpRequest;
  4. import cn.hutool.http.HttpResponse;
  5. import org.apache.hc.core5.http.HttpHeaders;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. public class ChatDemo {
  9.     private static final Logger log = LoggerFactory.getLogger(ChatDemo.class);
  10.     // Ollama本地聊天API地址(固定)
  11.     private static final String OLLAMA_CHAT_ENDPOINT = "http://localhost:11434/api/chat";
  12.     // 本地部署的DeepSeek模型名称(需与ollama list显示一致)
  13.     private static final String DEEPSEEK_MODEL = "deepseek-r1:14b";
  14.     /**
  15.      * 调用本地DeepSeek模型进行对话
  16.      * @param body 传入符合Ollama格式的JSON字符串,例如:
  17.      *             {"messages":[{"role":"user","content":"你的问题"}]}
  18.      * @return 模型生成的响应文本
  19.      */
  20.     public String chat(String body) {
  21.         String result = null;
  22.         try {
  23.             // 1. 发送POST请求(移除Authorization头,使用本地Ollama地址)
  24.             HttpResponse response = HttpRequest.post(OLLAMA_CHAT_ENDPOINT)
  25.                     .header(HttpHeaders.CONTENT_TYPE, "application/json")
  26.                     .body(appendModelToBody(body))
  27.                     .timeout(60000)
  28.                     .execute();
  29.             // 2. 处理响应结果
  30.             result = response.body();
  31.             log.debug("Ollama API返回原始数据:{}", result);
  32.             if (!response.isOk()) {
  33.                 log.error("本地模型调用失败,状态码:{},响应:{}", response.getStatus(), result);
  34.                 return null;
  35.             }
  36.             // 3. 解析Ollama响应,提取message.content字段
  37.             JSONObject jsonResult = JSONObject.parseObject(result);
  38.             if (jsonResult.getBooleanValue("done")) {
  39.                 return jsonResult.getJSONObject("message").getString("content");
  40.             } else {
  41.                 log.error("模型生成未完成,响应:{}", result);
  42.                 return null;
  43.             }
  44.         } catch (Exception e) {
  45.             log.error("调用本地DeepSeek模型发生异常", e);
  46.             // 常见错误提示
  47.             if (e.getMessage().contains("Connection refused")) {
  48.                 log.error("解决方案:请先启动Ollama服务(命令:ollama serve)并检查11434端口是否占用");
  49.             } else if (result != null && result.contains("model not found")) {
  50.                 log.error("解决方案:请执行命令下载模型:ollama pull deepseek-r1:14b");
  51.             }
  52.             return null;
  53.         }
  54.     }
  55.     private String appendModelToBody(String body) {
  56.         JSONObject jsonBody = JSONObject.parseObject(body);
  57.         if (!jsonBody.containsKey("model")) {
  58.             jsonBody.put("model", DEEPSEEK_MODEL);
  59.         }
  60.         // 确保关闭流式响应
  61.         if (!jsonBody.containsKey("stream")) {
  62.             jsonBody.put("stream", false);
  63.         }
  64.         return jsonBody.toString();
  65.     }
  66.     // 测试方法
  67.     public static void main(String[] args) {
  68.         ChatDemo client = new ChatDemo();
  69.         // 构造符合要求的请求体
  70.         String requestBody = "{"messages":[{"role":"user","content":"用Java写一个冒泡排序算法"}]}";
  71.         String response = client.chat(requestBody);
  72.         System.out.println("本地DeepSeek模型响应:\n" + response);
  73.     }
  74. }
复制代码
好啦以上就是本期的全部内容

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册