一、安装Docker安装Dify
1、安装docker,最好win11系统,不然会有很多错误,然后改下镜像源拉取速度会快点,还有镜像的存储位置防止C盘爆满。


2、下载dify源码,现在最新是1.13.3
https://github.com/langgenius/dify/tree/1.13.3
3、解压到指定文件夹
D:\IdeaProjects\dify-1.13.3
4、进入文件夹的docker目录,将 .env.example 重命名 .env
cd D:\IdeaProjects\dify-1.13.3\docker
.env.example -> .env
可以修改下知识库上传文件限制的大小,默认15M,可以改大点。

5、在当前源码的docker文件夹下调出cmd,然后执行命令
docker compose up -d
docker就会开始拉取需要的资源,等待完成即可

6、完成后执行命令查看容器运行情况
docker ps

7、访问dify,并设置管理员账号
http://localhost/install

8.sandbox镜像安装python依赖:
dify上面创建的chatFlow、workFlow都在这个镜像里,如果需要用到代码环境,也是需要在这里面安装。

这里面的"python-requirements.txt"是管理了sandbox的python环境依赖,在这个文件里加上就可以,它会告诉sandbox启动的时候需要安装那些依赖。
D:\IdeaProjects\dify-1.13.3\docker\volumes\sandbox\dependencies
在这个文件里上:
pymysql==1.1.1

9.允许访问mysql3306端口:
D:\IdeaProjects\dify-1.13.3\docker\ssrf_proxy
增加一行
acl Safe_ports port 3306 # mysql

10.配置dify可以访问外部网络
D:\IdeaProjects\dify-1.13.3\docker\docker-compose.yaml
在这个文件里搜索"sandbox",然后再下图位置增加一个"- default"就可以。

这里需要注意,有些人喜欢用tab键会有隐藏的字符,导致启动失败,这里用文本编辑器选择"视图"-"显示所有符号",避免出现隐藏字符,下面是错误示范。

下面是正确的

4、这几步配置完,就可以连接win上面的mysql和有python环境,然后重启下docker,进入到dify的docker目录下cmd,执行下面命令:
关闭
docker compose down
启动
docker compose up -d
观察容器启动情况
docker ps
都是ok的

二、配置模型并搭建知识库问答
1、配置模型,点击右上角头头像,选择设置进入新页面,然后选"模型供应商"配置自己的模型,建议直接在deepseek或者阿里百炼购买10元token,可以用很久,我使用deepseek做聊天模型,阿里百炼则是用来做文档的向量化embed和rerank。
向量模型和rerank还可以使用Xinference实现本地部署。


2、新建一个手机知识库。

