大模型-本地化部署调用--基于ollama+openWebUI+springBoot

大模型-本地化部署调用–基于ollama+openWebUI+springBoot

前言

前段时间,啊,可能不是前段时间,过去的2024年吧,大模型这块的内容也是非常火的,各家巨头也开始卷大模型的研发。那么本人呢也在过去的一年中也是用到了一些比较优秀的产品,比如通译灵码,Fitten Code等等大模型工具辅助开发.

近期在逛小破站的时候呢,了解到了大模型的本地部署以及局域网访问等相关内容,然后感觉也比较有意思,我个人试着操作了一下,一些过程,踩坑内容想与各位道友一起分享,随著次篇,又不大合适的地方,还请各位道友见谅.


本篇呢主要是分为这几大模块

  • ollama了解及部署
  • 大模型开源可视化界面openWebUI部署
  • Spring-boot 调用

那么废话不多说,实践直接走起来


一、ollama

1.ollama本地大模型简介

最近又一次了解本地模型的玩法,从小破站了解到了 ollama,经过几天业余时间的研究及了解,发现现在模型本地化的玩法。

请添加图片描述

先来记录一些 ollama 相关的快链:

  • 项目地址:ollama-github
  • 官网地址: ollama offical
  • 模型仓库: Ollama model lib
  • 官方 logo 是一只可爱的羊驼

请添加图片描述

一句话来说, Ollama 是一个基于 Go 语言开发的简单易用的本地大语言模型运行框架。可以将其类比为 docker(同基于 cobra包实现命令行交互中的 list,pull,push,run 等命令),事实上它也的确制定了类 docker 的一种模型应用标准,在后边的内容中,你能更加真切体会到这一点。

在管理模型的同时,它还基于 Go 语言中的 Web 框架 gin提供了一些 Api 接口,让你能够像跟 OpenAI 提供的接口那样进行交互。

2.ollama玩法

ollama linux部署

ollama官方提供了一种简单的安装方法,只需一行命令即可完成安装,但是对于想要更深入了解和自定义安装的用户,我们也提供了手动安装的步骤。

快速安装

ollama的安装极为简单,只需在终端中执行以下命令:

curl -fsSL https://ollama.com/install.sh | sh

但是这个方式在我自己的服务器安装时,老是报错连接超时…可能得需要一些魔法才可以进行安装;

那么有魔法的小伙伴可直接安装,没有魔法的直接转至手动安装即可

手动安装 (博主亲测)
  • 首先访问 ollama linux 官网说明
  • 点击下载下载对应的包,这里可以自己选择,我是要安装在我自己的服务器上,所以选择linux下载

请添加图片描述

请添加图片描述

  • 复制https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz 在浏览器打开,等待下载完成后 ,上传至服务器指定文件夹中

  • 进入刚才上传.tgz文件目录中,执行

    sudo tar -C /usr -xzf ollama-linux-amd64.tgz
    
  • 将 .tgz文件解压到usr下

  • 解压完成后,运行

    ollama serve
    
  • 随后新开窗口执行

  • ollama -v
    
  • 查看ollama版本号

  • 如果出现如下界面说明ollama下载安装完成

请添加图片描述

接下来将ollama注册为一个服务并配置开机自启

  • 执行

  • #进入/etc/systemd/system
    cd /etc/systemd/system/
    #编辑ollama.service 文件
    vim ollama.service
    
  • 填写如下配置信息,我看官方给出的内容中还进行了用户及用户组的配置,我们这边直接指定root进行即可

  • [Unit]
    Description=Ollama Service #服务的描述,这里说明这是一个 Ollama 服务。
    After=network-online.target #指定服务在网络在线之后启动。[Service]
    ExecStart=/usr/bin/ollama serve #指定启动服务时要运行的命令
    User=root #指明运行这个服务的用户是 root
    Group=root
    Restart=always
    RestartSec=3 #指定服务退出后,重启之前等待的时间为 3 秒。
    Environment="OLLAMA_HOST=0.0.0.0:11434" #设置服务运行时的环境变量,这里配置服务监听所有网络接口的 11434 端口,保证远程调用[Install]
    WantedBy=default.target
    
  • 开启服务

  • sudo systemctl daemon-reload #重新加载
    sudo systemctl enable ollama #启动
    sudo systemctl start ollama #启动
    
  • 启动之后,访问你自己服务器的ip:11434,出现如下界面,即为启动成功~( 各位道友别忘了开放端口哈~)

请添加图片描述

ollama 命令

