Bootstrap

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

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

前言

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

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


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

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

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


一、ollama

1.ollama本地大模型简介

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

请添加图片描述

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

请添加图片描述

一句话来说, 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/portainer
    container_name: portainer
    ports: 
      - "9000:9000"
    restart: always

    volumes: 
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Asia/Shanghai
 #openWebUI
  open-webui:
    image: backplane/open-webui:0.1-ollama
    container_name: open-webui
    restart: always
    ports:
      - "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 IP
    port: 11434
    model: 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;


    @Bean
    public 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 {

    @Resource
    private 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调用

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

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

;