共计 5328 个字符,预计需要花费 14 分钟才能阅读完成。
背景
个人技能受限,在 AI 浪潮中没法深入算法底层机理,但我使用 AI 应用提升效率其实从 GPT 3.5 发布的第二天就开始进行。
从最开始的 OpenAI 官网 chat,到 私有化部署 NextChat 对接各家模型,再到 LobeChat,FastGPT,MaxKB,沉浸式翻译,VsCode Roo Code等等 AI应用场景不一而足。
结合自有的服务器私有化部署,不仅提升了个人解决工作和生活问题上的效率,也将部分服务推广给了家人使用,家人赞不绝口。
以 LobeChat 为开篇,讲讲我是如何使用 AI 应用。
LobeChat 是什么
LobeChat 是一个开源的、可扩展的聊天机器人框架,专注于构建强大的 AI 对话应用。它具有以下特点:
- 现代化用户界面: 提供美观且用户友好的聊天界面。
- 插件系统: 支持各种插件,可以扩展其功能,例如知识库、工具等。
- 支持多种模型: 可以集成不同的语言模型,例如 OpenAI 的 GPT 系列模型。
- 易于部署: 可以轻松地在本地或云端部署。
- 开源: 允许开发者自由使用、修改和分发。
当前我部署了数据库版本,可以实现多用户管理和云同步。
部署
官方的 DB 版本还集成了casdoor,oneapi ,minio 等组件,我在外部环境中已经有独立的实现可直接复用,所以下文不会将它们集成在 docker-compose 中再次部署。
Docker Compose
关于如何部署 CasDoor 以实现用户认证管理,参考站内文章:开源统一身份认证系统:CasDoor
关于如何部署 SearXNG 以实现联网查询,参考站内文章:开源搜索引擎 SearXNG
官网 DB 版本部署指引:使用 Docker Compose 部署 LobeChat 服务端数据库版本
个人 docker-compose.yml 配置文件示例:
- 移除 minio 相关配置
- 移除 casdoor 相关配置
- 移除 oneapi相关配置
# cat docker-compose.yml
name: lobe-chat-database
services:
network-service:
image: alpine
container_name: lobe-network
ports:
- '${MINIO_PORT}:${MINIO_PORT}' # MinIO API
- '9001:9001' # MinIO Console
- '${CASDOOR_PORT}:${CASDOOR_PORT}' # Casdoor
- '${LOBE_PORT}:3210' # LobeChat
command: tail -f /dev/null
networks:
- lobe-network
postgresql:
image: pgvector/pgvector:pg16
container_name: lobe-postgres
ports:
- '5432:5432'
volumes:
- './data:/var/lib/postgresql/data'
environment:
- 'POSTGRES_DB=${LOBE_DB_NAME}'
- 'POSTGRES_PASSWORD=${POSTGRES_PASSWORD}'
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U postgres']
interval: 5s
timeout: 5s
retries: 5
restart: always
networks:
- lobe-network
lobe:
image: lobehub/lobe-chat-database
container_name: lobe-chat
network_mode: 'service:network-service'
depends_on:
postgresql:
condition: service_healthy
network-service:
condition: service_started
environment:
- 'NEXT_AUTH_SSO_PROVIDERS=casdoor'
- 'KEY_VAULTS_SECRET=***'
- 'NEXT_AUTH_SECRET=***'
- 'DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgresql:5432/${LOBE_DB_NAME}'
- 'LLM_VISION_IMAGE_USE_BASE64=1'
env_file:
- .env
restart: always
volumes:
data:
driver: local
s3_data:
driver: local
networks:
lobe-network:
driver: bridge
环境变量配置示例:
- 使用 cloudflare R2 作为对象存储接入
- 接入外部Casdoor、模型中转站和部分官方提供商、SearXNG、
# cat .env
# Proxy,如果你需要的话(比如你使用 GitHub 作为鉴权服务提供商)
# HTTP_PROXY=http://localhost:7890
# HTTPS_PROXY=http://localhost:7890
# 其他环境变量,视需求而定,可以参照客户端版本的环境变量配置,注意不要有 ACCESS_CODE
# OPENAI_API_KEY=sk-xxxx
# OPENAI_PROXY_URL=https://api.openai.com/v1
# OPENAI_MODEL_LIST=...
# ===================
# ===== 预设配置 =====
# ===================
# 如没有特殊需要不用更改
LOBE_PORT=3210
CASDOOR_PORT=8000
MINIO_PORT=9000
APP_URL=https://***.com
AUTH_URL=https://***.com/api/auth
# Postgres 相关,也即 DB 必须的环境变量
LOBE_DB_NAME=lobechat
POSTGRES_PASSWORD=your_postgres_password
AUTH_CASDOOR_ISSUER=https://***.com
# Casdoor secret
AUTH_CASDOOR_ID=***
AUTH_CASDOOR_SECRET=***
# MinIO S3 配置
#MINIO_ROOT_USER=admin
#MINIO_ROOT_PASSWORD=c94d8d44as
# 在下方配置 minio 中添加的桶
#S3_PUBLIC_DOMAIN=http://192.168.2.11:9000
#S3_ENDPOINT=http://192.168.2.11:9000
#MINIO_LOBE_BUCKET=lobe
S3_BUCKET=pyw-lobechat
S3_ENDPOINT=https://***.r2.cloudflarestorage.com
NEXT_PUBLIC_S3_DOMAIN=https://***.com
S3_ACCESS_KEY_ID=***
S3_SECRET_ACCESS_KEY=***
# 为 casdoor 配置
origin=http://***.com
# 模型配置
# OpenAI
ENABLED_OPENAI=1
OPENAI_API_KEY=***
OPENAI_PROXY_URL=https://***.com/v1
OPENAI_MODEL_LIST=-all,+claude-3-5-sonnet,+deepseek-reasoner,+deepseek-chat,+o3-mini-all
# DeepSeek
DEEPSEEK_API_KEY=***
DEEPSEEK_MODEL_LIST=-all,+deepseek-reasoner,+deepseek-chat
# Google
GOOGLE_API_KEY=***
GOOGLE_MODEL_LIST=-all,+gemini-2.0-pro-exp-02-05,+gemini-2.0-flash-lite-preview-02-05
# SearchXNG 联网搜索
SEARXNG_URL=https://***.com
LobeChat 迭代极快,每天都好几个版本,自动化更新脚本示例:
- 计划任务控制执行时间
- 此脚本由 Claude 3.5 Sonnet 生成
#!/bin/bash
# 定义颜色输出
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 定义镜像名称
IMAGE_NAME="lobehub/lobe-chat-database"
SERVICE_NAME="lobe"
# 定义日志文件路径
LOG_FILE="run.log"
# 日志函数,带时间戳
log() {
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo -e "[${timestamp}] $1" | tee -a "$LOG_FILE"
}
log "${YELLOW}开始检查更新...${NC}"
# 记录当前使用的镜像 ID
CURRENT_IMAGE_ID=$(docker images $IMAGE_NAME -q)
# 拉取最新镜像
log "${YELLOW}拉取最新镜像...${NC}"
/usr/local/bin/docker-compose pull $SERVICE_NAME
# 获取拉取后的镜像 ID
NEW_IMAGE_ID=$(docker images $IMAGE_NAME -q)
# 比较镜像 ID
if [ "$CURRENT_IMAGE_ID" != "$NEW_IMAGE_ID" ]; then
log "${GREEN}检测到新版本,开始重启服务...${NC}"
# 重启服务
/usr/local/bin/docker-compose down
/usr/local/bin/docker-compose up -d
log "${GREEN}服务已更新并重启完成${NC}"
# 可选:删除旧镜像
#if [ ! -z "$CURRENT_IMAGE_ID" ]; then
# log "${YELLOW}清理旧镜像...${NC}"
# docker rmi $CURRENT_IMAGE_ID
#fi
else
log "${GREEN}当前已经是最新版本,无需更新${NC}"
fi
# 运行
docker-compose up -d
# 停止
docker-compose down
Nginx 反代
配置文件示例:
# cat /etc/nginx/conf.d/***.conf
upstream lobe-chat {
server 192.168.2.11:3210;
}
server {
listen 80;
server_name ***.cn;
proxy_buffering off;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
http2 on;
server_name ***.cn;
location / {
set_real_ip_from 192.168.0.0/16;
real_ip_header X-Real-IP;
allow 192.168.0.0/16;
allow 10.200.0.0/16;
satisfy any;
proxy_pass http://lobe-chat;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
add_header Cache-Control no-cache;
proxy_cache off; # 关闭缓存
proxy_buffering off; # 关闭代理缓冲
chunked_transfer_encoding on; # 开启分块传输编码
tcp_nopush on; # 开启TCP NOPUSH选项,禁止Nagle算法
tcp_nodelay on; # 开启TCP NODELAY选项,禁止延迟ACK算法
keepalive_timeout 300; # 设定keep-alive超时时间为65秒
}
}
使用
使用浏览器访问即可
接入 CasDoor 认证:
添加各类助手:
- DeepSeek R1等推理模型不使用助手预置 prompt 反而有更好的表现
接入各家 AI提供商:
目前 Google 提供免费的 Gemini 调用,火山引擎提供免费的 DeepSeek 调用。
支持 Function Call
的模型可结合 SearXNG 实现联网查询:
移动端可以将浏览器网页添加为快捷方式,视同应用一样启动;电脑端亦可以利用 chrome 将浏览器网页添加为快捷方式。
本文属于专题:AI应用
- AI助手 LobeChat
- 开源搜索引擎 SearXNG