文档内容如下:
荣耀 Magic7 基本参数
国内发布时间 2024年10月30日
电商报价 ¥4199
上市日期 2024年10月30日
产品型号 荣耀 Magic7
使用场景 三防手机>,拍照手机>,智能手机>,音乐手机>,4G手机>,快充手机>,5G手机>,3G手机>,新品手机>,热门手机>,自拍手机>
机身颜色 绒黑色,雪域白,月影灰,天际蓝,朝霞金 查看外观>
指纹识别 超声波屏幕指纹识别>
面部识别 支持
外形
长度 162.1mm
宽度 75.8mm
厚度 7.95mm
重量 199g
硬件
CPU型号 高通 骁龙 8 Elite更多高通 骁龙 8 Elite手机>,手机性能排行>
CPU核心数 八核>
GPU型号 高通 Adreno 830
RAM容量 12GB>游戏运行流畅
RAM存储类型 LPDDR5X>
ROM容量 256GB>5.2万张照片2.2万首歌曲
存储卡 不支持容量扩展>
出厂系统内核 Android 15
操作系统 MagicOS 9.0
振动马达 X轴线性马达
扬声器 立体声双扬声器
屏幕
屏幕尺寸 6.78英寸
屏幕类型 全面屏(中置挖孔屏),直面屏>
屏幕比例 19.93:9
分辨率 2800x1264px
屏幕材质 OLED>
屏幕刷新率 120Hz(1-120)>
像素密度 453ppi
屏占比 93.2%
HDR技术 支持
屏幕亮度 HDR峰值亮度:5000nits 全局峰值亮度:1600nits
屏幕盖板 巨犀玻璃
摄像头
摄像头总数 四摄像头(后三)>
摄像头名称 后置摄像头1:广角镜头
后置摄像头2:超广角摄像头
后置摄像头3:长焦摄像头
像素 后置摄像头1:5000万像素
后置摄像头2:3200万像素
后置摄像头3:5000万像素
前置摄像头1:5000万像素
光圈 后置摄像头1:f/1.9
后置摄像头2:f/2.0
后置摄像头3:f/2.4
前置摄像头1:f/2.0
传感器尺寸 1/1.3英寸
广角 后置摄像头2:122°
前置摄像头1:90°
防抖功能 OIS光学防抖
闪光灯 后置:单LED闪光灯>
变焦倍数 后置:最大50倍数字变焦
荣耀 Magic7网络与连接
网络类型 5G>,4G>,3G>
5G网络 移动5G(NR),联通5G(NR),电信5G(NR),广电5G(NR)更多5G手机>
SIM卡类型 双卡(Nano SIM卡)>
WLAN功能 双频WiFi,WiFi7(IEEE 802.11 a/b/g/n/ac/ax/be ),2x2 MIMO
定位导航 北斗(B1I+B1C+B2a三频),双频GPS(L1+L5),AGPS,Glonass,伽利略(E1 + E5a双频),蜂窝网络定位,WLAN网络定位
蓝牙 蓝牙5.4,支持BLE、SBC、AAC、LDAC、APTX、APTX HD
NFC 支持NFC>
红外功能 支持
机身接口 USB Type-C接口
其他网络参数 鸿雁通信
荣耀 Magic7电池与续航
电池类型 不可拆卸式电池
电池容量 5650mAh大电池
有线充电 100w
无线充电 支持>,80w
无线反向充电 支持
荣耀 Magic7功能与服务
三防功能 IP68和IP69等级
感应器 重力传感器,红外传感器,超声波指纹传感器,陀螺仪,指南针,环境光传感器,接近光传感器,加速度传感器,X轴线性马达,NFC
荣耀 Magic7手机附件
包装清单 手机(含内置电池) x1 快速指南 x1 HONOR SuperCharge充电器 x1 Type-C数据线 x1 取卡针 x1 手机保护壳 x1 新机权益卡(含电子三包凭证) x1 TP保护膜(出厂已粘贴) x1
荣耀 Magic7保修信息
保修政策 全国联保,享受三包服务
质保时间 1年
质保备注 主机1年,充电器1年
3、进去后选择"设置",修改下embed、rerank的topK,然后拉到最下面点保存。这里一开始进去默认的embed是阿里百炼多模态的,一直检索不出来,后面改为了test-embedding-v4就可以了,知道原因的可以评论区告诉我。

这里一开始进去默认的embed是阿里百炼多模态的

4、点击左边的文档,选择店家文件上传一份文档


分段和重叠按自己的来,然后保存处理,等待向量化结束。

5、向量化结束后,可以在"召回测试"里面试试

6、知识库建完之后,新建一个聊天助手


7、给聊天助手加上约束LLM的提示词和配置知识库,然后测试一下并发布

8、提给api对外服务,新建密钥

9、使用apifox测试对话,复制curl导入apifox,替换header里面的auth,然后补充workflow_id
curl --location --request POST 'http://localhost/v1/chat-messages' \
--header 'Authorization: Bearer app-917CYVynZrp00Muak4SKp7Cp' \
--header 'Content-Type: application/json' \
--data-raw '{
"inputs": {},
"query": "荣耀magic7的电池多大?",
"response_mode": "streaming",
"conversation_id": "",
"user": "abc-123",
"files": [],
"workflow_id":"8a186431-d7ab-4d2f-aa39-057c1c904868"
}'
浏览器地址里那一长串就是workflow_id

下面是流式响应结果
可以切换到自动合并看整个结果

9、嵌入到html中,点"发布"的下拉,里面有嵌入网站

这三种方式可以根据自己的需要选择

我使用右下角嵌入的方式,下面是html代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>手机助手</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1>手机助手</h1>
<p>点击右下角按钮即可开始咨询</p>
<!-- 你提供的聊天机器人代码 -->
<script>
window.difyChatbotConfig = {
token: 'ZMXM5sof4fEZbzom',
baseUrl: 'http://localhost',
inputs: {
// You can define the inputs from the Start node here
// key is the variable name
// e.g.
// name: "NAME"
},
systemVariables: {
// user_id: 'YOU CAN DEFINE USER ID HERE',
// conversation_id: 'YOU CAN DEFINE CONVERSATION ID HERE, IT MUST BE A VALID UUID',
},
userVariables: {
// avatar_url: 'YOU CAN DEFINE USER AVATAR URL HERE',
// name: 'YOU CAN DEFINE USER NAME HERE',
},
}
</script>
<script
src="http://localhost/embed.min.js"
id="ZMXM5sof4fEZbzom"
defer>
</script>
<style>
#dify-chatbot-bubble-button {
background-color: #1C64F2 !important;
}
#dify-chatbot-bubble-window {
width: 24rem !important;
height: 40rem !important;
}
</style>
</body>
</html>
web页面效果
