想试试让一个 Java 小工具帮你总结日志,第一步可以很小。先让本地模型回答一句话,看看 HTTP 能不能通、返回长什么样。这个例子用 Ollama 和 JDK 自带的 HttpClient,Java 程序和模型服务都跑在同一台机器上。

先在终端问一句

装好 Ollama 后启动服务。如果桌面应用已经在运行,可以直接用它。需要手动启动时,另开一个终端执行 ollama serve。下面用模型库里的 qwen2.5:1.5b 演示,第一次拉取模型需要网络。

ollama pull qwen2.5:1.5b
ollama list

看到列表里有完整的模型名,再把这个请求存成 UTF-8 编码的 request.json。

{
  "model": "qwen2.5:1.5b",
  "messages": [
    { "role": "user", "content": "用一句话解释什么是 Git 提交。" }
  ],
  "stream": false
}

在这个文件所在目录发送请求。macOS、Linux 或 Git Bash 用 curl,Windows PowerShell 里可以把命令名换成 curl.exe。

curl -sS -i -H "Content-Type: application/json" --data-binary "@request.json" http://127.0.0.1:11434/api/chat

看两处就够了。HTTP 状态应是 200,正文里的 message.content 应有回答。具体文字会变。这里特意关了流式输出,所以返回一份完整 JSON。打开流式输出时,客户端要按行读 JSON,再拼接返回的内容片段。

同一份请求,交给 Java 发一遍

用 JDK 17 或 21,把下面的文件和 request.json 放在同一个目录。示例直接打印响应,方便你跟刚才 curl 拿到的 JSON 对照。

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.time.Duration;

public class OllamaDemo {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(3))
            .build();

        HttpRequest request = HttpRequest.newBuilder(
                URI.create("http://127.0.0.1:11434/api/chat"))
            .header("Content-Type", "application/json")
            .timeout(Duration.ofMinutes(2))
            .POST(HttpRequest.BodyPublishers.ofFile(Path.of("request.json")))
            .build();

        HttpResponse<String> response = client.send(
            request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)
        );

        if (response.statusCode() != 200) {
            throw new IllegalStateException(
                "Ollama HTTP " + response.statusCode() + " " + response.body()
            );
        }

        System.out.println(response.body());
    }
}
java OllamaDemo.java

把它接进项目时,可以复用同一个 HttpClient,用项目现成的 JSON 库读 message.content。本地试验选一段脱敏的日志就够了。如果要用真实业务日志,先约定哪些字段可以交给模型处理,以及输入和输出会留在哪里。

卡住了,就按顺序看

  • 连不上。 在 Java 所在的环境请求 http://127.0.0.1:11434/api/tags。Ollama 默认监听本机回环地址。Java 在容器里时,这个地址指的是容器自身,先确认容器与模型服务的网络边界。
  • 服务通了,模型找不到。 看响应里的错误信息,再比对 ollama list。留意标签也要写全,比如示例里的 :1.5b。
  • 连得上,但回答慢。 第一次可能花时间装载模型。同样的问题可以再问一次,对比返回的 load_duration 和 eval_duration,两项单位都是纳秒。示例里的连接超时和请求超时分别控制两段等待,按实际机器和调用场景调整。

能拿到一条回答后,可以换一段带换行的文本再试。先把输入输出跑稳,再考虑流式展示、对话历史或检索。想看看检索那一段怎么存向量,可以接着读Qdrant 向量数据库入门。

参考资料