大模型管理工具Ollama搭建及整合springboot

目录

一、Ollama介绍

1.1 什么是Ollama

1.2 Ollama特点与优势

二、Ollama本地部署

2.1 版本选择

2.2 下载安装包

2.3 执行安装

2.4 Ollama常用命令

三、使用Ollama部署千问大模型

3.1 千问大模型介绍

3.2 部署过程

四、springboot接入Ollama

4.1 引入Ollama依赖

4.2 添加配置文件

4.3 使用Ollama聊天api

五、写在结尾


一、Ollama介绍

1.1 什么是Ollama

Ollama是一个用于部署和运行各种开源大模型的工具,能够帮助用户快速在本地运行各种大模型,极大地简化了大模型在本地运行的过程。对用户来说,只需要通过执行几条命令就能在本地运行开源大模型,如Llama 2等。

官网地址:Ollama

1.2 Ollama特点与优势

Ollama具备如下特点和优势

  • 功能齐全
    • Ollama将模型权重、配置和数据捆绑到一个包中,定义成Modelfile。它优化了设置和配置细节,包括GPU使用情况,从而提高了模型运行的效率。
  • 轻量级
    • Ollama的代码简洁明了,运行时占用资源少。这使得它能够在本地高效地运行,不需要大量的计算资源。此外,它还支持热加载模型文件,无需重新启动即可切换不同的模型,这使得它非常灵活多变。
  • 易用性
    • Ollama提供了多种安装方式,支持Mac和Linux平台,并提供了Docker镜像。用户只需按照安装指南进行操作即可完成安装,无需具备专业的技术背景。
  • 捆绑模型组件
    • 它将模型权重、配置和数据捆绑到一个包中,称为 Modelfile,这有助于优化设置和配置细节,包括 GPU 使用情况。
  • 支持多种模型
    • Ollama 支持多种大型语言模型,如 Llama 2、Code Llama、Mistral、Gemma 等,并允许用户根据特定需求定制和创建自己的模型。
  • 跨平台支持
    • 支持 macOS 和 Linux 平台,Windows 平台的预览版也已发布。安装过程简单,用户只需访问 Ollama 的官方网站下载相应平台的安装包即可。

二、Ollama本地部署

接下来演示如何在本地的windows系统上安装Ollama,根据你的实际情况,也可以选择Linux系统进行部署

2.1 版本选择

进入网站之后,点击右上角的 Download按钮,根据个人的实际情况,选择不同类型的安装包进行部署,我这里选择的是Windows的版本;

注意,Ollama部署的时候,对服务器或机器是有一定要求的,所以需要根据你的机器配置情况进行选择,在Ollama的官网通过github的链接点进去,可以看到如下的相关参数指导说明,在这里,你部署的大模型参数越多,理论上来说,对机器的配置要求就越高,目前先关注这一点即可。

2.2 下载安装包

这里选择下载的是windows版本

2.3 执行安装

Ollama的安装比较简单,双击执行这个exe文件,等待安装完成即可

安装完成之后,点击开始进入下面的shell窗口

2.4 Ollama常用命令

cmd窗口输入Ollama,即可了解常用的Ollama命令

如何理解本机部署的这个Ollama呢?如果使用过Docker的同学对docker部署一些中间件应该不陌生,比如使用docker中部署mysql或redis,只需要运行一段docker命令即可完成,非常方便,类比于Ollama,是一个大模型的部署管理工具,只需要使用Ollama的命令,也可以快速部署起一个本地的大模型进行使用。

如果你需要使用Ollama部署大模型,可以在Ollama官网进行搜索,类似于你使用docker search 镜像名一样

如下,进入到某个大模型中,拷贝命令到shell窗口中执行即可

三、使用Ollama部署千问大模型

上面演示了基于本地windows操作系统搭建Ollama过程,下面我们使用Ollama部署一个大模型,这里使用Ollama部署千问大模型。

3.1 千问大模型介绍

“通义千问大模型”是阿里云推出的一个超大规模的语言模型,具有强大的归纳和理解能力,可以处理各种自然语言处理任务,包括但不限于文本分类、文本生成、情感分析等。此模型能够极大地提高了自然语言处理的效率和准确性,给用户提供了一种新的、简便的工具。

3.2 部署过程

在Ollama中搜索关键字qwen,然后选择一个参数相对较少(对本地的空间和资源占用减小)的进行运行

使用下面的命令运行

ollama run qwen:0.5b-chat 

然后等待模型下载完成运行起来之后就可以使用了,下面这个进度窗口是不是与docker部署中间件很相像

然后就可以输入文本,与千问大模型进行对话,而后,就可以基于部署的模型应用于实际工作或业务中进行结合使用

四、springboot接入Ollama

由于本地搭建了Ollama,并且在Ollama上安装了千问大模型,就可以将千问大模型当GPT一样使用进行交流,参考下面具体的对接步骤。

