前言
Dify是一款开源的大语言模型应用开发平台,旨在降低AI应用的开发门槛,帮助开发者和企业快速构建、部署及管理生成式AI应用。
Dify的知识库功能将RAG管线上的各环节可视化,提供了一套简单易用的用户界面来方便应用构建者管理个人或者团队的知识库,并能够快速集成至 AI 应用中。为了达到最好的RAG检索效果,需要选择正确的分段设置。
本文介绍如下内容:
- RAG介绍
- 提升Dify RAG效果的关键:父子模式
- 通过Jina Reader抓取网页信息
- 基于Dify构建客服智能体
RAG介绍
RAG是什么?
RAG,全称Retrieval-Augmented Generation,直译为“检索增强生成”。简单来说,RAG = 知识检索系统 + 大语言模型(LLM)。
在问答过程中,RAG会:
- 根据用户问题,从知识库(向量数据库)检索相关信息
- 把这些真实、可靠的资料作为上下文“喂”给大模型
- 由大模型根据这些检索到的资料进行加工、归纳、回答
为什么RAG重要?
减少幻觉
- 大模型有时会“胡编乱造”,尤其当问题超出它训练范围时。
- 通过RAG,大模型可以参考实时的、真实的资料,避免凭空想象。
解决时效问题
- 训练一次大模型耗资巨大,且更新频率有限。
- RAG可以检索最新的数据或文档,让旧模型回答新问题。
支持私有知识库
企业可以用自己专属的数据(产品手册、内部wiki、合同、报告等)做RAG,而无需重新训练大模型。
提升回答的可解释性
RAG可以告诉用户“答案来自哪篇文档”,增强透明度和可信度。
RAG的技术组成
向量化(Embedding)
把文档拆分成“知识块”,用向量模型编码成向量,并存储到向量数据库(如Weaviate、Milvus等)中。
相似度检索
根据用户问题,计算问题与文档块的相似度,从向量数据库找出相关内容。
上下文构建
将检索到的内容拼接,作为“上下文”发送给大模型处理。
大模型生成
LLM根据上述“补充背景”给出更准确、更专业、更可信的答案。
提升Dify RAG效果的关键:父子模式
提升RAG效果的关键是检索出合适的上下文内容。在Dify导入数据到知识库系统的流程中,有两种文本分段方式:“通用模式”和“父子模式”
通用模式
系统依据用户的自定义规则,将内容拆分为独立的分段。当用户输入问题后,系统自动提取问题的关键词,并计算关键词与知识库中各分段的相关度。根据相关度排序,选取最相关的内容分段并发送给 LLM,辅助其回答问题。
“通用模式”的分段最大长度设置存在两难:
- 分段长度过小:文本因为分段的原因容易造成上下文丢失。
- 分段长度过长:较长的文本分段,势必会影响embedding的检索精度。而且,受embedding模型的限制,每个分段的最大长度有限制(通常小于1万tokens)。
父子模式
父子模式采用双层分段结构来平衡检索的精确度和上下文信息,让精准匹配与全面的上下文信息二者兼得。
父区块
父区块保持较大的文本单位(如段落),提供丰富的上下文信息。
子区块
子区块是较小的文本单位(如句子),用于精确检索。
检索机制
通过子区块进行精确检索以确保相关性,然后获取对应的父区块来补充上下文信息,从而在生成响应时既保证准确性又能提供完整的背景信息。
通过Jina Reader抓取网页信息
原始HTML充斥着标记和脚本等无关元素,Jina Reader API通过从URL中提取核心内容并将其转换为干净的、大模型友好的文本,从而确保为您的Agent和RAG系统提供高质量的输入。
Jina Reader读取返回的结果是Markdown格式,需要了解抓取结果的格式,以便设置正确的分段标识符。
可以打开https://r.jina.ai/ + 页面地址查看Jina的输出格式。例如Dify的安装部署FAQ页面https://r.jina.ai/https://docs.dify.ai/zh-hans/learn-more/faq/install-faq的输出如下图, 分段标识符设置为### (三个#加一个空格),可以正确切分不同的问答内容:
基于Dify构建客服智能体
创建知识库
新建知识库
- 数据源选择“同步自Web站点
- 工具选择“Jina Reader"
- 页面链接填:https://docs.dify.ai/zh-hans/learn-more/faq/install-faq此链接为dify的安装部署FAQ
- 取消勾选“爬取子页面”
- 点击“运行”
- 运行出结果后,选择“下一步”
- 分段设置:选择父子分段模式
父块设置:分段标识符为### (三个#加一个空格),分段最大长度设置为4000
子块设置:分段标识符为\n\n,分段最大长度设置为512
注意:必须根据文档内容格式填写正确的分段标识符,否则RAG效果会大打折扣
- Embedding模型:选择doubao模型
- 点击“保存并处理”
修改知识库名称和描述
- • 名称:Dify FAQ
描述:包含Dify的FAQ问答内容
创建Agent应用
在http://localhost/apps页面点击“创建空白应用”,选择“Agent”。填写应用名,点击创建,进入编排界面。编排界面如下:
- 设置提示词内容为:
你是一个Dify客服,需调用工具使用知识库的内容回答问题。 要求:如果知识库里没有答案,回复:没找到相关答案
- 添加知识库把"Dify FAQ"知识库添加到应用。
- 选择模型使用doubao-1.5-pro-32k
- 调试和预览在下方输入提问内容向Agent提问Dify相关的问题
- 测试通过后,点击右上角的“发布”按钮。
- 发布后,点击“运行”即可打开应用的访问链接。
总结
通过本文的介绍,相信大家对RAG机制有了更清晰的认识,并了解了在Dify平台中提升RAG效果的关键方法——父子模式的应用。同时,我们还学习了如何借助Jina Reader高效抓取网页信息,为知识库构建提供优质数据支持。基于这些能力,开发者可以更轻松地在Dify中搭建具备良好检索与生成能力的智能客服等AI应用。