在群晖上通过Docker部署DB-GPT

news2024/12/26 11:02:47

在这里插入图片描述

最近一直有网友在后台私信,发的内容高度统一,只有后面 8 位数字不一样,都是 #22232 xxxxxxxx,有谁知道是什么意思吗?在我印象中,这是第二次这么大规模的发类似的字符串了


什么是 DB-GPT ?

DB-GPT是一个开源的 AI 原生数据应用开发框架( AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。目的是构建大模型领域的基础设施,通过开发多模型管理( SMMF)、Text2SQL 效果优化、RAG 框架以及优化、Multi-Agents 框架协作、AWEL (智能体工作流编排)等多种技术能力,让围绕数据库构建大模型应用更简单,更方便。

DB-GPT 整体架构设计图

DB-GPT 支持原生对话

也支持与数据对话

还能与数据库、Excel 等对话,做数据分析,实现智能体、工作流等等

前言

在开始之前,老苏觉得应该先讲讲可能会遇到的问题。如果你觉得这些问题中存在你无法解决的,建议你看看就行了。如果对你来说这都不算事,那就开始我们今天的折腾之旅吧

  • 第一个问题:是网络问题。

如果你没有一个稳定的,科学的上网环境,不建议你继续折腾,因为镜像下载之后有 13G,老苏差不多下载了一整天。有一次都快下载完成了,突然又显示 EOF 错误

如果你平时下载个几百兆的镜像都不顺畅的情况下,就不要浪费时间去尝试了,这种感觉真的很让人抓狂

  • 第二个问题:git-lfs 的支持问题。

首先要了解下,什么是 git-lfs

Git LFS (Large File Storage)Git 的扩展,是一个开源的 Git 大文件版本控制的解决方案和工具集。用于管理大文件和二进制文件,将它们存储在单独的 LFS 存储库中, 从而让 Git 存储库保持在一个可管理的规模。

现在很多包含大模型的仓库都必须使用 git-lfs 才能把整个 git 仓库拉下来,老苏的机器是 DSM6.17 的,现在想安装 Git 套件都找不到了,之前下载的版本比较老了,肯定是不支持 git-lfs

6.2 以上应该是没问题的

在不支持 git-lfs 的情况下,下载的大文件只有很小的尺寸,打开文件内容是下面这样的

version https://git-lfs.github.com/spec/v1
oid sha256:eaf5cb71c0eeab7db3c5171da504e5867b3f67a78e07bdba9b52d334ae35adb3
size 1302138752

关于 Git 套件的安装,可以参考老苏之前写的文章

文章传送门:MediaCMS在群晖中的安装

  • 第三个问题:磁盘空间问题。

前面讲了 Docker 镜像就 13G,加上 Embedding 模型差不多 3G,这还是因为老苏的群晖上没有 GPU 资源,使用了代理模型的情况下

老苏的磁盘一下就吃紧了

  • 第四个问题:API 服务问题。

因为机器没有 GPU,所以不能在本机上跑满足要求的大模型,最终用的是线上的模型,理论上 proxyllm 除了 openai 外,还支持 Moonshot,但不知道是老苏设置不正确还是 bug ,反正就是不行,所以最终聚焦在了几个常用的 API 服务上

FreeGPT35 一直报错

{
  "status": false,
  "error": {
    "message": "Error getting a new session, please try again later, if the issue persists, please open an issue on the GitHub repository.",
    "type": "invalid_request_error"
  }
}

FreeDuckDuckGo 也一样

{
  "error": true,
  "message": "empty response from server"
}

aurora 也不行

{
  "code": 403,
  "message": "failed to get chat requirements",
  "param": {},
  "type": "InitTurnStile_request_error"
}

后来发现只有 GPT4Freeok 的,当然也不完美,每次回答完成后,会用下面的输出,将之前的回答覆盖掉

LLMServer Generate Error, Please CheckErrorInfo.: RetryProviderError: RetryProvider failed: Cnote: ClientResponseError: 404, message='Not Found', url=URL('https://p1api.xjai.pro/freeapi/chat-process') Feedough: ClientResponseError: 403, message='Forbidden', url=URL('https://www.feedough.com/wp-admin/admin-ajax.php') OpenaiChat: CloudflareError: Response 403: Cloudflare detected ChatgptNext: ClientResponseError: 429, message='Too Many Requests', url=URL('https://chat.fstha.com/api/openai/v1/chat/completions') (error_code: 1)

文章传送门:在群晖上安装GPT4Free

最终测试发现,还是基于 One API + kimi-free-api 最理想,但需要在原来的渠道中,增加模型的名称为 gpt-3.5-turbo,原因后面再说

文章传送门:大模型接口管理和分发系统One API

聊天内容不会再出被错误覆盖了

准备工作

在开始安装之前,我们需要做一些准备工作,比如先下载好镜像,毕竟这是一个 13G 的大家伙,另外 Embedding 模型也需要提前下载

以下全部采用命令行方式,需要用 SSH 客户端登录到群晖后执行

# 新建文件夹 dbgpt 和 子目录
mkdir -p /volume1/docker/dbgpt/data/models

# 进入 dbgpt 目录
cd /volume1/docker/dbgpt

# 进入 models 目录
cd data/models/

# 下载 Embedding 模型 (需要git lfs)
git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese

# 下载镜像
docker pull eosphorosai/dbgpt:latest

如果不支持 git-lfs 的情况下,大文件只有 135 bytes

实在没招的情况下,一个文件一个文件下载也不是不行 😂

当然手动下载的话,记得要在 models 目录下,再建一个 text2vec-large-chinese 目录,用于上传我们下载的模型文件

安装

在群晖上以 Docker 方式安装。

本文写作时, latest 版本对应为 v0.5.7

docker cli 安装

如果你熟悉命令行,可能用 docker cli 更快捷

# 进入 dbgpt 目录
cd /volume1/docker/dbgpt

# 运行容器(采用 One API + kimi-free-api 方案)
docker run -d \
   --restart unless-stopped \
   --name dbgpt \
   -p 5670:5670 \
   -v $(pwd)/data/models/text2vec-large-chinese:/app/models/text2vec-large-chinese \
   -e LOCAL_DB_TYPE=sqlite \
   -e LOCAL_DB_PATH=data/default_sqlite.db \
   -e LLM_MODEL=proxyllm \
   -e PROXY_API_KEY=sk-bn6M52bOfdxYB3n2Ee717eA2C66b45318f1c95E4D9553d94 \
   -e PROXY_SERVER_URL=http://192.168.0.197:3033/v1/chat/completions  \
   -e EMBEDDING_MODEL=text2vec \
   -e LANGUAGE=zh \
   eosphorosai/dbgpt:latest

# 运行容器(采用 GPT4Free 方案)
docker run -d \
   --restart unless-stopped \
   --name dbgpt \
   -p 5670:5670 \
   -v $(pwd)/data/models/text2vec-large-chinese:/app/models/text2vec-large-chinese \
   -e LOCAL_DB_TYPE=sqlite \
   -e LOCAL_DB_PATH=data/default_sqlite.db \
   -e LLM_MODEL=proxyllm \
   -e PROXY_API_KEY=sk-bn6M52bOfdxYB3n2Ee717eA2C66b45318f1c95E4D9553d94 \
   -e PROXY_SERVER_URL=http://192.168.0.197:1337/v1/chat/completions  \
   -e EMBEDDING_MODEL=text2vec \
   -e LANGUAGE=zh \
   eosphorosai/dbgpt:latest

下面是一个简单的参数说明

参数说明
-p 5670:5670端口映射
-v /data/models/text2vec-large-chinese:/app/models/text2vec-large-chinese挂载 embedding 模型为 text2vec
-e LOCAL_DB_TYPE=sqlite设置数据库类型为 sqlite,另外还支持 mysql
-e LOCAL_DB_PATH=data/default_sqlite.db 设置 sqlite 数据库路径
-e LLM_MODEL=proxyllm通过设置模型为第三方模型服务 API, 可以是 openai, 也可以是 fastchat interface
-e PROXY_API_KEY=<你的key>如果是 GPT4Freekey 应该是随便填的,但还是建议用 sk- 这种格式。如果是 One API,直接用访问令牌
-e PROXY_SERVER_URL=<API 服务地址>第三方模型服务 APIOne API 端口是 3033GPT4Free 端口是 1337
-e EMBEDDING_MODEL=text2vec设置 embedding 模型为 text2vec
-e LANGUAGE=zh设置语言为 zh

如果你的网络 OK 的话,可以直接用 openai 的地址和 key

更多的环境变量参数,请参考官方的 .env.template 文件:https://github.com/eosphoros-ai/DB-GPT/blob/main/.env.template

LLM_MODEL 模型名称请参考:https://github.com/eosphoros-ai/DB-GPT/blob/main/dbgpt/configs/model_config.py

从上图我们可以看出来,proxyllm 等同于 chatgpt_proxyllm,所以是按 gpt-3.5-turbo 来请求的。这就是为什么前面要求给 kimi-free-api 增加模型名称的原因

顺便说一下,老苏尝试过 moonshot_proxyllm,但设置后总报 LLM_MODEL_PATH 错误,没有继续尝试。理论上,线上模型 LLM_MODEL_PATH 应该是和 MOONSHOT_MODEL_VERSION一样的

docker-compose 安装

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

version: '3'

services:
  dbgpt:
    image: eosphorosai/dbgpt:latest
    container_name: dbgpt
    restart: unless-stopped
    ports:
      - 5670:5670
    volumes:
      - ./data/models/text2vec-large-chinese:/app/models/text2vec-large-chinese
    environment:
      - LOCAL_DB_TYPE=sqlite
      - LOCAL_DB_PATH=data/default_sqlite.db
      - LLM_MODEL=proxyllm
      - PROXY_API_KEY=sk-bn6M52bOfdxYB3n2Ee717eA2C66b45318f1c95E4D9553d94
      #- PROXY_SERVER_URL=http://192.168.0.197:1337/v1/chat/completions
      - PROXY_SERVER_URL=http://192.168.0.197:3033/v1/chat/completions
      - EMBEDDING_MODEL=text2vec
      - LANGUAGE=zh

然后执行下面的命令

# 进入 dbgpt 目录
cd /volume1/docker/dbgpt

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:5670 就能看到主界面

如果界面是英文的,可以点左下角的地球图标进行切换

随便聊一下

如果有返回,说明 proxyllm 设置是正确的

现在只有一个模型

数据库

进入数据库( Database),显示了支持的类型

MySQL 创建一个数据库

选了 nextcloud 做测试

保存成功后

回到聊天界面

选择 Chat DB

不太会用,随便问了个问题: oc_accounts 表中有几个用户?

继续,对不对反正我是不懂的

选择 Chat Data,还是不会用

知识库

进入知识库( Knowledge),点 Create 创建

选择 Document 类型

拖拽知识库文档

选择 自动

会在后台自动处理

处理完成后,状态会从 Running 变成 Finished

提个老问题

如果是 GPT4Free,正确答案会被 'Too Many Requests' 的日志覆盖。而用 One API + kimi-free-api 可以规避这个问题

像智能体、工作流,之前其他应用中介绍过,基本上是大同小异的,可以去看看官方的中文文档:https://www.yuque.com/eosphoros

参考文档

GitHub - eosphoros-ai/DB-GPT: AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents
地址:https://github.com/eosphoros-ai/DB-GPT

概览
地址:https://www.yuque.com/eosphoros/dbgpt-docs/bex30nsv60ru0fmx

shibing624/text2vec: text2vec, text to vector. 文本向量表征工具,把文本转化为向量矩阵,实现了Word2Vec、RankBM25、Sentence-BERT、CoSENT等文本表征、文本相似度计算模型,开箱即用。
地址:https://github.com/shibing624/text2vec

docker ValueError: Path /app/models/text2vec-large-chinese not found · Issue #981 · eosphoros-ai/DB-GPT
地址:https://github.com/eosphoros-ai/DB-GPT/issues/981

[Bug] [text2vec-large-chinese LLM启动报错] safetensors_rust.SafetensorError: Error while deserializing header: HeaderTooLarge · Issue #932 · eosphoros-ai/DB-GPT
地址:https://github.com/eosphoros-ai/DB-GPT/issues/932

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

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

相关文章

项目总结报告(Word模板)

2 项目工作成果 2.1 交付给用户的产品 2.2 交付给研发中心的产品 2.2.1 代码部分 2.2.2 文档部分 2.3 需求完成情况与功能及性能符合性统计 2.3.1 需求完成情况统计 2.3.2 功能符合性分析 2.3.3 性能符合性分析 3 项目工作分析 3.1 项目计划与进度实施分析 3.1.1 开发进度 3.1.…

kube-promethesu新增k8s组件监控(etcd\kube-controller-manage\kube-scheduler)

我们的k8s集群是二进制部署,版本是1.20.4 同时选择的kube-prometheus版本是kube-prometheus-0.8.0 一、prometheus添加自定义监控与告警&#xff08;etcd&#xff09; 1、步骤及注意事项&#xff08;前提&#xff0c;部署参考部署篇&#xff09; 1.1 一般etcd集群会开启HTTP…

【设计模式】行为型设计模式之 状态模式,带你探究有限状态机FSM的三种实现方式

什么是有限状态机 Finite state Machine FSM 简称状态机&#xff1a;状态机由三部分组成&#xff0c;状态(State) 事件(Event) 和动作(Action)组成。 其中事件也被称为转移条件&#xff0c;事件触发状态的转移和动作的执行。不过动作不是必须的&#xff0c;也可能只存在状态转…

【机器人和人工智能——自主巡航赛项】进阶篇

文章目录 案例要求创建地图rviz仿真 保存地图坐标点定位识别训练主逻辑理解语音播报模块匹配二维码识别多点导航讲解视频其余篇章 案例要求 创建地图 ./1-gmapping.sh 把多个launch文件融合在sh文件里面 rviz仿真 rviz是rose集成的可视化界面&#xff0c;查看机器人的各项数…

html+CSS+js部分基础运用17

在图书列表中&#xff0c;为书名“零基础学JavaScript”和“HTML5CSS3精彩编程200例”添加颜色。&#xff08;请用class或style属性实现&#xff09;&#xff0c;效果如下图1所示&#xff1a; 图1 图书列表 Class和style的综合应用。&#xff08;1&#xff09;应用class的对象、…

CNN简介与实现

CNN简介与实现 导语整体结构卷积层卷积填充步幅三维卷积立体化批处理 实现 池化层特点实现 CNN实现可视化总结参考文献 导语 CNN全称卷积神经网络&#xff0c;可谓声名远扬&#xff0c;被用于生活中的各个领域&#xff0c;也是最好理解的神经网络结构之一。 整体结构 相较于…

Servlet-01

文章目录 Servlet创建Servlet探究Servlet的生命周期 HttpServletWebServlet注解详解 重定向与请求转发ServletContextServletContext中的接口 HttpServletRequestHttpServletResponse状态码解释Cookie Servlet Q&#xff1a;它能做什么呢&#xff1f; A&#xff1a;我们可以通…

使用汇编和proteus实现仿真数码管显示电路

proteus介绍&#xff1a; proteus是一个十分便捷的用于电路仿真的软件&#xff0c;可以用于实现电路的设计、仿真、调试等。并且可以在对应的代码编辑区域&#xff0c;使用代码实现电路功能的仿真。 汇编语言介绍&#xff1a; 百度百科介绍如下&#xff1a; 汇编语言是培养…

1-5 C语言操作符

C语言提供了非常丰富的操作符&#xff0c;使得C语言使用起来非常的方便 算数操作符&#xff1a; 加 减 乘 除 取模 【 - * / %】 注&#xff1a;除号的两端都是整数的时候执行的是整数的除法&#xff0c;如果…

Unity 编辑器扩展,获取目录下所有的预制件

先看演示效果 实现方案 1创建几个用于测试的cube 2&#xff0c;创建一个Editor脚本 3&#xff0c;编写脚本内容 附上源码 using UnityEditor; using UnityEngine;public class GetPrefeb : EditorWindow {private string folderPath "Assets/Resources"; // 指定预…

【Python】数据处理:文本文件操作

在Python中&#xff0c;处理文本文件是非常常见的任务。可以使用内置的open函数来打开、读取和写入文本文件。 打开文件 使用open函数打开文件。该函数有两个主要参数&#xff1a; open(file, moder, buffering-1, encodingNone, errorsNone, newlineNone, closefdTrue, ope…

ssm602社区医疗保健监控系统+vue【以测试】

前言&#xff1a;&#x1f469;‍&#x1f4bb; 计算机行业的同仁们&#xff0c;大家好&#xff01;作为专注于Java领域多年的开发者&#xff0c;我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源&#xff1a; &#x1f469;‍&#x1f4bb; SpringBoot…

【设计模式】行为型设计模式之 策略模式学习实践

介绍 策略模式&#xff08;Strategy&#xff09;&#xff0c;就是⼀个问题有多种解决⽅案&#xff0c;选择其中的⼀种使⽤&#xff0c;这种情况下我们 使⽤策略模式来实现灵活地选择&#xff0c;也能够⽅便地增加新的解决⽅案。⽐如做数学题&#xff0c;⼀个问题的 解法可能有…

Linux shell编程基础

Shell 是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。Shell 是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问 Linux 内核的服务。 Shell 脚本&#x…

GQA,MLA之外的另一种KV Cache压缩方式:动态内存压缩(DMC)

0x0. 前言 在openreview上看到最近NV的一个KV Cache压缩工作&#xff1a;https://openreview.net/pdf?idtDRYrAkOB7 &#xff0c;感觉思路还是有一些意思的&#xff0c;所以这里就分享一下。 简单来说就是paper提出通过一种特殊的方式continue train一下原始的大模型&#x…

打破 AIGC 算力困境,io.net 如何实现“GPU 互联网”?

AIGC 在全球快速发展的当下&#xff0c;诸多项目深陷 GPU 运力不足&#xff0c;速度放缓、任务宕机、项目崩溃等困境&#xff0c;作为瞄准 AI 理念和 DePIN 赛道的 Solana 生态项目新星 io.net 来说&#xff0c;如何集成项目控制与云计算服务成为抢占市场的重要发力方向。第 11…

将web项目打包成electron桌面端教程(一)vue3+vite+js

说明&#xff1a;后续项目需要web端和桌面端&#xff0c;为了提高开发效率&#xff0c;准备直接将web端的代码打包成桌面端&#xff0c;在此提前记录一下demo打包的过程&#xff0c;需要注意的是vue2或者vue3的打包方式各不同&#xff0c;如果你的项目不是vue3vitejs&#xff0…

Nagios的安装和使用

*实验* *nagios安装和使用* Nagios 是一个监视系统运行状态和网络信息的监视系统。Nagios 能监视所指定的本地或远程主机以及服务&#xff0c;同时提供异常通知功能等. Nagios 可运行在 Linux/Unix 平台之上&#xff0c;同时提供一个可选的基于浏览器的 WEB 界面以方便系统管…

go语言后端开发学习(二)——基于七牛云实现的资源上传模块

前言 在之前的文章中我介绍过我们基于gin框架怎么实现本地上传图片和文本这类的文件资源(具体文章可以参考gin框架学习笔记(二) ——相关数据与文件的响应)&#xff0c;但是在我们实际上的项目开发中一般却是不会使用本地上传资源的方式来上传的&#xff0c;因为文件的上传与读…

项目验收总体计划书(实际项目验收原件参考Word)

测试目标&#xff1a;确保项目的需求分析说明书中的所有功能需求都已实现&#xff0c;且能正常运行&#xff1b;确保项目的业务流程符合用户和产品设计要求&#xff1b;确保项目的界面美观、风格一致、易学习、易操作、易理解。 软件全套文档过去进主页。 一、 前言 &#xff0…