Open WebUI | 自托管的类 ChatGPT 网站

Open WebUI 是一个扩展性强、功能丰富且用户友好的自托管 WebUI,支持 ChatGPT 网页端的大部分功能,支持各类模型服务,包括 Ollama 和 OpenAI 的 API。该项目在 GitHub 上已有 38k 星,非常受欢迎。

webui

功能介绍

本篇介绍该项目的功能特性,以及安装教程。废话不多说,先上图!

  1. 多模型:支持多模型同时对话,比较不同模型的输出结果。
    在这里插入图片描述

  2. 图文对话:支持图文对话功能(需模型支持多模态输入),示例:

    在这里插入图片描述

  3. 文档 RAG:自带文档 RAG 功能,对所有模型有效:

    20240625194554

  4. 语音输入和输出:支持语音输入和输出。

  5. 网页链接对话:支持使用网页链接对话,通过 # + 链接,自动下载页面进行 RAG 检索,示例:

    20240625195728

  6. 端侧运行 Python:使用 WebAssembly 技术,在用户侧运行 Python 代码,示例:

    pycode-wasm
    此外,其他功能比如对话分享,工具 Pipeline 等,我们后续介绍。

特别一提这里的端侧技术

端侧技术能极大降低用户跑代码的门槛,用户不需要配环境,装软件,有浏览器就行,甚至手机浏览器也可以跑代码。端侧技术能给非计算机专业的群体带来有更好的体验,同时不需要网站提供者提供计算资源,避免了安全管理,资源维护,并发处理等问题。不过 Open WebUI 目前仅支持 Python 代码,希望未来能支持更多语言。

一个简单的例子,打开这个网页,就能在浏览器运行 Jupyter,且不会消耗服务器资源。
端侧运行 Jupyter

后边有机会开坑 WebAssembly 技术的介绍和教程,相关阅读:

  • awesome-wasm-langs:WebAssembly 支持的语言列表
  • JSage:运行 SageMath 等复杂数学包的方式

安装教程

推荐用 Docker 安装,方便管理和后续升级,OpenWebUI 的文档 也提供了使用 pip 以及源码安装的方法。

安装 docker-compose,比如 Ubuntu 系统:

# 安装 docker
sudo apt install docker -y 
# 安装 docker-compose
curl -L https://github.com/docker/compose/releases/download/v2.22.0/docker-compose-$(uname -s)-$(uname -m) -o ./docker-compose
chmod +x ./docker-compose
sudo mv ./docker-compose /usr/bin

然后,在存放服务的位置,编写 docker-compose.yml 文件:

sudo mkdir -p /srv/open-webui
cd /srv/open-webui
sudo vim docker-compose.yml

填入以下内容:

version: '3.8'services:open-webui:image: ghcr.io/open-webui/open-webui:maincontainer_name: open-webuirestart: alwaysports:- "8080:8080"volumes:- ./open-webui:/app/backend/dataenvironment:OPENAI_API_BASE_URLS: ${OPENAI_API_BASE_URLS}OPENAI_API_KEYS: ${OPENAI_API_KEYS}OLLAMA_BASE_URL: ${OLLAMA_BASE_URL}WEBUI_SECRET_KEY: ${WEBUI_SECRET_KEY}HF_ENDPOINT: "https://hf-mirror.com"

服务默认端口为 8080,可以根据需要修改,比如改成 3080:8080

接下来,在同一目录下,编辑 .env 文件,填入相应的环境变量。例如,用于配置代理 OpenAI 的 API:

# 多个链接用分号 ; 分隔
OPENAI_API_BASE_URLS="..."
OPENAI_API_KEYS="sk-..."

如果服务器配了 Ollama,可以设置 Ollama 的 API:

OLLAMA_BASE_URL="..."

API 的配置和获取可以参考:

  • 零资源跑大模型:Hugging Face API + LiteLLM + Flask
  • 大模型 API 推理全指南 | OneAPI + Ollama + vLLM + ChatTool

当然,如果仅使用 GPT 模型,可以直接找代理站,花钱省事。

可选且推荐设置的环境变量:

