🗒️在Huggingface部署OpenWebUI和FastGPT
2025-7-25
| 2025-12-18
字数 0阅读时长 1 分钟
🤖
AI总结 本文介绍了如何在 Hugging Face 的免费 Spaces 上无服务器部署 OpenWebUIFastGPT。Hugging Face 是一个专注于 AI 开源平台,提供 Transformers 库、Datasets 库和 Spaces 等核心功能。OpenWebUI 是一个开源的 LLM Web UI,支持多模型、隐私和离线运行,以及 RAG 功能。FastGPT 是一个基于 LLM 的开源知识库问答系统,支持多种文档导入、可视化工作流和多模型兼容。文章提供了部署 OpenWebUI 和 FastGPT 的具体文件和环境变量建议,并推荐使用 WebDAV 进行数据同步。
English Version
This article introduces how to deploy OpenWebUI and FastGPT serverlessly on Hugging Face's free Spaces. Hugging Face is an open-source AI platform focused on providing core functionalities such as the Transformers library, Datasets library, and Spaces. OpenWebUI is an open-source LLM Web UI that supports multiple models, privacy and offline operation, as well as RAG capabilities. FastGPT is an open-source knowledge base Q&A system based on LLMs, supporting various document imports, visual workflows, and compatibility with multiple models. The article provides specific file and environment variable recommendations for deploying OpenWebUI and FastGPT, and suggests using WebDAV for data synchronization.

一,Huggingface介绍

 
Hugging Face 是一个专注于人工智能(尤其是自然语言处理,NLP)的开源平台和社区,被广泛称为“AI 领域的 GitHub”。它由 Clément Delangue 等人在 2016 年创立,最初聚焦 NLP,后扩展至多模态和通用 AI 领域。

1,核心功能

  • Transformers 库:
    • 功能:提供数千种预训练模型(如 BERT、GPT、T5、LLaMA、Qwen 等),支持文本分类、问答、翻译、文本生成、图像生成、语音识别等任务
    • 特点:通过 pipeline API 实现一行代码调用模型,例如情感分析或文本生成,支持PyTorch、TensorFlow、JAX 等框架,并提供统一的的 AutoModel 和 AutoTokenizer 接口
  • Datasets 库
    • 功能:提供 40 万+公开数据集(如 GLUE、COCO),支持高效加载、预处理和流式处理,适用于训练和评估模型
  • Spaces(演示空间)
    • 功能:免费托管交互式 AI 应用(如聊天机器人、图像生成工具),通过 Gradio 或 Streamlit 快速构建演示界面
    • 支持Docker部署
  • 社区与企业服务
    • 社区:活跃的开发者论坛和协作生态,支持知识分享和模型贡献
    • 企业服务:提供私有模型托管、高性能推理 API 和定制化解决方案

2,主要作用

  • NLP 任务
    • 文本生成:如使用 GPT 或 Qwen 生成文章、代码
    • 翻译与问答:调用 Helsinki-NLP 等模型实现多语言翻译或文档问答
    • 情感分析/文本分类:快速分析用户评论或新闻情感倾向
  • 多模态应用
    • 图像处理:通过 Stable Diffusion 生成图像,或使用视觉问答模型分析图片内容
    • 语音处理:支持语音识别和音频分离(如提取人声和背景音乐)
  • 无代码工具
    • AI Sheets:无需编程即可用预训练模型处理数据,如自动标注或格式转换
  • 教育与研究
    • 提供免费课程和文档,帮助初学者学习 AI 技术
    • 支持模型微调和分布式训练,加速科研迭代

3,优势与特点

  1. 开源友好:所有核心库(如 Transformers、Datasets)完全开源,采用 Apache 2.0 许可
  1. 性能优化:支持量化(8-bit/4-bit)、ONNX/TensorRT 加速和硬件适配(CUDA、MPS)
  1. 民主化 AI:降低技术门槛,使个人开发者和小团队也能使用先进模型

二,部署OpenWebui

