想试试让一个 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 向量数据库入门。
参考资料
想让 Java 调本地模型,先用 Ollama 跑通一句话
https://java.li/archives/java-ollama-local-model
评论