# 访问端口,默认为 8080,与 docker-compose.yml 中的端口对应
PORT=8080
# 允许管理员访问用户聊天记录,默认为 true,建议设置为 false
ENABLE_ADMIN_CHAT_ACCESS=false
# 浏览器标签显示的名称
WEBUI_NAME=
# 启动时的默认模型
DEFAULT_MODEL="..."
# 默认角色,支持 admin/user/pending 三种,对应管理员,普通用户和待审核用户
DEFAULT_USER_ROLE=pending

其中,默认模型和角色在管理员页面可以重新修改。

以上列举了几个常用变量的设置,完整选项可以在这里找到。其中涉及 Pipline 等需进一步配置才能启用的特性,我们在后续更新中介绍。

最后,启动服务:

sudo docker-compose up -d

访问服务后,首次注册的用户会被设置为管理员,管理员可以修改网站设置,以及修改其他用户角色。

另外,所有聊天记录存储在云端。

Nginx 反向代理

设置 Nginx 反向代理,以便通过域名访问,比如 webui.example.com。参考配置如下:

server {listen 443 ssl;server_name webui.example.com;ssl_certificate ...;ssl_certificate_key ...;location / {proxy_pass http://localhost:3080; # 与 docker-compose.yml 中的端口对应}
}server {listen 80;server_name webui.example.com;return 301 https://$host$request_uri;
}

关于 ssl 证书的配置,可以参考之前写的博文 Let‘s Encrypt 域名证书增强网站安全。

高级特性

函数调用,Pipeline 以及文生图等功能,后续再更新介绍~(TODO)

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

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

相关文章

分布式 ID

背景 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。随着数据日渐增长,对数据分库分表后也需要有一个唯一ID来标识一条数据或消息,数据库的自增 ID 显然不能满足需求;此时一个能够生成全局唯一 ID 的系统是非常必…

Android中的Activity(案例+代码+效果图)

目录 1.Activity的生命周期 核心生命周期回调 1)onCreate() 2)onStart() 3)onResume() 4)onPause() 5)onStop() 6)onRestart() 7)onDestroy() 8)生命周期图示 10)注意事项…

Android实现App内直接预览本地PDF文件

在App内实现直接预览pdf文件,而不是通过调用第三方软件,如WPS office等打开pdf。 主要思路:通过PhotoView将pdf读取为图片流进行展示。 一、首先,获取对本地文件读取的权限 在AndrooidManifest.xml中声明权限,以及页…

神经网络整体架构

文章目录 1.输入层Input2.卷积层Conv3.激活函数层(一)Sigmoid 函数(二)Tanh 函数(三)修正线性单元ReLU(四)Leaky ReLU函数(带泄露的Relu)(五)参数化ReLU 4.池化层POOL5.全连接层FC6.输出层Output 用全连接神经网络处理大尺寸图像具有三个明显的缺点: ①将图像展开为…

gitlab-ci 集成 k3s 部署spring boot 应用

环境 一台ECS gitlab 16.10 一台ECS gitlab-runner docker方式 一台腾讯云服务器 k3s k3s version v1.30.5k3s1 (9b586704) go version go1.22.6 本地: idea 2024 准备开始 gitlab上创建"api"仓库,本地IDEA 创建spring boot web demo项目k8s-gitlab-demo. 确保能…

写端口-网络测试ping

