一、作者本地环境

操作系统:Windows11

开发工具:IntelliJ IDEA

JDK:JAVA1.8

大模型:ollama、deepseek-8b

作者电脑配置:

二、安装Ollama

  1. 下载 Ollama:访问Ollama 官方网站,点击 “Download” 下载应用程序,选择 Windows 版本进行下载。

2.安装 Ollama:双击下载的.exe文件,按照安装向导的提示完成安装。(不过多赘述)

3.验证安装:打开命令提示符(CMD)或 PowerShell,输入ollama --version,若显示 Ollama 的版本信息,则说明安装成功。

注,如果找不到,配置一下环境变量。

4.启动 Ollama 服务:在命令提示符或 PowerShell 中输入ollama serve,启动 Ollama 服务。

5.下载大语言模型:访问 Ollama 模型库,选择想要部署的模型,使用ollama pull [模型名称]命令进行下载。例如,ollama pull deepseek-r1:8b

6.运行模型:输入ollama run [模型名称]命令来运行模型,进入大语言模型交互式对话模式,输入问题即可获得模型回复。例如,ollama run deepseek-r1:8b

三、JAVA接口调用

关键代码:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class OllamaChat {
    private static final String OLLAMA_API_URL = "http://localhost:11434/api/generate";
    private static final String MODEL_NAME = "deepseek-r1:8b";
    private static final ObjectMapper mapper = new ObjectMapper();

    private final List<String> chatHistory = new ArrayList<>();

    public static void main(String[] args) throws IOException {
        OllamaChat chat = new OllamaChat();
        Scanner scanner = new Scanner(System.in);

        System.out.println("开始对话(输入'exit'退出):");
        while (true) {
            System.out.print("用户: ");
            String input = scanner.nextLine();

            if ("exit".equalsIgnoreCase(input)) break;

            chat.sendChatRequest(input);
        }
        scanner.close();
    }

    private void sendChatRequest(String userInput) throws IOException {
        // 添加用户输入到历史
        chatHistory.add("用户: " + userInput);

        // 构造请求体
        String prompt = String.join("\n", chatHistory) + "\n助手: ";
        String requestBody = String.format(
                "{\"model\": \"%s\", \"prompt\": \"%s\", \"stream\": true}",
                MODEL_NAME, escapeJson(prompt));

        // 发送HTTP请求
        HttpURLConnection connection = (HttpURLConnection) new URL(OLLAMA_API_URL).openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/json");
        connection.setDoOutput(true);

        try (OutputStream os = connection.getOutputStream()) {
            os.write(requestBody.getBytes());
            os.flush();
        }
//        System.out.println("打印请求json:"+requestBody);
        // 处理响应
        if (connection.getResponseCode() != 200) {
            throw new IOException("请求失败: HTTP " + connection.getResponseCode());
        }

        StringBuilder responseText = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
            String line;
            while ((line = reader.readLine()) != null) {
                if (!line.isEmpty()) {
                    JsonNode responseJson = mapper.readTree(line);
                    String partialResponse = responseJson.get("response").asText();
                    responseText.append(partialResponse);
                    System.out.print(partialResponse);
                    System.out.flush();
                }
            }
        }
        System.out.println();

        // 添加助手响应到历史
        chatHistory.add("助手: " + responseText.toString());
    }

    // 处理JSON特殊字符转义
    private String escapeJson(String input) {
        return input.replace("\\", "\\\\")
                .replace("\"", "\\\"")
                .replace("\n", "\\n")
                .replace("\r", "\\r")
                .replace("\t", "\\t");
    }
}

Logo

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

更多推荐