大模型学习-让其他电脑可访问本地ollama的模型并进行流式响应
目录
让其他电脑可访问本地ollama
流式响应
让其他电脑可访问本地ollama
默认情况下,其他电脑不能直接访问本地 Ollama 服务。
解决方法:让 Ollama 监听局域网地址,而不是 localhost
我们可以让 Ollama 监听局域网 IP,在 Ollama 服务器上运行:
set OLLAMA_HOST=0.0.0.0:11434
ollama serve
注意:这种方式只对当前 CMD 窗口有效,关闭窗口后就会失效。
如果你希望 每次打开 CMD 或 PowerShell 都能自动使用该设置,可以永久设置环境变量:
在 CMD (以管理员身份打开)里运行:
setx OLLAMA_HOST "0.0.0.0:11434" /M
然后重新启动 CMD 并运行:
ollama serve
这样 Ollama 就会监听 0.0.0.0,让局域网的其他设备访问了。
可以运行以下命令检查:
echo %OLLAMA_HOST%
如果输出 0.0.0.0:11434
,说明已经成功设置。
流式响应
下面是一个流式响应的测试案例。其中的your_ip改为部署ollama的电脑的局域网ip。局域网ip可通过命令ipconfig查询,yuanshenQA32是我的ollama下载的模型。
import okhttp3.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.concurrent.TimeUnit;
public class OllamaApiClient {
private static final String API_URL = "http://your_ip:11434/api/generate";
private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
private final OkHttpClient client = new OkHttpClient.Builder()
.readTimeout(0, TimeUnit.SECONDS) // 允许流式响应不超时
.build();
public void generateTextStream(String model, String prompt) {
String jsonBody = "{\"model\": \"" + model + "\", \"prompt\": \"" + prompt + "\", \"stream\": true}";
RequestBody body = RequestBody.create(jsonBody, JSON);
Request request = new Request.Builder()
.url(API_URL)
.post(body)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
System.err.println("请求失败:" + e.getMessage());
}
@Override
public void onResponse(Call call, Response response) {
if (!response.isSuccessful()) {
System.err.println("响应错误:" + response);
return;
}
try (BufferedReader reader = new BufferedReader(new InputStreamReader(response.body().byteStream()))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line); // 实时打印返回内容
}
} catch (IOException e) {
System.err.println("读取流失败:" + e.getMessage());
}
}
});
}
public static void main(String[] args) {
OllamaApiClient client = new OllamaApiClient();
client.generateTextStream("yuanshenQA32:latest", "已知一个数 x,满足以下等式:3(x+2)−2(x−1)=4x+5。请解出 x 的值");
}
}
运行后,打开控制台,可以观察到控制台会不断打印响应内容: