本地部署大模型ollama+docker+open WebUI/Lobe Chat

文章目录

  • 大模型工具Ollama
    • 下载
    • 安装
    • 运行
    • Spring Ai 代码测试
      • 加依赖
      • 配置
      • 写代码
  • ollama的web&Desktop
    • 搭建部署Open WebUI有两种方式
      • Docker Desktop
      • Docker部署Open WebUI
      • Docker部署Lobe Chat
        • 可以配置OpenAI的key
        • 也可以配置ollama
  • 大模型的选择

本篇基于windows环境下配置

大模型工具Ollama

https://ollama.com/

在这里插入图片描述

下载

https://ollama.com/download
windows环境下就安装windows版本
在这里插入图片描述

在这里插入图片描述

安装

点击下载的exe文件进行傻瓜式安装

运行

去ollama官网(models模块下)找大模型的名字,然后复制ollama的运行名字
https://ollama.com/library
在这里插入图片描述

ollama run qwen:4b

Spring Ai 代码测试

默认ollama会监听11434端口,可以使用下面命令查看
在这里插入图片描述

netstat -ano | findstr 11434

可以使用ollama list指令查看本地已经下好的大模型

ollama list

在这里插入图片描述

加依赖

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

或者使用23版以上的idea,创建spring项目的时候选最新版本,直接勾选上AI模块下的ollama模块

配置

spring:application:name: open-ai-05-ollamaai:ollama:base-url: http://localhost:11434chat:options:model: qwen:4b   

写代码

在这里插入图片描述

@RestController
public class OllamaController {@Autowiredprivate OllamaChatClient ollamaChatClient;@RequestMapping(value = "/ai/ollama")public Object ollama(@RequestParam(value = "msg") String msg){String call = ollamaChatClient.call(msg);System.out.println(call);return call;}@RequestMapping(value = "/ai/ollama2")public Object ollama2(@RequestParam(value = "msg") String msg){ChatResponse response = ollamaChatClient.call(new Prompt(msg,OllamaOptions.create().withModel("qwen:4b").withTemperature(0.4f)));String content = response.getResult().getOutput().getContent();System.out.println(content);return content;}
}

ollama的web&Desktop

看ollama的github主页下面有很多的web&Desktop,比较流行的是Open WenUI
Open WenUI Github https://github.com/open-webui/open-webui
Open WenUI 官网:https://github.com/open-webui/open-webui