4.1 引入Ollama依赖

本地提前搭建一个springboot工程,然后引入Ollama核心依赖

        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
        </dependency>

4.2 添加配置文件

配置文件中添加Ollama相关的配置信息,注意的是,Ollama本地端口为11434

server:
  port: 8088

spring:
  application:
    name: chat-001

  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        options:
          model: qwen:0.5b-chat
    openai:
      api-key: 你的apikey
      base-url: openai地址

4.3 使用Ollama聊天api

Ollama聊天API的核心对象为OllamaChatClient,与上述的spring ai中提供的client对象类似,在程序中可以直接调用其api,如下,传入一个msg参数,返回响应的文本内容

import jakarta.annotation.Resource;
import org.springframework.ai.ollama.OllamaChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class OllamaChatController {

    @Resource
    private OllamaChatClient ollamaChatClient;

    //http://localhost:8088/ollama/chat?msg=大数据的技术栈有哪些
    @GetMapping("/ollama/chat")
    public String ollamaChat(@RequestParam String msg){
        String resMsg = ollamaChatClient.call(msg);
        return resMsg;
    }

}

启动服务调用一下接口,可以看到响应的内容,通过这种方式,相当于是利用spring ai接入了本地的大模型进行对话聊天。

也可以使用Prompt进行参数传递,看下面的接口

    @GetMapping("/ollama/chat/v2")
    public Object ollamaChatV2(@RequestParam String msg){
        Prompt prompt = new Prompt(msg);
        ChatResponse chatResponse = ollamaChatClient.call(prompt);
        return chatResponse;
    }

返回结果如下,返回这种结构的数据在实际使用的时候,需要对json中的字段进行解析即可

spring ai官网中也提供了Ollama的相关文档,地址:Ollama Chat :: Spring AI Reference,在文档中,可以找到很多有关Ollama的详细的配置参数,这些配置参数,都可以在Prompt对象或者配置文件中进行合理的使用,达到最佳的实践效果

比如,在下面的接口中,仍然使用Prompt对象,里面传入更多的参数选项做控制

    //http://localhost:8088/ollama/chat/v3?msg=中国排名前十的大学
    @GetMapping("/ollama/chat/v3")
    public Object ollamaChatV3(@RequestParam String msg){
        Prompt prompt = new Prompt(
                msg,
                OllamaOptions.create()
                        .withModel("qwen:0.5b-chat")
                        .withTemperature(0.4F)
        );
        ChatResponse chatResponse = ollamaChatClient.call(prompt);
        return chatResponse.getResult().getOutput().getContent();
    }

再次调用一下接口,当然这个结果是否一定准确呢?对于结果的使用还需要做认真的鉴别

五、写在结尾

本文详细介绍了基于windows系统部署Ollama的过程,并演示了基于Ollama部署千问大模型的过程,以及如何与springboot对接,更详细和深入的可以参阅官网资料进一步学习,本文到此结束谢谢观看。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

音频信号分析与实践

音频信号分析与实践课程,方便理解音频信号原理和过程 1.音频信号采集与播放 两种采样模式和标准的采样流程 人说话的声音一般在2kHz一下&#xff1a; 采样频率的影响&#xff1a;采样率要大于等于信号特征频率的2倍&#xff1b;一般保证信号完整&#xff0c;需要使用10倍以上的…

python找出100~999之间的水仙花数字

水仙花数字&#xff1a;个位&#xff0c;十位&#xff0c;百位的立方之和等于这个数本身 例如&#xff1a;153 1^35^33^3 for i in range(100, 1000):bw i // 100sw i % 100 // 10gw i % 10if bw ** 3 sw ** 3 gw ** 3 i:print(i)

SpringBoot读取json文件

使用SpringBoot读取json文件作为接口&#xff0c;前端Vue可以通过跨域访问接口数据 一、创建SpringBoot 文件 创建一个 SpringBoot 文件&#xff0c;文件结构目录如下&#xff1a; 二、在pom.xml添加依赖 <!--Spring Boot 依赖--> <parent><artifactId>sp…

WireShark下载安装

下载地址 WireShark站内下载资源&#xff1a;&#xff08;土豪方便下载&#xff09; https://download.csdn.net/download/qq_58662768/89377088 官网下载&#xff1a; Wireshark Go Deep 进入主页后&#xff0c;选择Get Acquainted&#xff0c;再选择Download。 选择合适…

TPL0401B使用教程

1.前言 前面做程控放大器的时候&#xff0c;有除开AD602&#xff0c;还有一个AD620&#xff0c;性能更好&#xff0c;不过是通过外部电阻来控制放大倍数的&#xff0c;不过要是接滑动变阻器就太不优雅了&#xff0c;而且单片机怎么控制滑动变阻器&#xff1f;&#xff08;难不…

linux 内核哪种锁可以递归调用 ?

