|

LobeHub 本地部署

书接上文:

Why LobeHub

我需要进一步在Thor上搭建一个llm chat的web应用,方便测试,并支持日常的简单使用。大模型推荐了三个项目Open WebUI,Anything LLM, Lobe Chat,依次做了尝试。
实际上它们都能满足日常需求,日常需求之外各自有不同的侧重:
Open WebUI:内置了完善的基于角色的访问控制(RBAC),可以为家庭或小团队成员分配不同账户。
AnythingLLM:是为了解决“大模型如何安全且高效地阅读我的私有数据”这个痛点而诞生的。自建知识库体系强大。
Lobe Chat:UI好看,插件和生态比较完善。

在如今的Vibe Coding时代,我强烈建议部署开源应用时,如非必要,不要用docker,不要用二进制文件:

  • 这些项目往往由vibe coding而来,人类的review速度远更不上机器写代码的能力,这些工程bug非常多。
  • 你大概率是需要在本地修改git上最新分支的代码的。
  • 你只能在本地另起一个coding agent帮助你修复你的pipeline当中遇到的bug。
  • 所以你需要一个可以随手改源码的启动环境。

因为部署操作的惯性,我还在再用docker起这些web服务,再碰到这两个bug后,没有去修工程,而是直接跳过了前两个方案:

  • Open WebUI:调用联网搜索能力失败,支持的搜索供应商基本都需要付费api。
  • AnythingLLM:上下文超出token长度限制后,截取方式存在bug。
  • Lobe Chat:不要搜索Lobe Chat(大模型搞错名字了),找LobeHub https://github.com/lobehub/lobehub

记住当你读到这篇文章,也许这两个bug都已经解决了,反倒是最新的LobeHub里新增了与你的工作流不相符的bug。我这儿的版本是v2.1.52

配置项

如上文所述,建议大家从源码部署,我这儿还是用了docker

mkdir lobehub-db && cd lobehub-db
bash <(curl -fsSL https://lobe.li/setup.sh)

执行 bash <(curl -fsSL https://lobe.li/setup.sh) 的时候随便填都按默认即可,反正一会儿我们需要稍作调整。

脚本会为我们建立好一些配置文件,我们需要改稍作修改

docker-compose.yml

name: lobehub
services:
  lobe:
    image: lobehub/lobehub
    container_name: lobehub
    ports:
      - '${LOBE_PORT}:3210'
    extra_hosts:
      - "host.docker.internal:host-gateway"
    depends_on:
...

加入这条
extra_hosts:
- "host.docker.internal:host-gateway"

.env (隐藏文件)

# Proxy,如果你需要的话(比如你使用 GitHub 作为鉴权服务提供商)
# HTTP_PROXY=http://localhost:7890
# HTTPS_PROXY=http://localhost:7890

# 允许登录的邮箱地址,用英文逗号分隔
# 设置后只有列表中的邮箱可以登录,其他用户可以注册但无法登录
# 留空则允许所有用户注册登录
# AUTH_ALLOWED_EMAILS=user1@example.com,user2@example.com

# 禁用用户注册(仅允许 SSO 登录)
# 设置为 1 后,用户无法通过邮箱密码注册,只能通过 SSO 登录
# AUTH_DISABLE_EMAIL_PASSWORD=1

# ===================
# ===== 预设配置 =====
# ===================
# 如没有特殊需要不用更改
LOBE_PORT=3210
APP_URL=http://10.130.92.107:3210
# 内部应用URL,用于容器内部服务间通信
# Docker Compose 部署时必须配置,否则当 APP_URL 为宿主机 IP 时 AI 生图等功能会失败
INTERNAL_APP_URL=http://localhost:3210
DEFAULT_FILES_CONFIG=embedding_model=ollama/bge-m3

# 密钥配置(由 setup.sh 自动生成)
KEY_VAULTS_SECRET=XXXXX

# PostgreSQL 配置
LOBE_DB_NAME=lobechat
POSTGRES_PASSWORD=uWNZugjBqixf8dxC

# RustFS S3 配置
S3_ENDPOINT=http://10.130.92.107:9000
RUSTFS_PORT=9000
RUSTFS_ADMIN_PORT=9001
...

修改两处:
APP_URL和S3_ENDPOINT,改成Thor的本机固定IP,如果未来改变了Thor的网络配置,比如说由网线连接改完无线连接方式,需要再次对此处进行更新
增加 DEFAULT_FILES_CONFIG=embedding_model=ollama/bge-m3

部署ollama/bge-m3

我们在前面一篇文章了部署了vllm + Qwen3.5,还没有部署bge-m3,现在来部署一下。

先部署ollama

docker run -d --name ollama-embedding   --runtime nvidia --gpus all   -p 8001:11434   -v ollama_data:/root/.ollama   ollama/ollama:latest

再部署bge-m3

docker exec -it ollama-embedding ollama run bge-m3
docker logs -f ollama-embedding

需要一个优化过的网络环境。这个模型倒是不大,等待它慢慢下载吧。

为什么需要embedding_model=ollama/bge-m3

我们使用的是纯本地的方案,在LobeHub中,长时记忆和文件检索会调用embbeding模型,默认情况下,调用的是openai的text embedding 3 small,我们准备跑纯本地的模型,并不准备配置openai api,lobehub的UI里面是不支持这个项目的修改的,只能在启动的时候加入这一句环境变量。
为什么是ollama + bge-m3
lobehub里没有做额外的适配,只会以调用text embedding 3 small的方式去调用这个embedding_model:它是matryoshka representation会额外请求一个“输出维度”的参数,需要8k的上下文长度。
如果我们用vllm,它对输入api限制严格,只能接原生支持matryoshka的模型,比如nomic,但nomic原生只支持2048的长度,vllm并不能触发它的动态旋转位置编码(Dynamic RoPE Scaling)给到8k长度。
但是我们只要切换到ollama,它遇到不认识的参数会直接丢弃,会直接忽略matryoshka representation给到我们所需的编码,直接上一个原生支持8k长度的bge-m3即可。
另外试了一下 ollama + nomic 目前也还是行不通的。

启动LobeHub 配置接口

启动docker

docker compose up

在thor上或者内网其它机器上打开http://{thor-ip}:3210
第一次登陆需要设置账号密码。
登入后在设置项里配置vllm和Ollama
vllm:
API Key 任意填写一个内容
API代理地址:http://host.docker.internal:8000/v1
使用客户端请求模型:false
点击获取模型列表,应当会发现出现了Qwen/Qwen3.5-122B-A10B-GPTQ-Int4,需要额外设置一下最大上下文窗口64k,打开支持技能使用,支持视觉识别,支持深度思考。
ollama:
Ollama服务地址:http://host.docker.internal:8001
点击获取模型,应该可以看到bge-m3:latest,通用配置一下上下文至8k,模型类型为向量化。

好了,现在可以试试聊天,上传图片,网络搜索,技能调用是否都正常了。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注