保姆级教程搭建企业级智能体+私有知识库,Dify+ollama,Linux版

news2025/4/22 0:42:31

介绍

目前,AI Agent智能体已经被许多公司广泛应用,同时智能体借助私有知识库的加成,使原来知识面并不特别充分的大模型更聪明。如今特别是在医疗,医药,政企等数据保密程度高的行业,部署自己的私有知识库更是不可或缺的。下面,就一起来动手搭建属于你的企业级别的私有知识库AI Agent。

特别说明

1:本教程区别于其他教程全篇复制相关服务的官方教程,导致中途有卡点
2:本教程在搭建过程中会解决卡点问题并给出解决方案
3:按照本教程一步步搭建,可以百分百保证运行起来
4:本教程是纯实践,不做无脑搬运。

方案说明

1:利用Dify构建模型中间层
2:配置三方LLM模型
3:私有知识库使用ollama服务加nomic-embed-text模型,进行知识库文档的向量数据转化

疑问:
问:既然都自己搭建ollama了,为什么不自己搭建LLM模型,还要使用三方的api呢?其他教程都是自己搭建LLM
答:
①:硬件成本高
②:你所能找到的开源模型,除了deepseek,其他的模型使用起来跟个大傻子差不多
③:就算你要搭建deepseek模型,除了满血版的,其实也是个大傻子
④:企业级应用,起码上百人使用,就得要求token吞吐量不能太低,并发访问也不能太低,这些自己搭建部署,需要解决一大堆问题
⑤:现在三方token已经很便宜了
⑥:其他教程是教你搭建LLM了,我其他教程也有呀,deepseek-32b的,使用过就知道了,跟个大傻子差不多。其他教程教的,都是什么1.5b,7b,32b,70b,这些用于学习还行,不适合进行企业级应用或者商用
⑥:你要是非要自己折腾部署LLM,就当我上面没说哈,可以参考我另一篇教程助你折腾 ====手把手教你部署DeepSeek-32b

环境物料准备

要求说明
ubuntu 系统服务器(服务器A)有公网IP,4核8G配置
ubuntu 系统服务器,有GPU显卡,且已装好cuda环境(服务器B)(具体可参考我另一篇介绍Linux下安装conda的详细教程)
Dify的源码github地址
ollama官网地址

注:如果手上有带显卡的服务器,也可以直接在一台服务器上安装,由于我这里业务层和算力层是分开的服务器,这里用2台作为演示

教程开始

一:搭建部署Dify应用

1:链接自己的服务器A,进入服务器,切换到root(如果是非root用户的话)
在这里插入图片描述
2:更新apt包

	apt update

3:清理有可能安装的旧版本docker以及相关的包

	sudo apt-get autoremove docker docker-ce docker-engine docker.io containerd runc

4:添加docker官方GPG密钥

	curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

5:添加Docker软件源

	sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

6:安装docker,docker-compose

	apt install docker.io docker-compose

7:启动docker

	systemctl start docker 

8:安装git,并克隆Dify项目

	apt install git
	git clone https://github.com/langgenius/dify.git

中途可能会遇到克隆错误的2个问题,
①:提示克隆的过大,可以修改git的整体buffer配置
②:提示网络环境不支持 HTTP/2,可以修改为http1.1

	git config --global http.postBuffer 524288000
	git config --global http.version HTTP/1.1

9:克隆完毕,进入dify文件夹下的docker文件夹下,并把全局配置文件复制一下

	cd  dify/docker
	cp .env.example .env

10:开始构建docker容器,这时需要看下你安装的docker-compose是什么版本的,运行如下命令查看

	docker-compose version

在这里插入图片描述
如果是1.xx版本的,需要运行

	docker-compose up -d

如果是2.xx版本的,需要运行

	docker compose up -d

注:这里我们是以apt直接进行安装的,理论上是1.xx版本的,如果你安装的是最新的docker,估计就是2.xx的版本了

11:由于我们是1.xx的版本,所以直接运行

	docker-compose up -d

此时遇到了如下错误
在这里插入图片描述
此错误,可以进行修改docker的镜像地址进行解决,方案如下:

	①: vim /etc/docker/daemon.json
	 填入以下json内容:
	 {
		"registry-mirrors": ["https://docker.registry.cyou",
		"https://docker-cf.registry.cyou",
		"https://dockercf.jsdelivr.fyi",
		"https://docker.jsdelivr.fyi",
		"https://dockertest.jsdelivr.fyi",
		"https://mirror.aliyuncs.com",
		"https://dockerproxy.com",
		"https://mirror.baidubce.com",
		"https://docker.m.daocloud.io",
		"https://docker.nju.edu.cn",
		"https://docker.mirrors.sjtug.sjtu.edu.cn",
		"https://docker.mirrors.ustc.edu.cn",
		"https://mirror.iscas.ac.cn",
		"https://docker.rainbond.cc"]
	}
	
	②:然后重启docker服务:
	systemctl daemon-reload
	systemctl restart docker
	
	③:重新运行 docker-compose up -d 进行构建容器

12:随后,docker会自动根据编译文件.yaml自动拉取相关服务,成功后的画面如下所示,启动了10个服务:
在这里插入图片描述
或者通过命令查看每个服务的运行状态,由下图所示,有个nginx服务,并从容器中透了80端口,所以,可以直接通过访问你的ip地址进行访问链接

	docker-compose ps

在这里插入图片描述

二:搭建ollama服务

1:租用GPU型服务器,我这里还是以AutoDL为例(这个平台便宜,且还有点余额,省事儿了。这里有现成的N卡环境,可以免去不会安装cuda环境的烦恼,如果有其他平台的GPU租用也是一样的)
这里我租用的是西北企业区,尽量不要北京地区的,北京地区的外网访问需要挂ssh,比较麻烦
镜像这里选择如下图所示
在这里插入图片描述
2:进入到新开的GPU服务器里,运行初始化

	apt update
	conda init

然后关闭当前窗口,重新进入或者单开一个窗口,进入到服务器里,此时进入到conda 环境里的默认 base 环境,下面为ollama单独新建一个conda 环境,用来运行环境隔离,比较干净

	conda create -n ollama  python=3.10

等待安装完毕,并进入ollama环境,如图所示
在这里插入图片描述
3:下载并安装ollama Linux版本下载地址
在这里插入图片描述
复制命令在你的GPU服务器里进行下载安装,等待一会儿,进度条走完就完事儿了,默认安装在/usr/local下,所以可以使用全局命令 ollama进行相关操作
在这里插入图片描述
如果出现下图所示,说明没有自动检测到GPU卡,可以通过安装两个插件解决
在这里插入图片描述

	sudo apt install pciutils
	sudo apt install lshw

4:启动ollama服务(这里我以简单方式启动,也可以直接加入到系统服务里并配置自动重启)

	nohup ollama serve & 

在这里插入图片描述
5:运行并下载embedding模型,如下图所示

	ollama pull nomic-embed-text

在这里插入图片描述
也可通过命令查看ollama的模型列表

	ollama list

在这里插入图片描述
6:到此,ollama服务,embedding模型算是已经搭建部署完毕,但是为了让dify能访问到,还需要做一些其他配置。
由于AutoDL对外只支持6006端口开放,ollama的api接口呢又是绑定在了 11434端口,所以,在这里就要做一层访问转发。
这里访问转发以nginx web服务为例

①:安装nginx

		apt install nginx

②:编辑nginx默认配置文件

		vim /etc/nginx/sites-available/default	

server块修改成如下内容:

server {
		        listen 6006 default_server;
		        listen [::]:6006 default_server;
		
		        root /var/www/html;
		        index index.html index.htm index.nginx-debian.html;
        		server_name _;
		        location / {
		                proxy_pass http://127.0.0.1:11434;
		                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 X-Forwarded-Proto $scheme;
		                proxy_http_version 1.1;
		                proxy_set_header Upgrade $http_upgrade;
		                proxy_set_header Connection "upgrade";
		                proxy_read_timeout 86440s;
		                proxy_send_timeout 86440s;
		        }
        }

然后校验配置文件并加载nginx 的配置进行重启

		nginx -t
		nginx -s reload

7:由上可知,由于ollama是运行在本地 127.0.0.1:11434上,默认只允许本地访问,所以,还要设置ollama 允许远程访问,不然,我们的Dify 服务是链接不上。可以设置允许全部,也可以定向设置只允许某个域名或IP

		vim ~/.bashrc 

在文件末尾添加下面两行

		export OLLAMA_HOST=0.0.0.0
		export OLLAMA_ORIGINS=*

重新加载 ~/.bashrc

		source ~/.bashrc 

然后再重启ollama服务
此时访问AutoDL的对外地址,可以看到ollama运行的标志。AutoDL的外网访问URL在这里看:
在这里插入图片描述
在这里插入图片描述
此时访问这个URL,可以看到 ollama is running 字样,这时候整个配置算是没问题了
在这里插入图片描述

8:到此,ollama服务,embedding模型,所有的服务配置已经完事儿

三:利用Dify创建你的第一个智能体

1:访问Dify服务并注册账号

1:地址:你的IP地址
首次进入会让你注册账号
在这里插入图片描述
2:注册完毕后,登录进入主页面,点击右上角的插件,进入插件页面,首先安装所需的模型插件
在这里插入图片描述

2. 下载模型插件(这里以Ollama和DeepSeek为例)

1:进入插件广场,找到【模型】选项,下面列出的都是支持的模型厂商。此次我们需要安装ollama,LLM用DeepSeeK,点击模型,进行安装。如果在线模式安装不上,也可以在模型详情页里下载下来,再点击右上角【插件】进行从本地安装包安装。
在这里插入图片描述
在这里插入图片描述

3. 配置模型

1:点击个人中心选项,找到【设置】,再点击【模型供应商】
在这里插入图片描述
在这里插入图片描述

1. 配置Ollama模型

由于我们是用ollama的embedding模型功能,所以配置时选择Text-Embedding选项。这里会让填写基础URL地址,由于我们是从AutoDL部署的embedding模型,所以需要再AutoDL上找到相关访问URL地址填写到配置里。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
随后点击保存,如果保存时有报错,说明你的ollama访问地址还是不通,可以再查看上面有关ollama配置的教程重来一遍

2. 配置DeepSeek模型

首先你需要登录 DeepSeeK开放平台,并注册账号创建应用key,然后复制出key值
在这里插入图片描述
进入dify模型配置里,配置deepseek的模型
在这里插入图片描述

4. 创建智能体

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例如:
在这里插入图片描述

OK,到这里一个基本的智能体就完成了,你可以点击右上角的进行发布,也可以进行嵌入你的应用里,嵌入方式如下:
在这里插入图片描述

5. 创建私有知识库

在这里插入图片描述
这里有三种方式,这里以简单的文档类为例,其余的两个需要各自注册相关平台的账号进行关联
在这里插入图片描述
然后,进入数据分块与清洗界面,这里我们是以embedding模型为基础,使用混合检索模式
在这里插入图片描述
保存处理后,进入下一步,开始数据的嵌入操作,这里进程走完后就可以使用了
在这里插入图片描述
进程走完后,也可以单独点击你的知识库,查看内容分块后的结果,或者进行召回测试,数据标注,添加新的分块等操作
在这里插入图片描述

在你创建的个人助手agent里的编排页面,点击知识库,进行关联操作,就可以关联你的知识库内容了
在这里插入图片描述
至此,整个所有的流程彻底走完了。

结语