OpenWebUI(原名 Ollama WebUI)是一个开源的、可自托管的 Web 用户界面,专为与大型语言模型(LLMs)交互而设计。它支持完全离线运行,提供类似 ChatGPT 的直观体验,同时兼容多种模型后端(如 Ollama、OpenAI API 等),适用于个人、企业及开发者场景。以下是其核心特点:
  • 多模型支持:无缝对接 Ollama、OpenAI 兼容 API(如 DeepSeek、Gemini 等),支持同时调用多个模型并对比输出结果
  • 隐私与离线运行:所有数据(聊天记录、文档等)存储在本地,无需依赖云端服务,满足 GDPR 等隐私合规要求
  • 检索增强生成(RAG):支持上传本地文档(PDF、Word 等)或抓取网页内容(通过 #URL 命令),提升回答的准确性和上下文相关性
  • 开发者友好:提供 OpenAI 兼容的 API,便于集成到现有系统,同时支持 Python 函数调用 和插件系统(Pipelines),可扩展自定义逻辑(如实时翻译、代码执行)

1,主要文件:

(1).gitattributes文件
.gitattributes文件代码

plain

*.7z filter=lfs diff=lfs merge=lfs -text *.arrow filter=lfs diff=lfs merge=lfs -text *.bin filter=lfs diff=lfs merge=lfs -text *.bz2 filter=lfs diff=lfs merge=lfs -text *.ckpt filter=lfs diff=lfs merge=lfs -text *.ftz filter=lfs diff=lfs merge=lfs -text *.gz filter=lfs diff=lfs merge=lfs -text *.h5 filter=lfs diff=lfs merge=lfs -text *.joblib filter=lfs diff=lfs merge=lfs -text *.lfs.* filter=lfs diff=lfs merge=lfs -text *.mlmodel filter=lfs diff=lfs merge=lfs -text *.model filter=lfs diff=lfs merge=lfs -text *.msgpack filter=lfs diff=lfs merge=lfs -text *.npy filter=lfs diff=lfs merge=lfs -text *.npz filter=lfs diff=lfs merge=lfs -text *.onnx filter=lfs diff=lfs merge=lfs -text *.ot filter=lfs diff=lfs merge=lfs -text *.parquet filter=lfs diff=lfs merge=lfs -text *.pb filter=lfs diff=lfs merge=lfs -text *.pickle filter=lfs diff=lfs merge=lfs -text *.pkl filter=lfs diff=lfs merge=lfs -text *.pt filter=lfs diff=lfs merge=lfs -text *.pth filter=lfs diff=lfs merge=lfs -text *.rar filter=lfs diff=lfs merge=lfs -text *.safetensors filter=lfs diff=lfs merge=lfs -text saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.tar.* filter=lfs diff=lfs merge=lfs -text *.tar filter=lfs diff=lfs merge=lfs -text *.tflite filter=lfs diff=lfs merge=lfs -text *.tgz filter=lfs diff=lfs merge=lfs -text *.wasm filter=lfs diff=lfs merge=lfs -text *.xz filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text
Plain text
(2)Dockerfile文件

docker

FROM ghcr.io/open-webui/open-webui:main COPY sync_data.sh sync_data.sh RUN chmod -R 777 ./data && \ sed -i "1r sync_data.sh" ./start.sh
Docker
(3)README.md文件

docker

--- title: Openweb emoji: 📉 colorFrom: indigo colorTo: yellow sdk: docker pinned: false app_port: 8080 --- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
Docker
(4)sync_data.sh文件

python

#!/bin/bash # 检查必要的环境变量 if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD" ]; then echo "缺少必要的环境变量 WEBDAV_URL、WEBDAV_USERNAME 或 WEBDAV_PASSWORD" exit 1 fi mkdir -p ./data # 从 WebDAV 下载webui.db文件 echo "正在从 WebDAV 下载数据库文件..." curl -L --fail --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/webui.db" -o "./data/webui.db" || { echo "下载失败,正在创建新的数据库文件..." # 创建一个空的数据库文件或者初始化数据库 touch "./data/webui.db" # 如果你需要创建一个有特定结构的SQLite数据库,可以使用以下命令: # sqlite3 "./data/webui.db" "CREATE TABLE IF NOT EXISTS example (id INTEGER PRIMARY KEY);" echo "新的数据库文件创建成功" } echo "数据库文件准备完成" # 定义同步函数 sync_data() { # 首次等待同步间隔 SYNC_INTERVAL=${SYNC_INTERVAL:-7200} # 默认间隔时间为 7200 秒 echo "初始下载完成,等待 ${SYNC_INTERVAL} 秒后开始同步..." sleep $SYNC_INTERVAL while true; do echo "正在开始同步" # 检查数据库文件是否存在 if [ -f "./data/webui.db" ]; then # 生成当前时间的文件名 FILENAME="webui_$(date +'%m_%d_%H%M').db" echo "同步到 WebDAV..." # 先覆盖Webdav目录下默认的webui.db文件(方便下次拉取的时候就是最新版本) curl -L -T "./data/webui.db" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" && { echo "WebDAV 上传成功: $FILENAME" # 再上传以日期命名的数据库文件 curl -L -T "./data/webui.db" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/webui.db" && { echo "WebDAV 更新主文件成功" } || { echo "WebDAV 更新主文件失败" } } || { echo "WebDAV 上传失败,等待重试..." sleep 10 curl -L -T "./data/webui.db" --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/$FILENAME" || { echo "重试失败,放弃上传。" } } else echo "未找到 webui.db 文件,跳过同步" fi # 等待下一次同步间隔 echo "当前时间 $(date '+%Y-%m-%d %H:%M:%S')" echo "等待 ${SYNC_INTERVAL} 秒后进行下一次同步..." sleep $SYNC_INTERVAL done } # 后台启动同步进程 sync_data &
Python

2,主要环境变量

plain

UID=1000 GID=1000 TZ=Asia/Shanghai ENABLE_AUTH=True WEBUI_AUTH=True ENABLE_OLLAMA_API=False BYPASS_MODEL_ACCESS_CONTROL=True SYNC_INTERVAL=28800 WEBDAV_URL= WEBDAV_USERNAME= WEBDAV_PASSWORD= WEBUI_SECRET_KEY=
Plain text
此处推荐使用webdav进行同步,推荐网盘为Infini CLOUD
部署教程参考:抱脸部署OpenWebUI
备份数据库参考:WebDav备份数据库

三,部署FastGPT

FastGPT 是一个基于大型语言模型(LLM)的开源知识库问答系统,专注于帮助企业及个人快速构建专属的智能问答应用。以下是其核心特点与功能的简要介绍:
  • 知识库问答:支持导入多种格式文档(如PDF、Word、Excel等),通过自动预处理、向量化和问答分割(RAG技术),构建可交互的AI知识库,实现精准问答
  • 可视化工作流编排:通过 Flow模块 拖拽设计复杂流程(如多轮对话、数据库查询、库存管理),无需编码即可实现自动化任务
  • 多模型兼容:支持GPT、Claude、文心一言等主流LLM,并可本地或云端部署,保障数据隐私
  • API集成:接口与OpenAI对齐,可接入企业微信、飞书等平台,扩展性强

1,主要文件

(1).gitattributes文件
.gitattributes文件代码

plain

*.7z filter=lfs diff=lfs merge=lfs -text *.arrow filter=lfs diff=lfs merge=lfs -text *.bin filter=lfs diff=lfs merge=lfs -text *.bz2 filter=lfs diff=lfs merge=lfs -text *.ckpt filter=lfs diff=lfs merge=lfs -text *.ftz filter=lfs diff=lfs merge=lfs -text *.gz filter=lfs diff=lfs merge=lfs -text *.h5 filter=lfs diff=lfs merge=lfs -text *.joblib filter=lfs diff=lfs merge=lfs -text *.lfs.* filter=lfs diff=lfs merge=lfs -text *.mlmodel filter=lfs diff=lfs merge=lfs -text *.model filter=lfs diff=lfs merge=lfs -text *.msgpack filter=lfs diff=lfs merge=lfs -text *.npy filter=lfs diff=lfs merge=lfs -text *.npz filter=lfs diff=lfs merge=lfs -text *.onnx filter=lfs diff=lfs merge=lfs -text *.ot filter=lfs diff=lfs merge=lfs -text *.parquet filter=lfs diff=lfs merge=lfs -text *.pb filter=lfs diff=lfs merge=lfs -text *.pickle filter=lfs diff=lfs merge=lfs -text *.pkl filter=lfs diff=lfs merge=lfs -text *.pt filter=lfs diff=lfs merge=lfs -text *.pth filter=lfs diff=lfs merge=lfs -text *.rar filter=lfs diff=lfs merge=lfs -text *.safetensors filter=lfs diff=lfs merge=lfs -text saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.tar.* filter=lfs diff=lfs merge=lfs -text *.tar filter=lfs diff=lfs merge=lfs -text *.tflite filter=lfs diff=lfs merge=lfs -text *.tgz filter=lfs diff=lfs merge=lfs -text *.wasm filter=lfs diff=lfs merge=lfs -text *.xz filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text
Plain text
(2)Dockerfile文件

docker

FROM ghcr.io/labring/fastgpt:v4.9.14 EXPOSE 3000 ENV PORT 3000 # ADD ./config.json /app/data/config.json ENV HOME_URL=/app/list ENV DB_MAX_LINK=100 ENV TOKEN_KEY=any ENV ROOT_KEY=root_key ENV FILE_TOKEN_KEY=filetoken
Docker
目前v4.9.3 是最高支持仅使用MONGODB和PostgreSQL的项目版本了,而v4.9.14 是最高支持仅使用MONGODB、PostgreSQL和Redis数据库的项目版本。
此后版本都需要另外部署fastgpt-plugins等相关依赖插件,详情可以参考:版本升级说明 | FastGPT
(3)README.md文件

docker

--- title: Fast emoji: 📊 colorFrom: blue colorTo: blue sdk: docker pinned: false license: mit app_port: 3000 --- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
Docker
(4)config.json文件:在新版本中此文件已经废弃
config.json代码

json

{ "systemEnv": { "openapiPrefix": "fastgpt", "vectorMaxProcess": 10, "qaMaxProcess": 10, "pgHNSWEfSearch": 80 }, "llmModels": [ { "model": "@cf/qwen/qwen1.5-14b-chat-awq", "name": "Qwen 1.5 14B Chat AWQ", "avatar": "/imgs/model/qwen.svg", "maxContext": 8192, "maxResponse": 2048, "quoteMaxToken": 8192, "maxTemperature": 1.0, "inputPrice": 0, "outputPrice": 0, "censor": false, "vision": false, "datasetProcess": true, "toolChoice": true, "functionCall": true, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig": {} }, { "model": "deepseek-chat", "name": "DeepSeek V2", "avatar": "/imgs/model/deepseek.svg", "maxContext": 4096, "maxResponse": 2048, "quoteMaxToken": 4096, "maxTemperature": 1.0, "inputPrice": 0, "outputPrice": 0, "censor": false, "vision": false, "datasetProcess": true, "toolChoice": true, "functionCall": true, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig": {} }, { "model": "gpt-4o-mini", "name": "GPT-4O Mini", "avatar": "/imgs/model/openai.svg", "maxContext": 128000, "maxResponse": 4096, "quoteMaxToken": 128000, "maxTemperature": 2.0, "inputPrice": 3, "outputPrice": 6, "censor": true, "vision": true, "datasetProcess": true, "toolChoice": true, "functionCall": true, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig": {} }, { "model": "chatgpt-4o-latest", "name": "GPT-4O", "avatar": "/imgs/model/openai.svg", "maxContext": 128000, "maxResponse": 4096, "quoteMaxToken": 128000, "maxTemperature": 2.0, "inputPrice": 10, "outputPrice": 30, "censor": true, "vision": true, "datasetProcess": true, "toolChoice": true, "functionCall": true, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig": {} }, { "model": "claude-3-haiku-20240307", "name": "Claude 3 Haiku", "avatar": "/imgs/model/claude.svg", "maxContext": 200000, "maxResponse": 4096, "quoteMaxToken": 200000, "maxTemperature": 1.0, "inputPrice": 0.25, "outputPrice": 1.25, "censor": true, "vision": true, "datasetProcess": true, "toolChoice": true, "functionCall": true, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig": {} }, { "model": "claude-3-5-sonnet-20240620", "name": "Claude 3.5 Sonnet", "avatar": "/imgs/model/claude.svg", "maxContext": 200000, "maxResponse": 4096, "quoteMaxToken": 200000, "maxTemperature": 1.0, "inputPrice": 3, "outputPrice": 15, "censor": true, "vision": true, "datasetProcess": true, "toolChoice": true, "functionCall": true, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig": {} }, { "model": "qwen-turbo", "name": "Qwen Turbo", "avatar": "/imgs/model/qwen.svg", "maxContext": 128000, "maxResponse": 8192, "quoteMaxToken": 128000, "maxTemperature": 1.0, "inputPrice": 0, "outputPrice": 0, "censor": false, "vision": true, "datasetProcess": true, "toolChoice": true, "functionCall": true, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig": {} }, { "model": "qwen-plus", "name": "Qwen Plus", "avatar": "/imgs/model/qwen.svg", "maxContext": 128000, "maxResponse": 8192, "quoteMaxToken": 128000, "maxTemperature": 1.0, "inputPrice": 0, "outputPrice": 0, "censor": false, "vision": true, "datasetProcess": true, "toolChoice": true, "functionCall": true, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig": {} }, { "model": "gemini-1.5-flash-latest", "name": "Gemini 1.5 Flash", "avatar": "/imgs/model/gemini.svg", "maxContext": 128000, "maxResponse": 2048, "quoteMaxToken": 128000, "maxTemperature": 1.0, "inputPrice": 0, "outputPrice": 0, "censor": false, "vision": true, "datasetProcess": true, "toolChoice": true, "functionCall": true, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig": {} }, { "model": "gemini-1.5-pro-latest", "name": "Gemini 1.5 Pro", "avatar": "/imgs/model/gemini.svg", "maxContext": 2000000, "maxResponse": 2048, "quoteMaxToken": 2000000, "maxTemperature": 1.0, "inputPrice": 0, "outputPrice": 0, "censor": false, "vision": true, "datasetProcess": true, "toolChoice": true, "functionCall": true, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig": {} }, { "model": "dall-e-3", "name": "dall-e-3", "avatar": "/imgs/model/openai.svg", "maxImageSize": 1024, "minImageSize": 256, "styleOptions": ["vivid", "natural"], "qualityOptions": ["standard", "hd"], "charsPointsPrice": 0, "censor": false, "vision": false, "datasetProcess": false, "toolChoice": false, "functionCall": false, "customCQPrompt": "", "customExtractPrompt": "", "defaultSystemChatPrompt": "", "defaultConfig": {} } ], "vectorModels": [ { "model": "text-embedding-ada-002", "name": "Embedding-2", "avatar": "/imgs/model/openai.svg", "charsPointsPrice": 0, "defaultToken": 700, "maxToken": 3000, "weight": 100 }, { "model": "text-embedding-3-large", "name": "text-embedding-3-large", "avatar": "/imgs/model/openai.svg", "charsPointsPrice": 0, "defaultToken": 512, "maxToken": 3000, "weight": 100, "defaultConfig": { "dimensions": 1024 } }, { "model": "text-embedding-3-small", "name": "text-embedding-3-small", "avatar": "/imgs/model/openai.svg", "charsPointsPrice": 0, "defaultToken": 512, "maxToken": 3000, "weight": 100 } ], "reRankModels": [], "audioSpeechModels": [ { "model": "tts-1", "name": "OpenAI TTS1", "charsPointsPrice": 0, "voices": [ { "label": "Alloy", "value": "alloy", "bufferId": "openai-Alloy" }, { "label": "Echo", "value": "echo", "bufferId": "openai-Echo" }, { "label": "Fable", "value": "fable", "bufferId": "openai-Fable" }, { "label": "Onyx", "value": "onyx", "bufferId": "openai-Onyx" }, { "label": "Nova", "value": "nova", "bufferId": "openai-Nova" }, { "label": "Shimmer", "value": "shimmer", "bufferId": "openai-Shimmer" } ] } ], "whisperModel": { "model": "whisper-1", "name": "Whisper1", "charsPointsPrice": 0 } }
JSON

2,主要环境变量

plain

DEFAULT_ROOT_PSW= CHAT_API_KEY= OPENAI_BASE_URL= MONGODB_URI=mongodb+srv://user:passwd@program.xxx.mongodb.net/?retryWrites=true&w=majority&appName=FastGPT?directConnection=true PG_URL=postgresql://postgres.xxx@aws-0-us-west-1.pooler.supabase.com:5432/postgres?directConnection=true REDIS_URL=redis://user:passwd@xxx.redislabs.com:port
Plain text
其中MONGODB_URI可从Mongodb注册账户并获取,而PG_URL可从 Supabase注册账户并获取,REDIS_URL可从Redis注册获取。
部署教程参考:抱脸部署FastGPT
  • AI
  • 工具
  • SSH安全设置无需服务器实现微信订阅号AI
    Loading...