搭建部署Open WebUI有两种方式

  1. Docker方式(官网推荐)
  2. 源代码部署安装方式:(文档https://docs.openwebui.com/getting-started/)

Docker Desktop

windows环境下推荐使用Docker Desktop

轻量化,界面化操作Docker容器
官网下载安装包
https://www.docker.com/products/docker-desktop/
下载后傻瓜式安装即可,安装后需要重启,然后打开Docker Desktop后的界面如下:
在这里插入图片描述

Docker部署Open WebUI

在docker中运行Open WebUI
在命令行运行docker指令

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v D:\dev\open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

这是一个 docker run 命令,用于启动一个新的 Docker 容器,下面是这个命令各个部分的解释:

  • docker run:这是 Docker 的命令,用于从指定的镜像启动一个新的容器;
  • -d:表示在“分离”模式下运行容器,即后台运行;
  • -p 3000:8080:端口映射,表示将宿主机的3000端口映射到容器的8080端口,当你访问宿主机的3000端口时,实际上会访问容器内的8080端口;
  • –add-host=host.docker.internal:host-gateway:这个选项向容器的 /etc/hosts 文件中添加一条记录,这通常用于让容器能够解析到宿主机的名称,并且将其 IP 地址设置为宿主机的网关地址,这在某些网络配置中很有用,尤其是当容器需要知道宿主机的地址时;
  • -v D:\dev\open-webui:/app/backend/data:卷挂载,这表示将宿主机的 D:\dev\open-webui 目录挂载到容器内的 /app/backend/data 目录,这样,容器和宿主机之间可以共享这个目录中的数据;
  • –name open-webui:为容器指定一个名称,这里是 open-webui;
  • –restart always:这个选项告诉 Docker 在容器退出时总是自动重启它,无论容器是因为何种原因退出,它都会自动重启;
  • ghcr.io/open-webui/open-webui:main:这是你要运行的 Docker 镜像的完整名称,ghcr.io 是 GitHub Container Registry 的地址,open-webui/open-webui 是镜像的仓库和名称,main是标签,通常表示该镜像的最新或主分支版本;

第一次运行需要拉取镜像比较慢,等待执行完成
在这里插入图片描述
这时候打开docker desktop就可以在images模块下看到拉取到的镜像
在这里插入图片描述

我们在拉取镜像的时候指定了Web UI的端口为3000,所以访问3000端口即可

http://localhost:3000/

第一次会要求登录
在这里插入图片描述
注册并登录
在这里插入图片描述
上来后和Chatgpt的页面很像的。

在这里插入图片描述
select model的地方选择上我们通过ollama部署的模型。然后就可以开心聊天了

Docker部署Lobe Chat

官网:https://lobehub.com/
Github:https://github.com/lobehub/lobe-chat

  • Built for you the Super Individual (专为你打造的超级个人)
  • 现代化设计的开源 ChatGPT/LLMs
  • 聊天应用与开发的UI框架; 支持语音合成、多模态、可扩展的(function call)插件系统;
  • 一键免费拥有你自己的ChatGPT/Gemini/Claude/Ollama 应用;

Lobe Chat 部署

  1. 使用 Vercel、Zeabur 或 Sealos 部署;
  2. 使用 Docker 部署;
docker run -d -p 3210:3210 -e OPENAI_API_KEY=sk-xxxx -e ACCESS_CODE=lobe66 --name lobe-chat lobehub/lobe-chat

完整的部署文档:https://lobehub.com/zh/docs/self-hosting/start

同样的,在拉取完成后,docker desktop中也会有镜像,
在这里插入图片描述
同样的方式,访问我们指定的3210端口
在这里插入图片描述
这个需要点击设置去配置模型

可以配置OpenAI的key

在这里插入图片描述
注意代理的地址要在后面加上/v1
配置好后就可以访问openai

也可以配置ollama

在这里插入图片描述
本机默认代理地址可以不用配,模型列表中选上你的模型就可以使用了。
还可以加插件使用
也可以在本地部署更强大的模型,使用图片,文件,音频等模态

大模型的选择

  • 大语言模型主要分为国外大模型 和 国内大模型;
  • 国外大模型,可能受到一些限制,或者不稳定;
  • 国内也有非常优秀的大模型,国内大模型排行榜:
    • https://www.superclueai.com/
    • 基于中文语言理解测评基准,包括代表性的数据集、基准(预训练)模型、语料库、排行榜;
    • 选择一系列有一定代表性的任务对应的数据集,做为测试基准的数据集,这些数据集会覆盖不同的任务、数据量、任务难度;

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

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

相关文章

翔云优配恒生指数涨1.85%、恒生科技指数涨3.74% 小鹏汽车涨超8%

5月3日港股开盘&#xff0c;恒生指数涨1.85%&#xff0c;报18543.3点&#xff0c;恒生科技指数涨3.74%&#xff0c;报4009.96点&#xff0c;国企指数涨2.23%&#xff0c;报6580.81点&#xff0c; 翔云优配是一家领先的在线投资平台,提供全球范围内的股票、期货、基金等交易服务…

小程序引入 Vant Weapp 极简教程

一切以 Vant Weapp 官方文档 为准 Vant Weapp 官方文档 - 快速入手 1. 安装nodejs 前往官网下载安装即可 nodejs官网 安装好后 在命令行&#xff08;winr&#xff0c;输入cmd&#xff09;输入 node -v若显示版本信息&#xff0c;即为安装成功 2. 在 小程序根目录 命令行/终端…

C++类的小结

1、类定义 使用class关键字定义类。 类名通常以大写字母开头&#xff0c;以符合命名规范。 类包含成员变量&#xff08;也称为属性或数据成员&#xff09;和成员函数&#xff08;也称为方法或行为&#xff09;。 class MyClass { public: int x; // 数据成员 void setX…

【Gateway远程开发】0.5GB of free space is necessary to run the IDE.

【Gateway远程开发】0.5GB of free space is necessary to run the IDE. 报错 0.5GB of free space is necessary to run the IDE. Make sure that there’s enough space in following paths: /root/.cache/JetBrains /root/.config/JetBrains 原因 下面两个路径的空间不…

【OpenNJet下一代云原生之旅】

OpenNJet下一代云原生之旅 1、OpenNJet的定义OpenNJet架构图 2、OpenNJet的特点性能无损动态配置灵活的CoPilot框架支持HTTP/3支持国密企业级应用高效安全 3、OpenNJet的功能特性4、OpenNJet的安装使用编译安装配置yum源创建符号连接修改配置编译 5、通过 OpenNJet 部署 WEB SE…

基于OpenCv的图像特征点检测

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

【设计模式】函数式编程范式工厂模式(Factory Method Pattern)

目录标题 定义函数式接口函数式接口实现类工厂类封装实际应用总结 定义函数式接口 ISellIPad.java /*** 定义一个函数式接口* param <T>*/ FunctionalInterface public interface ISellIPad<T> {T getSellIPadInfo();}函数式接口实现类 HuaWeiSellIPad.java pu…

rust数据类型转换,as和TryInto使用

Rust 是类型安全的语言&#xff0c;因此在 Rust 中做类型转换不是一件简单的事&#xff0c;这一章节我们将对 Rust 中的类型转换进行详尽讲解。 as转换 先来看一段代码&#xff1a; fn main() {let a: i32 10;let b: u16 100;if a < b {println!("Ten is less tha…

无U盘基于本地硬盘无损制作虚拟U盘(Windows、Linux系统安装启动盘)

知识点 实验环境 名称版本使用平台Win11本地硬盘格式GPT待安装镜像deepin-desktop-community-20.9-amd64.iso 文中工具下载链接&#xff1a; https://download.csdn.net/download/xzzteach/89263714 deepin-desktop-community-20.9-amd64.iso 文件结构如下&#xff1a; 在Li…

多功能在线二维码生成源码

上传即可使用&#xff0c;可以把电子名片、文本、wifi网络、电子邮件、短信、电话号码、网址等信息生成对应的二维码图片。 多功能在线二维码生成源码

10G MAC层设计系列-(4)MAC TX模块

一、前言 MAC TX模块就是要将IP层传输过来的数据封装前导码、MAC地址、帧类型以及进行CRC校验&#xff0c;并与CRC值一块组成以太网帧。 二、模块设计 首先对输入的数据进行缓存&#xff0c;原因是在之后要进行封装MAC帧头&#xff0c;所以需要控制数据流的流动 FIFO_DATA_6…

Linux内核深入学习 - 中断与异常(上)

中断与异常 中断通常被定义为一个事件&#xff1a;让事件改变处理器执行的指令顺序这样的事件&#xff0c;与CPU芯片内外部硬件电路产生的电信号相对应&#xff01; 中断通常分为同步中断与异步中断&#xff1a; 同步中断指的是当指令执行时&#xff0c;由CPU控制单元产生的…

力扣hot100:543. 二叉树的直径/108. 将有序数组转换为二叉搜索树

一、543. 二叉树的直径 LeetCode&#xff1a;543. 二叉树的直径 二叉树的直径 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。 遇到二叉树的问题很容易去直接用求解的目标去定义递归函数。但是仔细考虑&#xff0c;返回树的直径并不能向上传播。因此我们可以拆…

2024抖音直播带货-直播间拆解:抖店运营从入门到精通(56节课)

起号原理方式以及节点处理 类目的选择选品思路 付费流量投放原理 直播间进阶玩法 课程内容 直播间搭建标准自然起号(0-1)原理 方式 以及节点处理 老号重启(0-1)原理 方式 以及节点处理 账号在线人数稳定 原理 方式 以及节点处理 账号销售额放大 原理 方式 以及节点处理…

IoTDB 入门教程 基础篇⑨——TsFile导入导出工具

文章目录 一、前文二、准备2.1 准备导出服务器2.2 准备导入服务器 三、导出3.1 导出命令3.2 执行命令3.3 tsfile文件 四、导入4.1 上传tsfile文件4.2 导入命令4.3 执行命令 五、查询六、参考 一、前文 IoTDB入门教程——导读 数据库备份与迁移是数据库运维中的核心任务&#xf…

内核workqueue框架

workqueue驱动的底半部实现方式之一就是工作队列&#xff0c;作为内核的标准模块&#xff0c;它的使用接口也非常简单&#xff0c;schedule_work或者指定派生到哪个cpu的schedule_work_on。 还有部分场景会使用自定义的workqueue&#xff0c;这种情况会直接调用queue_work和qu…

探索C++模板类的奥秘:从基础到实践的深度之旅

目录 引言 一、模板类基础 A. 何为模板类&#xff1f; B. 模板类与普通类的区别 二、模板类实例化及特化 C. 实例化模板类 D. 模板类特化 三、模板类的应用与实战 E. 示例分析&#xff1a;栈模板类实现 结论 引言 在C编程的世界里&#xff0c;模板这一特性如同魔法般…

wpf转换器

WPF&#xff08;Windows Presentation Foundation&#xff09;中的转换器主要是指IValueConverter接口的实现&#xff0c;它用于在数据绑定过程中转换源数据和目标数据的类型或表示形式。这种机制使得开发者能够灵活地处理数据&#xff0c;特别是在用户界面&#xff08;UI&…

基于SkyEye运行Android——应用最为广泛的移动设备操作系统

01.Android简介 Android&#xff08;安卓&#xff09;是一种基于Linux内核&#xff08;不包含GNU组件&#xff09;的开源操作系统&#xff0c;最初由安迪鲁宾开发&#xff0c;主要支持手机。2005年8月由Google收购注资&#xff1b;2007年11月&#xff0c;Google与84家硬件制造…

【C语言】/*函数栈帧的创建和销毁*/

目录 前言 一、知识补充 二、分析创建和销毁的过程 三、前言问题回答 前言 本篇主要讨论以下问题&#xff1a; 1. 编译器什么时候为局部变量分配的空间 2. 为什么局部变量的值是随机的 3. 函数是怎么传参的&#xff0c;传参的顺序是怎样的 4. 形参和实参是什么关系 5. 函数…