公司动态
Dify 知识库 RAG 完全指南:从配置到飞书集成实战
文章目录dify知识库RAG一、什么是知识库二、知识库的核心作用三、什么是RAG1. Embedding模型2. Reranker模型3. 生成四、dify知识库基本配置1. 配置嵌入模型和rerank模型2. 创建知识库1、分段模块1. 普通分块标准分块-默认2. 父子策略/层级分块索引方式1. 高质量默认2. 经济消耗token少3、模型选择4、检索设置1. 向量检索比全文检索更精准2. 全文检索3. 混合检索默认推荐五、工作流里添加知识库问答机器人六、集成到三方平台1、dify接入第三方平台飞书2、基于docker部署LangBot3、配置飞书机器人4、在飞书中使用Langbotdify知识库RAG一、什么是知识库在大模型领域知识库是指用于存储、组织和检索结构化或非结构化知识的系统通常作为外部数据源与大模型如GPT、DeepSeek等结合以增强模型对专业领域或实时信息的理解能力二、知识库的核心作用补充模型固有知识大模型的训练数据存在截止日期如GPT-4训练数据截至2023年知识库可提供新知识如2025年新闻或企业内部业务数据或者行业专精知识如医疗、法律。减少幻觉通过检索真实数据生成答案避免模型编造信息。动态更新无需重新训练模型直接更新知识库即可同步最新信息。三、什么是RAG检索增强生成Retrieval-Augmented Generation, RAG是一种结合大型语言模型LLM与外部知识库的技术。目的是为了解决LLM的“幻觉”问题、知识更新滞后及私域数据利用难题。其核心流程分为三阶段检索→重排序→生成其中Embedding嵌入模型与Reranker重排序模型是两大关键技术。啰嗦版上传文档 - 对文档进行分块 - 通过嵌入模型把每段数据向量化 - 保存到语义空间向量数据库- 用户提问 - 把问题向量化去向量数据库查找有没有跟语义相似的数据 - 向量数据库匹配到多条数据 - 进行重排序评分把关联最高的放到最上面 - 把重排序后的数据交给大模型 - 大模型根据检索出的数据和评分给出答案 - 返回给用户1. Embedding模型Embedding模型将文本映射为向量用于衡量语义相似性。其核心价值在于语义理解捕捉文本深层语义关系支持跨语言、跨粒度检索。2. Reranker模型对于检索出来的数据进行重排序Reranker是知识库的智能质检员假设你在图书馆找书先用关键词检索到100本书但需要找出最相关的3本才行。图书管理员Reranker会综合评估书籍内容、出版时间、作者权威性等维度进行二次筛选。将检索到的候选文档如100条按照与问题的相关度重新排序把最匹配的结果提升到Top位置。3. 生成将检索出的数据作为上下文传递给LLM大模型由大模型结合用户的问题和上下文知识给出对应的回复四、dify知识库基本配置1. 配置嵌入模型和rerank模型建议使用硅基流动的免费模型如果之前配过硅基流动直接打开对应模型开关即可怎么配置呢还是点击右上角的头像图标-点击设置-模型供应商-点击硅基流动一般好像是默认开启的我自己的是勾上了2. 创建知识库点击知识库-创建知识库有三种选择第一个是通过文本创建第二个国内一般不用第三个是通过爬虫创建比较麻烦先用第一个吧选择文件-然后点击下一步知识库分为三块分段设置索引方式、模型选择、检索设置现在我们来依次介绍1、分段模块1. 普通分块标准分块-默认实现方式通过固定长度的文本块分割如每段 500 字结合 Embedding 模型将文本转换为向量。优点灵活性高适用于通用文档处理支持多源数据PDF、Word、网页等检索效率平衡混合检索结合向量与关键字匹配召回率提升 30%缺点上下文割裂固定长度分块可能导致语义不连贯资源消耗较大高质量模式依赖 Embedding 模型需较高算力。适用场景通用知识库构建如企业文档管理需要快速响应混合检索的问答系统。页面字段简介分段标识符分隔符是用于分隔文本的字符。\n\n 和 \n 是常用于分隔段落和行的分隔符。用逗号连接分隔符\n\n,\n当段落超过最大块长度时会按行进行分割。你也可以使用自定义的特殊分隔符例如 ***。分段最大长度默认1024可灵活调整分段重叠长度设置分段之间的重叠长度可以保留分段之间的语义关系提升召回效果。建议设置为最大分段长度的 10%-25%使用QA分段这个比较适合客服的那种场景比如文档内容就是问答这种格式点击预览快可以实现预览不合适可以自动手动调节参数2. 父子策略/层级分块实现方式通过人工干预或规则定义分块层级例如将文档按章节划分父块再对每章内容进行子块分割。允许用户手动调整分块大小和清洗规则。对文档的要求性比较高一般比较少用优点1、语义连贯性层级结构保留上下文关系2、灵活可控适用于结构化文档如技术手册、合同。缺点开发成本高需人工标注或规则设计适用场景法律合同解析按条款分层学术论文检索按摘要、正文、参考文献分级。 - 索引方式索引方式索引方式1. 高质量默认2. 经济消耗token少3、模型选择4、检索设置分为向量检索全文检索和混合检索1. 向量检索比全文检索更精准通过生成查询嵌入并查询与其向量表示最相似的文本分段Top K用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整分段数量。说人话就是它筛选以后你这边要选前几个一般选择3个就差不多了Score 阈值用于设置文本片段筛选的相似度阈值。重排序之后它会对每个进行打分设置这个就表示低于xx就不予采用。默认0.5支持自己配置打开那个开关就可以选了2. 全文检索检索文档中的关键字然后再进行排序3. 混合检索默认推荐把前面2种融合起来同时执行向量检索和全文检索从中找到最匹配的点击保存并处理会把文档向量化存到向量数据库就是这儿存到postgres五、工作流里添加知识库问答机器人1、新建一个chatflow工作流-新建一个节点选择只是搜索-添加之前创建的知识库-保存-点击发布大概长这样里面还有一些召回设置召回把数据从向量数据库里找到。召回设置就是查询设置比如说召回了5条数据实际就是查询了5条数据里面还可以做一些相识度阈值的设置还有就是展示前几的设置2、配置LLM大模型把知识检索返回的结果作为上下文添加到这儿然后底下的提示词复制这个# 角色你是一个需求分析专家可以基于现有需求知识回答用户提出的关于软件需求的问题。## 技能### 技能1使用以下content/content中的内容作为你学习的需求知识content上下文/content结合知识内容精准回答用户的提问不要回复超出用户问题外的答案### 技能2对于知识库不存在的问题请回答“抱歉我无法回答此类问题”不要虚构事实测试效果-ok的话就点击发布我们在建这个之前也可以做一个召回测试验证下匹配度右边可以看到匹配度得分六、集成到三方平台1、dify接入第三方平台飞书借助LangBot即可在短时间内将Dify接入到QQ、微信、飞书、钉钉、Telegram、Discord等平台提供服务。官方文档https://docs.dify.ai/zh-hans/learn-more/use-cases/connect-dify-to-various-im-platforms-by-using-langbot2、基于docker部署LangBot下载LangBot源代码https://github.com/RockChinQ/LangBot因为网络原因镜像文件未必能下载成功。我去gitee找了一个下的。下载到本地后先对压缩包进行解压里面包含了 langbot.tar 文件在cmd下进入解压后的文件夹执行命令启动LangBot在LangBot目录下进入docker子目录执行命令dockercompose up-d拉不下来就直接用这个吧dockerpull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/rockchin/langbot:latest# 拉完重命名匹配composedockertag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/rockchin/langbot:latest rockchin/langbot:latest如果你是用macarm64跟我一样报错解决方案如下1、 vim 编辑 yaml把langbot_plugin_runtime全部注释每行开头加## langbot_plugin_runtime:# platform: linux/amd64# image: rockchin/langbot:latest# container_name: langbot_plugin_runtime# volumes:# - ./data/plugins:/app/data/plugins# ports:# - 5401:5401# restart: on-failure# environment:# - TZAsia/Shanghai# command: [uv, run, --no-sync, -m, langbot_plugin.cli.__init__, rt]# networks:# - langbot_network2、打开 yaml 确认2个服务全部都加 platform: linux/amd64缩进和 image 严格同级# 1. 主程序容器langbot: platform: linux/amd64 image: rockchin/langbot:latest# 2. box沙箱容器langbot_box: platform: linux/amd64 image: rockchin/langbot:latest3、保存文件执行重建命令docker-composedown --remove-orphansdocker-composeup-d大功告成3、配置飞书机器人1、登录飞书开放平台https://open.feishu.cn/app2、创建企业自建应用3、给应用添加能力点击创建好的应用-添加应用能力4、添加权限5、找到刚刚创建应用的app_idapp_secretencrypt_key6、修改 Langbot 配置文件打开 Users/xx/LangBot/docker/data/config/platform.json找到以下配置项按照上面的相关信息进行相关配置修改{adapter:lark,enable:true,app_id:cli_a88cabdac13cd00e,app_secret:8klhCLPG1pQnvIB1q1tyDdDQQuCI4bVeq,bot_name:LangBot,enable-webhook:false,port:2285,encrypt-key:ui78uuiiwoF7DG0rCG9ptis1h0iNV3}7、重启longbot容器dockercompose restart8、配置事件和回调添加事件9、创建版本发布机器人10、langbot接入dify在首次运行 LangBot 后会在 LangBot 目录生成 data 文件夹打开其中的 config/provider.json 文件设置其中的 runner 为 dify-service-api。runner:dify-service-api,相应的配置 dify-service-apirunner:dify-service-api,dify-service-api:{base-url:http://host.docker.internal/v1,app-type:chat,options:{convert-thinking-tips:plain},chat:{api-key:app-Y2gkb5oF430mQIAmNiLjAv7u,timeout:120},agent:{api-key:app-1234567890,timeout:120},workflow:{api-key:app-1234567890,output-key:summary,timeout:120}}base-urlDify Service API 的地址默认是https://api.dify.ai/v1这是 Dify 官方云服务的地址如果你使用的是自己部署的版本请设置为你的自部署地址上面那个。本地因为是容器部署没办法用localhost所以改成上面的http://host.docker.internal/v1配置urlapp-type使用的 Dify 应用类型。支持 chat - 聊天助手含 Chatflow、agent - Agent、workflow - 工作流请填写下方对应的应用类型 API 参数options特殊的选项配置。convert-thinking-tipsdify 使用 deepseek-r1 等有思维链的模型时会携带思考过程回复此选项控制输出时的处理方式值为 original 时不转换思考提示值为 plain 时将思考提示转换为类似 DeepSeek 官方的… 格式值为 remove 时删除思考提示chatDify 聊天助手或 chatflow应用的配置api-keyDify 聊天助手应用的 API 密钥获取方式见截图timeoutDify 聊天助手应用的请求超时时间以秒为单位默认是 120 秒。agentDify Agent 应用的配置api-keyDify Agent 应用的 API 密钥测试过程中遇到问题可以先看LangBot 实时日志cd/Users/kola/LangBot/dockerdocker-composelogs-flangbot4、在飞书中使用Langbot打开飞书会在聊天列表中看到Langbot机器人可以私聊