纯手动一步步搭建操作,按照流程来,极小几率会出错,如果有出错或者不明白的地方,欢迎提问,共同学习。

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

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

相关文章

记一次线上程序宕机问题分析【写 GC 日志导致进程挂起】

1. 背景 运维侧持续反馈了几次线上业务程序 A 出现宕机告警的信息,重启后一段时间后又出现宕机,这里针对最后一次告警进行深入排查和分析。 首先这一次故障出现在 2024-03-14 04:18:23,和以往的宕机故障略有不同,以往的现象是切…

【leetcode hot 100 739】每日温度

解法一&#xff1a;暴力解法 class Solution {public int[] dailyTemperatures(int[] temperatures) {int ntemperatures.length; // 指向要找下一个更高温度的地方int[] result new int[n];for(int left0;left<n;left){int rightleft1; // 指向正在找最高温度的地方wh…

Cookie、Session 与 Token:核心区别与应用场景解析

目录 引言 基础概念解析&#xff1a;三大身份验证技术详解 Cookie&#xff1a;浏览器中的"身份证" Session&#xff1a;服务器记忆的"对话" Token&#xff1a;加密的"通行证" 三种技术的深度对比分析 存储位置与数据流向 安全性全面对比…

状态空间模型解析 (State-Space Model, SS)

一、文章摘要 状态空间模型&#xff08;State-Space Model, SS&#xff09;是一种广泛应用于控制系统、信号处理和系统建模的数学表示方式。MATLAB 提供的 ss 类用于描述线性时不变&#xff08;LTI&#xff09;系统的状态空间表示。本类实现了 LTI 系统的构造、属性设置、变换…

zabbix添加IIS网站计数器(并发连接数)

0. Zabbix Agent 配置 PerfCounter = iis_Current_Connections,"\Web Service(_Total)\Current Connections",30 1.在被监控主机,powershell输入perfmon.msc 2.点击添加按钮 3.在下拉菜单中点击小箭头

AI小白的第七天:必要的数学知识(概率)

概率 Probability 1. 概率的定义 概率是一个介于 0 和 1 之间的数&#xff0c;表示某个事件发生的可能性&#xff1a; 0&#xff1a;事件不可能发生。1&#xff1a;事件必然发生。0 到 1 之间&#xff1a;事件发生的可能性大小。 例如&#xff0c;掷一枚公平的硬币&#xf…

[Windows] 图吧工具箱

[Windows] 图吧工具箱 链接&#xff1a;https://pan.xunlei.com/s/VOMCXYDix3pvwdkU7w7bfVsDA1?pwdk8v5# DIY爱好者的必备工具

【AIGC】图片变视频 - SD ComfyUI视频生成

效果图 完整过程 SD ComfyUI 下载 下载 https://pan.quark.cn/s/64b808baa960 解压密码&#xff1a;bilibili-秋葉aaaki 完整 https://www.bilibili.com/video/BV1Ew411776J/ SD ComfyUI 安装 1.解压 2.将controlnet内部文件复制到 ComfyUI-aki-v1.6\ComfyUI\models\control…

JVM详解(包括JVM内存模型与GC垃圾回收)

&#x1f4d6;前言&#xff1a; 学会使用Java对于一个程序员是远远不够的。Java语法的掌握只是一部分&#xff0c;另一部分就是需要掌握Java内部的工作原理&#xff0c;从编译到运行&#xff0c;到底是谁在帮我们完成工作的&#xff1f; 接下来着重对Java虚拟机&#xff0c;也就…

cocos creator 笔记-路边花草

版本&#xff1a;3.8.5 实现目标&#xff1a;给3d道路生成路边景观花草 在场景下创建一个节点&#xff0c;我这里种植两种花草模型&#xff0c;兰花和菊花&#xff0c;所以分别在节点下另创建两个节点&#xff0c;为了静态合批。 1.将花草模型分别拖入场景中&#xff0c;制作…

