当前位置: 首页 > news >正文

大模型学习-让其他电脑可访问本地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 的值");
    }
}

运行后,打开控制台,可以观察到控制台会不断打印响应内容:

相关文章:

  • AMD锐龙8845HS+780M核显 虚拟机安装macOS 15 Sequoia 15.0.1 (2024.10)
  • 【ELK】节省存储 之 压缩存储方式调整
  • element-ui image 组件源码分享
  • cls(**dict(data, id=id))灵活地从一个字典生成实例,同时确保某些关键字段(如 id)被正确设置或覆盖
  • 问deepseek: 如何用CUDA实现PBiCGSTAB稀疏矩阵迭代算法,写段示例代码
  • OLE注册是什么?
  • 博客图床 VsCode + PicGo + 阿里云OSS
  • $.ajax的contentType设置及对应后端数据获取方式
  • ViT、DETR 和 Swin Transformer :基于 Transformer 的计算机视觉(CV)模型
  • vmware tools灰化
  • Unity打包的WebGL包打不开问题解决方案,以及WebGL包嵌入至Vue2中的步骤
  • QT程序双击可执行文件运行方法
  • vue3 引入element-plus组件后,发现输入的时候没有提示,而且鼠标移到el-button显示unknown的简单解决方法
  • 【谷粒商城踩坑记】第四坑 nacos 闪退问题
  • python 库笔记:pytorch-tcn
  • vue的绑定
  • 单片机开发资源分析的实战——以STM32G431RBT6为例子的单片机资源分析
  • Zabbix—企业微信报警群通消息通知
  • Doris:联邦认证
  • 新安装的cursor安装不了插件
  • 市场监管总局:2024年查办商标、专利等领域违法案件4.4万件
  • 石家庄:城市更新,生活向美
  • 保利发展去年净利润约50亿元,在手现金1342亿元
  • 湖州通告13批次不合格食品,盒马1批次多宝鱼甲硝唑超标
  • 印方称与巴基斯坦军队在克什米尔交火
  • 京东美团开打,苦了商家?