通过ollama部署章节,我们已经将ollama部署到我们自己的服务器上,通过

ollama

命令可以查看到ollama具体命令

serve:启动 Ollama 服务。

create:根据 Modelfile 创建一个模型。

show:显示某个模型的信息。

run:运行一个模型。

stop:停止一个正在运行的模型。

pull:从注册表中拉取一个模型。

push:将一个模型推送到注册表。

list:列出所有模型。

ps:列出所有正在运行的模型。

cp:复制一个模型。

rm:删除一个模型。

help:显示关于任何命令的帮助信息。

这些命令允许用户通过命令行界面管理 ollama 模型,包括创建、展示、运行、停止、复制、删除模型,以及从和向注册表推送和拉取模型。

感觉和docker的命令有点类似~

ollama 拉取运行本地大模型

通过命令

ollama run XXXX

可以直接拉取模型到部署机器,并执行;首先会检测对应的模型本地是否存在,如果存在直接启动,如果不存在先进行拉取,拉取到本地后在进行构建运行。

Ollama模型仓库地址

在这里可以选择非常多的模型,进行复制命令拉取,左边的下拉框显示的是模型训练的数据集大小,当然模型数据集越大,精度越高,下载空间越大,运行内存越高

请添加图片描述

博主使用的是2c4g的服务器就使用qwen2.5:1.5b进行示例部署启动

请添加图片描述

显示success 后,ollama会自动运行该模型,在选中的>>>中输入问题即可

请添加图片描述

二、openWebUI

Open WebUI 是一种基于 Web 的用户界面,用于管理和操作各种本地和云端的人工智能模型。它提供了一个直观的图形化界面,使用户可以方便地加载、配置、运行和监控各种 AI 模型,而无需编写代码或使用命令行界面。

当然 大模型的可视化界面在github上一搜一大把,我这儿进行集成openWebUI,其他的也是大同小异,道友们自行学习安装哈

1.代码仓库

openWebUI

2.docker&Docker-Compose安装

在此处我将openWebUI 安装在docker容器中,所以对于docker/docker-compose的安装方式各位道友自行学习

3.openWebUI部署

openWebUI 安装在docker容器中,直接进行docker-compose继续部署

执行如下命令进行拉取镜像

docker pull backplane/open-webui:0.1-ollama 

编写docker-compose.yml文件

version: "2.1"
services:
#docker镜像管理可视化界面portainer:image: portainer/portainercontainer_name: portainerports: - "9000:9000"restart: alwaysvolumes: - /var/run/docker.sock:/var/run/docker.sockenvironment:- TZ=Asia/Shanghai#openWebUIopen-webui:image: backplane/open-webui:0.1-ollamacontainer_name: open-webuirestart: alwaysports:- "3000:8080"    #端口映射environment:- OLLAMA_BASE_URL=http://[YOUR IP]:11434 #openwebui 连接本地部署的ollama地址 volumes:- ollama:/root/.ollama- open-webui:/app/backend/data
volumes:ollama:open-webui:networks:share_net:external:name: my_net

编写完成之后,将docker-compose.yml上传至服务器,通过命令进入上传目录,执行

docker-compose up -d

启动openWebUI

请添加图片描述

此时在docker可视化界面【portainer】中可以看到openWebUI的运行状态

请添加图片描述

再通过访问服务器的3000端口(我这儿是3000,道友们可以自定义),可以看到如下界面

请添加图片描述

首次进入需要进行用户注册,注册完成后默认是管理员身份,点击登录即可

请添加图片描述

在左上角可以选择linux服务器上拉取到的大模型,随后便可以进行提问

请添加图片描述

至此呢 本地大模型可视化UI部署已完成,其实还算简单

三、SpringBoot集成ollama

那么作为一名开发者,不仅仅是部署完成就结束了,除了可视化界面之外,在自己的一些项目中也可以集成自己及部署的大模型,在此简述一下SpringBoot集成ollama

其实官方的一些api中比较多的是python以及go的一些调用方式,关于java的调用好像是比减少的。

但是在github中相关的自定义封装工具是比较多的,在此我们简单的配置使用【Olama4j】进行简单调用

olama4j相关文档说明

1.初始化项目

简单的springBoot项目 不在过多赘述

2.集成依赖

  <dependency><groupId>io.github.ollama4j</groupId><artifactId>ollama4j</artifactId><version>1.0.89</version></dependency>

3.项目配置