当数据被多线程并发访问(读/写)时&#xff0c;需要对数据加锁。linux 内核中常用的锁有两类&#xff1a;自旋锁和互斥体。在使用锁的时候&#xff0c;最常见的 bug 是死锁问题&#xff0c;死锁问题很多时候比较难定位&#xff0c;并且影响较大。本文先会介绍两种引起死锁的原因…

简易版本的QFD质量屋

比如餐馆要考虑什么因素最重要&#xff0c;这里列出好吃&#xff0c;快速&#xff0c;便宜三类问题&#xff0c;然后设置上图的权重&#xff0c; 然后设置9&#xff0c;3&#xff0c;1三类因子&#xff0c;9比如是最重要的&#xff0c;3&#xff0c;1&#xff0c;依次没那么重要…

开发一个comfyui的自定义节点-支持输入中文prompt

文章目录 目标功能开发环境实现过程翻译中文CLIP编码拓展仓库地址完整代码目标功能 目前comfyui的prompt提示词输入节点 CLIP Text Encode 只支持输入英文的prompt,而有时候我们需要自己制定一些prompt,所以就得将我们想要的提示词翻译为英文后再复制粘贴到该节点的输入框中…

算法练习第26天|46.全排列、47全排列II

46.全排列 46. 全排列 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/permutations/description/ 题目描述&#xff1a; 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a;…

C++STL---vector模拟实现

通过上篇文章&#xff0c;我们知道vector的接口实际上和string是差不多的&#xff0c;但是他俩的内部结构却大不一样&#xff0c;vector内有三个成员变量&#xff1a;_start、_finish、_endofstorage: _start指向容器的头元素&#xff0c;_finish指向有效元素末尾的元素&#x…

【计算机毕业设计】359微信小程序校园失物招领系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Java基础知识点(反射、注解、JDBC、TCP/UDP/URL)

文章目录 反射反射的定义class对象反射的操作 注解注解的定义注解的应用注解的分类基准注解元注解 自定义注解自定义规则自定义demo JDBCTCP/UDP/URLTCPUDPURL 反射 反射的定义 Java Reflection是Java被视为动态语言的基础啊&#xff0c; 反射机制允许程序在执行期间接入Refl…

Vue进阶之Vue无代码可视化项目(一)

Vue无代码可视化项目 项目搭建初始步骤拓展:工程项目从0-1项目规范化package.jsoncpell.jsoncustom-words.txtts-eslint规则.eslintrc.cjsgit钩子检查有没有问题type-checkspellchecklint:stylehusky操作安装pre-commitpnpm的commit规范package.json:commitlint.config.cjs安装…

Java数组操作

数组拓展 1.1 数组拷贝 需求&#xff1a;定义一个方法arraycopy, 从指定源数组中从指定的位置开始复制指定数量的元素到目标数组的指定位置。 1.2. 排序操作 需求&#xff1a;完成对int[] arr new int[]{2,9,6,7,4,1}数组元素的升序排序操作. 1.2.1.冒泡排序 对未排序的各元素…

【计算机毕设】基于SpringBoot的教师工作量管理系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 随着高校规模的扩大和教学任务的增加&#xff0c;教师的工作量管理变得越来越复杂和重要。传统的教师工作量管理方式效率低下&#xff0c;容易出错&…

【typescript/flatbuffer】在websocket中使用flatbuffer

目录 说在前面场景fbs服务器代码前端typescript代码问题 说在前面 操作系统&#xff1a;Windows11node版本&#xff1a;v18.19.0typescript flatbuffer版本&#xff1a;24.3.25 场景 服务器(本文为golanggin)与前端通信时使用flatbuffer进行序列化与反序列化通信协议为websock…

CSDN UI 2024.06.01

当我们的栏目很多的时候&#xff0c;通过【置顶】来排列顺序是很麻烦的&#xff0c;应该加一列&#xff0c;设置优先级别。太难用了 或者加两个按钮【上移】 【下移】

正邦科技(day4)

烧录 一、烧录固件二、 通讯模块升级1&#xff1a;USB的方式升级固件2&#xff1a;通过mqtt的方式升级固件3&#xff1a;切换环境 三、 烧录WiFi1&#xff1a;短接2&#xff1a;烧录脚本 设备注意事项&#xff1a; 第一种方式&#xff1a;通信模组和MCU都可以统一烧录BoodLoade…

内网穿透-FRP流量改造

前言 在拿下一台机器作为入口时&#xff0c;内网代理就变得尤为重要。他是我们进行横向渗透一个中间人&#xff0c;没了代理在内网中就寸步难行。而内网穿透的工具有很多&#xff0c;比如frp&#xff0c;reGeorg等等非常优秀的代理工具。使用方法不在赘述&#xff0c;这篇文章…

ssm_mysql_高校自习室预约系统(源码)

博主介绍&#xff1a;✌程序员徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…