AI助手 LobeChat

73次阅读
没有评论

共计 5328 个字符,预计需要花费 14 分钟才能阅读完成。

背景

个人技能受限,在 AI 浪潮中没法深入算法底层机理,但我使用 AI 应用提升效率其实从 GPT 3.5 发布的第二天就开始进行。

从最开始的 OpenAI 官网 chat,到 私有化部署 NextChat 对接各家模型,再到 LobeChat,FastGPT,MaxKB,沉浸式翻译,VsCode Roo Code等等 AI应用场景不一而足。

结合自有的服务器私有化部署,不仅提升了个人解决工作和生活问题上的效率,也将部分服务推广给了家人使用,家人赞不绝口。

以 LobeChat 为开篇,讲讲我是如何使用 AI 应用。

LobeChat 是什么

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 认证:
AI助手 LobeChat

添加各类助手:

  • DeepSeek R1等推理模型不使用助手预置 prompt 反而有更好的表现

AI助手 LobeChat

接入各家 AI提供商:

目前 Google 提供免费的 Gemini 调用,火山引擎提供免费的 DeepSeek 调用。

AI助手 LobeChat

支持 Function Call​ 的模型可结合 SearXNG 实现联网查询:
AI助手 LobeChat

移动端可以将浏览器网页添加为快捷方式,视同应用一样启动;电脑端亦可以利用 chrome 将浏览器网页添加为快捷方式。

本文属于专题:AI应用

引用链接

正文完
 
pengyinwei
版权声明:本站原创文章,由 pengyinwei 2025-02-27发表,共计5328字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处:https://www.opshub.cn
评论(没有评论)