ai:ollama:host: http://XXXXXX #YOUR IPport: 11434model: qwen2.5-coder:1.5b
package com.jerry.springetcd.config;import io.github.ollama4j.OllamaAPI;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @version 1.0* @Author jerryLau* @Date 2025/1/22 9:25* @注释*/
@Configuration
@Data
public class OllamaConfig {@Value("${ai.ollama.host}")private String host;@Value("${ai.ollama.port}")private int port;@Value("${ai.ollama.model}")private String model;@Beanpublic OllamaAPI generateOllamaClient() {return new OllamaAPI(host+":"+port);}}

4.简单使用

package com.jerry.springetcd.controller;import com.jerry.springetcd.config.OllamaConfig;
import io.github.ollama4j.OllamaAPI;
import io.github.ollama4j.exceptions.OllamaBaseException;
import io.github.ollama4j.models.response.OllamaResult;
import io.github.ollama4j.utils.OptionsBuilder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import java.io.IOException;/*** @version 1.0* @Author jerryLau* @Date 2025/1/22 9:12* @注释*/
@RestController
public class OpenOllamaController {@Resourceprivate OllamaConfig ollama;@PostMapping("/hello")public String sayHello() throws OllamaBaseException, IOException, InterruptedException {OllamaAPI ollamaClient = ollama.generateOllamaClient();OllamaResult hello_world = ollamaClient.generate(ollama.getModel(), "hello world", true,new OptionsBuilder().build());return hello_world.getResponse();}
}

5.运行结果

请添加图片描述


至此 已经完成了ollama的本地化部署,可视化界面部署,简单的java调用

那么对于一些比较生层次的内容,道友们自行参考,自行学习

如果你觉得这边文章对你有用,别忘了一键三连,谢谢 😋😋😋

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/69239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue组件开发-使用 html2canvas 和 jspdf 库实现PDF文件导出 设置页面大小及方向

在 Vue 项目中实现导出 PDF 文件、调整文件页面大小和页面方向的功能&#xff0c;使用 html2canvas 将 HTML 内容转换为图片&#xff0c;再使用 jspdf 把图片添加到 PDF 文件中。以下是详细的实现步骤和代码示例&#xff1a; 步骤 1&#xff1a;安装依赖 首先&#xff0c;在项…

RV1126+FFMPEG推流项目源码

源码在我的gitee上面&#xff0c;感兴趣的可以自行了解 nullhttps://gitee.com/x-lan/rv126-ffmpeg-streaming-projecthttps://gitee.com/x-lan/rv126-ffmpeg-streaming-project

宏_wps_宏修改word中所有excel表格的格式_设置字体对齐格式_删除空行等

需求&#xff1a; 将word中所有excel表格的格式进行统一化&#xff0c;修改其中的数字类型为“宋体&#xff0c; 五号&#xff0c;右对齐&#xff0c; 不加粗&#xff0c;不倾斜”&#xff0c;其中的中文为“宋体&#xff0c; 五号&#xff0c; 不加粗&#xff0c;不倾斜” 数…

ServletOutputStream failed to write: Broken pipe

案发现场 问题&#xff1a; org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to write: Broken pipe org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream …

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测&#xff08;Matlab完整源码和数据&#xff09; 目录 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测&#xff08;Matlab完整源码和数据&#xff09;预测效果基本介绍 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测一…

14-6-2C++STL的list

