介绍
Dify 是一个用于构建 AI 应用程序的开源平台(大语言模型(LLM) 应用开发平台),支持多种大型语言模型,过提供强大的数据集管理功能、可视化的Prompt编排以及应用运营工具,大大降低了AI应用开发的复杂度。
补充:
LLM是一种基于深度学习技术的自然语言处理模型,也被称作大语言模型。它可以学习自然语言的语法和语义,从而生成可读的文本。这种模型只用于处理语言文字或符号体系,可以根据提示自动生成符合规律的内容。通常,LLM基于神经网络模型,使用大量的语料库进行训练,比如互联网上的大量文本数据。这些模型通常拥有数十亿到数万亿个参数,能够完成各种自然语言处理任务,如自然语言生成、文本分类、文本摘要、机器翻译和语音识别。
应用场景
- 聊天助手(Chat Assistant):
- 基于LLM的对话助手,能够与用户进行自然语言交互,理解用户的问题、请求或指令,并给出相应的回答或执行相应的操作。
- 文本生成(Text Generation):
- 专注于各种文本生成任务,如撰写故事、新闻报道、文案、诗歌等创意写作,以及文本分类、翻译等任务。
- Agent(智能代理):
- 这种助手不仅具备对话能力,还具备任务分解、推理、工具调用等高级能力。它能够理解复杂的指令,将任务分解为多个子任务,并调用相应的工具或API来完成这些子任务。
- 工作流程(Workflow):
- 根据用户定义的流程编排,灵活地组织和控制LLM的工作流程。用户可以自定义一系列的操作步骤和逻辑判断,让LLM按照预定的流程执行任务。
部署
安装docker
docker_compose无脑下一步。
安装Drocker后界面报错:
解决:
- 查看任务管理器,是否启用虚拟化
没有就重启计算机,按F1或者F2进入BIOS
找到:主菜单-->CPU-->【Inter Virtual Technology】开启
- 管理员身份运行
win+s搜索:cmd
# 以管理员身份运行:
bcdedit /set hypervisorlaunchtype auto
连接超时报错:
- 进入dify/docker目录,将.env.example修改为.env
- 更换国内镜像源
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
Docker Desktop WSL 依赖崩溃问题
- 立即重启 WSL 服务
wsl --shutdown # 强制关闭所有WSL实例
-
- 等待10秒后,重启 Docker Desktop。
- 验证 WSL 运行状态
bash
wsl -l -v # 查看已安装的WSL发行版状态
-
- 预期输出:
NAME STATE VERSION
docker-desktop-data Running 2
docker-desktop Running 2
启动dify
运行:docker compose up -d
Dify + RAG
- 创建知识库:Dify主导航栏中的知识库。
- 文本预处理:分割、结构化处理
- 索引模式
-
- 高质量索引:利用Embedding模型将文本转换为数值向量
补充:Embedding 模型 是将离散数据(如文本、图像)映射为低维连续向量的技术,旨在通过向量空间中的距离表示语义相似性。以下是其核心功能与应用:
1. 核心原理
● 向量化表示:例如将“自行车”映射为向量 [0.8, 0.9, 1.0],使计算机能通过数学运算分析语义关联。
● 语义相似性计算:通过余弦相似度等指标判断词语/句子的关联程度(如“人”与“骑手”向量接近)。
-
-
- 向量检索:将查询向量化,计算与知识库中文本向量的距离,识别最接近的文本块。
- 全文检索:基于关键字匹配进行搜索。
- 混合检索:结合向量搜索和全文搜索的优势。
-
-
- 经济模式:采用离线向量引擎和关键字索引,虽然准确率有所降低,但省去了额外的 token 消耗和相关成本。
- 问答模式:系统会进行文本分词,并通过摘要的方式,为每段生成QA问答对。
QA(Question Answering) 指问答系统
- 精准性:
- 多模态支持:支持文本、语音、图片等多种输入/输出形式(如微软小冰的图片问答功能)。
补充:
RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合了信息检索技术与语言生成模型的人工智能技术。该技术通过从外部知识库中检索相关信息,并将其作为提示(Prompt)输入给大型语言模型(LLMs),以增强模型处理知识密集型任务的能力,如问答、文本摘要、内容生成等。
- 检索:检索是RAG流程的第一步,从预先建立的知识库中检索与问题相关的信息。这一步的目的是为后续的生成过程提供有用的上下文信息和知识支撑。
- 增强:RAG中增强是将检索到的信息用作生成模型(即大语言模型)的上下文输入,以增强模型对特定问题的理解和回答能力。这一步的目的是将外部知识融入生成过程中,使生成的文本内容更加丰富、准确和符合用户需求。通过增强步骤,LLM模型能够充分利用外部知识库中的信息。
- 生成:生成是RAG流程的最后一步。这一步的目的是结合LLM生成符合用户需求的回答。生成器会利用检索到的信息作为上下文输入,并结合大语言模型来生成文本内容。
知识库功能
TopK: 用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整片段数量。默认值为 3,数值越高,预期被召回的文本分段数量越多。
Score 阈值: 用于设置文本片段筛选的相似度阈值,只召回超过设置分数的文本片段,默认值为 0.5。数值越高说明对于文本与问题要求的相似度越高,预期被召回的文本数量也越少。
导入已有文本
注意:
如果你的知识库中有部分文档长时间未更新或未检索时,为了确保知识库的高效运行,系统会暂时禁用这部分不活跃的文档。
- 对于 Sandbox/Free 版本用户,未使用知识库的将在 7 天后自动禁用;
- 对于 Professional/Team 版本用户,未使用知识库的将在 30 天后自动禁用。
维度 | 通用分段 | 父子分段(父块上下文) |
核心目标 | 快速分割简单文档,独立处理文本块 | 保留层级结构,支持上下文关联检索 |
父块作用 | 无父块概念 | 段落模式:提供局部章节上下文 |
分割粒度 | 固定段落/字数 | 基于文档结构(标题→段落→子句) |
存储开销 | 低(单层索引) | 高(树状存储+元数据) |
- 通用分段:处理非结构化短文本,追求效率,实现简单、响应快,上下文割裂、冗余率高。
- 父子分段(段落):需精准关联章节上下文,依赖标题检测精度。
- 父子分段(全文):需跨章节/全局语义分析,内存消耗大,响应延迟高。
同步自 Notion 内容
- 支持的内容类型
-
- 普通页面:包含文本、标题、列表等基础格式
- Database 页面:支持同步数据库中的文本属性,但表格数据会转换为纯文本格式展示
- 富文本内容:Markdown 格式的文本、超链接、代码块等
- 不支持的内容类型
-
- 图片/文件附件:Notion 中的图片、PDF 等文件无法直接同步
- 复杂格式:内嵌网页、视频、公式块等非文本内容会被忽略
1. 访问Your connected workspace for wiki, docs & projects | Notion
- 拷贝密钥
- 集成数据集
- 修改.env文件,改为internal,添加秘钥
- 重启容器
命令:docker-compose down
docker-compose up -d
- 同步数据源信息(有更新时需要重新同步,会有延迟)
部分工作目录不可同步:检查集成连接是否启动,将该目录页面绑定集成,再进行同步(软件会出现不显示该集成的情况,在web页面即可)
- 创建知识库
同步自 Web 站点
Jina Reader
登录 Jina Reader 官网 完成注册,获取 API Key 后并按照页面提示填入并保存。
- 复制网页地址
- 运行地址
Firecrawl
官网地址:Firecrawl
在知识库创建页选择 Sync from website,provider 选中 Firecrawl,填入需要抓取的目标 URL。
设置中的配置项包括:是否抓取子页面、抓取页面数量上限、页面抓取深度、排除页面、仅抓取页面、提取内容。完成配置后点击 Run,预览将要被抓取的目标页面链接。
Watercrawl
官网地址:WaterCrawl.dev
同步外部知识库API
- clone RAGFlow代码
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/docker
git checkout -f v0.16.0
- 拉取Docker映像
docker compose -f docker-compose.yml up -d
- 运行:docker logs -f ragflow-server
- 配置模型
- 创建APIkey
- dify创建外部知识库
- 配置外部知识库信息
知识库id
- 外部知识库名称,尽量保持一致
- 添加外部知识库api
- 把ragflow的接口填写进去,注意diyf的接口文档
<your-endpoint>/retrieval
这里只要到v1/dify即可。 - 填写apikey
报错1:端口冲突
运行docker compose -f docker-compose.yml up -d 报错:
问题核心在于 主机端口 80 已被占用,导致 ragflow-server
容器无法启动
Container ragflow-mysql Healthy
Container ragflow-server Starting
Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint ragflow-server (f0f589bdcc5e863190aa5aaf067d79ba16d5c2a01d1c0cd4e1af24fd74545216): Bind for 0.0.0.0:80 failed: port is already allocated
解决:在 docker-compose.yml
文件中调整 ragflow-server
服务的端口映射配置
services:
ragflow-server:
image: registry.cn-hangzhou.aliyuncs.com/infiniflow/ragflow:latest
ports:
- "8000:80" # 将主机端口80改为其他可用端口(如8000)
- "4433:443" # 若需HTTPS,同步修改443端口
报错2:queue_info rag_flow_svr_queue不存在错误
- 查看docker中运行的服务:docker ps
- 通过ID进入redis容器: docker exec -it 70bd6ab70f54 bash
- 检查是否存在
rag_flow_svr_queue
键,infini_rag_flow
为.env文件里的redis密码:redis-cli -h redis -p 6379 -a infini_rag_flow EXISTS rag_flow_svr_queue
- 如果键不存在,需要初始化队列
重启:docker compose -f docker-compose.yml up -d
集成语雀
- 本地导入
- API集成
-
- 登录语雀,进入「个人设置」→「开发者」。
-
- 创建应用,获取
CLIENT_ID
和CLIENT_SECRET
。 - 获取API访问令牌(Token),用于身份验证。
- 创建应用,获取
-
- 语雀API文档:开发者文档 · 语雀
(API集成未测试)
RAGflow知识库:
文件上传:
支持批量上传
数据处理能力对比
- 支持格式
-
- Dify:常见格式(TXT/Markdown/DOCX/PDF/HTML)
- RAGFlow:扩展至 Excel、PPT、图像、扫描件、音频,支持表格/图像提取
- 分块策略
-
- Dify:自动分块 + 自定义规则(如
max_length=500
) - RAGFlow:基于模板的智能分块(如法律文档按条款分块、论文按章节分块)
- Dify:自动分块 + 自定义规则(如
- 数据清洗
-
- Dify:基础文本清洗与向量化
- RAGFlow:支持文档布局分析(如保留表格结构、识别图像中的文字)
块模板:
Template | Description | File format |
General | Files are consecutively chunked based on a preset chunk token number. | DOCX, XLSX, XLS (Excel97~2003), PPT, PDF, TXT, JPEG, JPG, PNG, TIF, GIF, CSV, JSON, EML, HTML |
Q&A | XLSX, XLS (Excel97~2003), CSV/TXT | |
Resume | Enterprise edition only. You can also try it out on demo.ragflow.io. | DOCX, PDF, TXT |
Manual | | |
Table | XLSX, XLS (Excel97~2003), CSV/TXT | |
Paper | | |
Book | DOCX, PDF, TXT | |
Laws | DOCX, PDF, TXT | |
Presentation | PDF, PPTX | |
Picture | JPEG, JPG, PNG, TIF, GIF | |
One | Each document is chunked in its entirety (as one). | DOCX, XLSX, XLS (Excel97~2003), PDF, TXT |
Tag | The knowledge base functions as a tag set for the others. | XLSX, CSV/TXT |