Langchain中的表格解析:RAG 和表格的爱恨情仇

实现 RAG(Retrieval-Augmented Generation)是一个挑战,尤其是在有效解析和理解非结构化文档中的表格时。这在处理扫描文档或图像格式的文档时尤为困难。这些挑战至少包括以下三个方面: 1.表格的“叛逆期”:不准确的解析可能会破坏表格结构: 表格在文档里就像个叛逆的青少…

CAT1模块 EC800M HTTP 使用后续记录

记录一下 CAT1 模块EC800 HTTP 使用后续遇到的问题 by 矜辰所致目录 前言一、一些功能的完善1.1 新的交互指令添加1.2 连不上网络处理 二、问题出现三、分析及解决3.1 定位问题3.2 问题分析与解决3.2.1 查看变量在内存中的位置 3.3 数据类型说明3.3.1 常用格式化输出符号…

Python 标准库与数据结构

Python的标准库提供了丰富的内置数据结构和函数&#xff0c;使用这些工具能为我们提供一套强有力的工具。 需要注意的是&#xff0c;相比C与Java&#xff0c;Python的一些特点&#xff1a; Python不需要显式声明变量类型Python没有模板(Template)的概念&#xff0c;因为Pytho…

大疆上云api介绍

概述 目前对于 DJI 无人机接入第三方云平台,主要是基于 MSDK 开发定制 App,然后自己定义私有上云通信协议连接到云平台中。这样对于核心业务是开发云平台,无人机只是其中一个接入硬件设备的开发者来说,重新基于 MSDK 开发 App 工作量大、成本高,同时还需要花很多精力在无人…

2025-03-25 Unity 网络基础4——TCP同步通信

文章目录 1 Socket1.1 Socket 类型1.2 构造 Socket1.3 常用属性1.4 常用方法 2 TCP 通信2.1 服务端配置2.2 客户端配置2.3 进行通信2.4 多设备通信 3 区分消息 1 Socket ​ Socket 是 C# 提供的网络通信类&#xff08;其它语言也有对应的 Socket 类&#xff09;&#xff0c;是…

C++进阶(一)

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 前言 本篇博客是讲解函数的重载以及引用的知识点的。 文章目录 前言 1.函数重载 1.1何为函数重载 1.2函数重载的作用 1.3函数重载的实现 2.引用 2.1何为引用 2.2定义引用 2.3引用特性 2.4常引用 2…

深度解读DeepSeek:开源周(Open Source Week)技术解读

深度解读DeepSeek&#xff1a;开源周&#xff08;Open Source Week&#xff09;技术解读 深度解读DeepSeek&#xff1a;源码解读 DeepSeek-V3 深度解读DeepSeek&#xff1a;技术原理 深度解读DeepSeek&#xff1a;发展历程 文章目录 一、开源内容概览Day1&#xff1a;FlashMLAD…

AI Agent开发与应用

AI Agent开发与应用&#xff1a;本地化智能体实践——本地化智能体开发进展与主流框架分析 我要说的都在ppt里面了&#xff0c;相关复现工作请参考ai agent开发实例 OpenManus Dify Owl 第二个版本更新了对话的框架&#xff0c;通过gradio做了一个全新的界面 只测试了阿里云…

石斛基因组-文献精读122

A chromosome-level Dendrobium moniliforme genome assembly reveals the regulatory mechanisms of flavonoid and carotenoid biosynthesis pathways 《染色体水平的石斛基因组组装揭示了黄酮类和胡萝卜素生物合成途径的调控机制》 摘要 石斛&#xff08;Dendrobium monil…

javaSE.多维数组

1 final 引用类型 final int[] arr 继承Object 的引用类型&#xff0c;不能改变引用的对象 存的其实是引用 数组类型数组&#xff0c;其实存的是引用 int [][] arr new int[][] { {1,2,3}, {4,5,6} };int [] a arr[0]; int [] b arr[1];