(一&#xff09;list对象的带参数构造 1.list&#xff08;elem);//构造函数将n个elem拷贝给本身 #include <iostream> #include <list> using namespace std; int main() { list<int> lst(3,7); list<int>::iterator it; for(itlst.begi…

Docker 系列之 docker-compose 容器编排详解

文章目录 前言一、Docker-compose简介二、Docker-compose 的安装三、Docker-compose卸载四、Docker-compose常用命令4.1 Docker-compose命令格式4.2 docker-compose up4.3 docker-compose ps4.4 docker-compose stop4.5 docker-compose -h4.6 docker-compose down4.7 docker-co…

React第二十五章(受控组件/非受控组件)

React 受控组件理解和应用 React 受控组件 受控组件一般是指表单元素&#xff0c;表单的数据由React的 State 管理&#xff0c;更新数据时&#xff0c;需要手动调用setState()方法&#xff0c;更新数据。因为React没有类似于Vue的v-model&#xff0c;所以需要自己实现绑定事件…

转换算术表达式

文章目录 构造二叉树表示的算术表达式&#xff1a;按先序次序输入二叉树中结点的值(操作数及运算符均以一位字符表示&#xff0c;注意转换)&#xff0c; #字符表示空树&#xff0c;如上图的算术表达式 输入2##*3##4## 输入格式 第一行输入表示要计算的算术表达式的二叉树结点的…

[b01lers2020]Life on Mars1

打开题目页面如下 看了旁边的链接&#xff0c;也没有什么注入点&#xff0c;是正常的科普 利用burp suite抓包&#xff0c;发现传参 访问一下 http://5edaec92-dd87-4fec-b0e3-501ff24d3650.node5.buuoj.cn:81/query?searchtharsis_rise 接下来进行sql注入 方法一&#xf…

Linux的udev详解、安装和使用(dev下的设备每次开机的名称不固定怎么办?)

前言&#xff08;问题与需求&#xff09;&#xff1a; 在传统的devfs 1&#xff1a;设备映射的不确定&#xff1a;一个设备多次加载设备的设备文件可能不同&#xff0c;比如一个hub有可能是ttyUSB0或ttyUSB2或ttyUSB3 2&#xff1a;devfs没有足够的主辅设备号&#xff0c;当设…

Linux 内核中的 InfiniBand 核心模块:drivers/infiniband/core/device.c 分析

InfiniBand 是一种高性能、低延迟的网络互连技术,广泛应用于高性能计算(HPC)、数据中心和云计算等领域。Linux 内核中的 InfiniBand 子系统提供了对 InfiniBand 设备的支持,而 drivers/infiniband/core/device.c 文件则是 InfiniBand 核心模块的重要组成部分。本文将对 dev…

如何快速开发LabVIEW项目,成为LabVIEW开发的高手

发现了一篇多年前写的文章&#xff0c;转发到这里 如何快速开发LabVIEW项目&#xff0c;成为LabVIEW开发的高手。 如果您手里有LabVIEW项目&#xff0c;领导催的又很紧&#xff0c;该怎么办&#xff1f; 如果您公司规模小&#xff0c;就想把LabVIEW项目快速搞定&#xff0c;有什…

Zookeeper(27)Zookeeper的CAP理论是什么?

CAP 理论&#xff0c;又称为 Brewer 定理&#xff0c;是分布式系统设计中的一个基本定理。CAP 代表一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容忍性&#xff08;Partition Tolerance&#xff09;。该理论指出&#xff0c;…

CodeForces 611:New Year and Domino ← 二维前缀和

【题目来源】 https://codeforces.com/contest/611/problem/C 【题目描述】 They say "years are like dominoes, tumbling one after the other". But would a year fit into a grid? I dont think so. Limak is a little polar bear who loves to play. He has r…

数组

数组 栈区的空间很有限&#xff0c;静态区的空间大些&#xff0c;一般在静态区去申请较大的空间 考虑特例能不能归并到一起也很重要 在二维数组中&#xff0c;基于范围的 for 循环直接遍历的是行&#xff0c;而不是单个元素 对于一个 int arr[3][4] 的二维数组&#xff0c; m…

网易Android开发面试题200道及参考答案 (下)

说明原码、反码、补码的概念 原码:是一种简单的机器数表示法。对于有符号数,最高位为符号位,0 表示正数,1 表示负数,其余位表示数值的绝对值。比如,对于 8 位二进制数,+5 的原码是 00000101,-5 的原码是 10000101。原码的优点是直观,容易理解,但在进行加减法运算时,…

K8S中的数据存储之基本存储

基本存储类型 EmptyDir 描述&#xff1a;当 Pod 被调度到节点上时&#xff0c;Kubernetes 会为 Pod 创建一个空目录&#xff0c;所有在该 Pod 中的容器都可以访问这个目录。特点&#xff1a; 生命周期与 Pod 绑定&#xff0c;Pod 删除时&#xff0c;数据也会丢失。适用于临时…

如何移植ftp服务器到arm板子?

很多厂家提供的sdk&#xff0c;一般都不自带ftp服务器功能&#xff0c; 需要要发人员自己移植ftp服务器程序。 本文手把手教大家如何移植ftp server到arm板子。 环境 sdk&#xff1a;复旦微 Buildroot 2018.02.31. 解压 $ mkdir ~/vsftpd $ cp vsftpd-3.0.2.tar.gz ~/vs…

Alfresco Content Services docker自动化部署操作

Alfresco Content Services docker部署文档 前提条件 在开始之前&#xff0c;需要确保已经安装了 Docker 和 Docker Compose。Docker 用于创建和管理容器&#xff0c;Docker Compose 则用于定义和运行多容器的 Docker 应用。 步骤 1. 创建目录结构 首先&#xff0c;创建一个…