最近一直在学习网络编程,今天把pyping 部分做一个总结。 Python pyping资料很少,官方例子有限,大神博客很少提及, 经过一番尝试后,总结以下几点用法以便大家以后使用。 from pythonping import ping def test(ip:str…

【计算机网络】计算机网络相关术语

文章目录 NAT概述NAT的基本概念NAT的工作原理1. **基本NAT(静态NAT)**2. **动态NAT**3. **NAPT(网络地址端口转换,也称为PAT)** 底层实现原理1. **数据包处理**2. **转换表**3. **超时机制** NAT的优点NAT的缺点总结 P…

跟踪用户状态,http协议无状态 Cookie HttpSession,Session和Cookie的关系

1.概念分析 跟踪用户状态指的是web应用能够分辨请求属于哪个用户,进而记录用户的状态,从而为用户提供连续的针对性的服务。比如有多个客户在同一个购物网站上购物,每一个用户都会有一个虚拟的购物车。当某个客户发送请求将商品添加到购物车时…

使用 Netperf 工具进行 TCP 和 UDP 时延测试

测试目的 通过使用 Netperf 工具评估 TCP 和 UDP 协议的时延性能,分析不同 Payload 大小对时延的影响,为网络性能优化提供数据支持。 测试环境 - **硬件**: - 测试服务器(运行 Netperf) - CPU: 至少四核 …

基于Vue3+Ts+Vite项目中grpc-Web的应用以及其中的坑

背景: 最近项目中有一个需求:在新项目中使用grpc进行前后端通信。我便基于此需求开始了新的研究。 首先我是想抄作业的,但是翻了很多相关grpc-web的文章,写的都不是很详细,再涉及到grpc-web服务的升级迭代&#xff0…

初学Qt之环境安装与 hello word

环境: Qt Creator 4.11.0 (Community) Qt 5.14.0 目录 1.Qt环境配置 1.1 下载Qt 5.14.0 1.2 注册Qt账号 1.3 安装Qt 1.4 配置环境变量 2.创建项目 2.1 创建一个项目 2.2 初始代码解析 2.3 可视化GUI ​编辑 2.4 hello word 2.4.1 可视化hello word …

线性回归-随机梯度法下降算法预测波士顿房价(附带数据集下载链接, 长期有效)

机器学习基本步骤: ​1.数据获取-导入外部数据集housing_price 数据获取: 听着高大上, 实际上就是把内部/外部数据集加载进来 2.数据基本处理-缺失值处理, 分割数据集, 数据基本处理:实际上就是对数据中缺失的数据和异常的数据进行处理, 然后进行数据集分割 3.特征工程-特…

Spring Boot知识管理系统:创新与实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…

公开课学习:软件测试面试3大难题

1.验证码机制的处理:自动化遇到验证码怎么办?怎么测试? 流程:先识别元素,再对元素进行操作。实际上,验证码无法用自动化技术操作解决,都是由开发给万能码,或者屏蔽验证码去解决!那如果不能屏…

数据结构——优先级队列(堆)

概念: 在操作数据的时候,操作的数据具有优先级,需要返回最高级别的优先级数据或者添加新对象时就需要用到优先级队列。 jdk1.8中的PrioriytQueue底层实现了堆这种数据结构实际上,堆其实就是在完全二叉树进行调整而来。 堆&#x…

C++STL--------vector

文章目录 一、vector常用接口介绍1、initializer_list2、接口有很多类似3、typeid(类型).name()4、find() 函数5、内置类型构造 二、vector()常用接口模拟实现 截图来源网站:https://legacy.cplusplus.com/reference/vector/vector/ 一、vector常用接口介绍 是一个…

哪种护眼大路灯孩子用着最好?公认最好的护眼大路灯

哪种护眼大路灯孩子用着最好?最近也有不少家长关注到了孩子视力健康的这个情况,很着急开始寻找各种能够减少孩子因为不良光线影响视力健康的方法,其中大路灯以良好的表现成为家长们的首选,但快速发展的市场中,却涌入了…

Golang 逃逸分析(Escape Analysis)理解与实践篇

Golang 逃逸分析(Escape Analysis)理解与实践篇 文章目录 1.逃逸分析2.相关知识(栈、堆、GC分析)3.逃逸分析综合-实践 demo 逃逸分析(Escape Analysis)是编译器在编译期进行的一项优化技术,是Gl…

Qt QTableWidget多行表头、表头折行显示

表头折行显示 //方法一QVector<QString> chNames;chNames<<"表头1"<<"表头2长命名abcdefg";ui.tableWidget->setColumnCount(chNames.size()1);ui.tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem(QString::fromL…

【C】C语言常见概念~

C语言常见概念 转义字符 转义字符&#xff0c;顾名思义&#xff0c;转变原来意思的字符 比如 #include <stdio.h> int main() {printf("abcndef");return 0; }输出的结果为&#xff1a; 将代码修改一下&#xff1a; #include <stdio.h> int main(…