简介:本文通过深入Dify源码,详细剖析了知识库检索过程中大模型调用异常的根源。文章首先介绍了Dify与Xinference的组合部署及RAG工作流的创建,随后针对知识库检索节点执行时报错GPT3.5模型不存在的问题,通过源码分析定位了异常原因,并提供了解决思路。
在AI技术日新月异的今天,Dify作为一款强大的工具,在知识库检索与问答系统构建中扮演着重要角色。然而,在实际部署与使用过程中,我们可能会遇到一些棘手的问题,如知识库检索节点执行时报错GPT3.5模型不存在。本文将通过深入Dify源码,详细剖析这一异常的根源,并提供相应的解决思路。
Dify是一个将模型加载独立出去的工具,因此选择合适的模型加载框架至关重要。经过调研,我们选择了Xinference作为Dify的模型加载框架,因为它支持多种类型的模型,包括LLM、Embedding等。在GPU服务器上部署了Dify服务后,我们基于本地部署的服务构建了知识库,并利用Dify首页提供的任务流模板创建了一个RAG(Retrieval Augmented Generation)工作流。
然而,在实际运行此应用聊天时,我们发现知识库检索节点执行时会报错GPT3.5模型不存在。这个异常存在两个诡异之处:一是知识库检索环节预期不需要调用大模型,实际却调用了大模型;二是本地没有配置GPT3.5,为什么会选择GPT3.5模型?
为了定位这个问题,我们结合之前梳理的Dify源码解析中的调用链路,快速找到了相关实现。知识库检索的实现在api/core/rag/datasource/retrieval_service.py
中,知识库检索目前支持四种检索模式,其中混合检索是向量检索+全文检索结果的结合,因此我们主要关注三种基础检索方式:关键词检索、向量检索和全文检索。
关键词检索:
关键词检索目前只支持了Jieba的关键词检索,核心的实现是在api/core/rag/datasource/keyword/jieba/jieba.py
中。通过源码分析,我们发现关键词检索是从分块后的文本中提取关键词,构造关键词表。之后从查询语句中提取关键词,与关键词表进行匹配,从而确定匹配的数据块。这一过程中并未涉及大模型的调用。
向量检索:
向量检索的实现也比较容易理解,在api/core/rag/datasource/vdb
下实现了不同的向量库,在实际执行向量检索时,就是调用对应向量库的search_by_vector()
方法。以Milvus为例,对应的实现中并未看到任何大模型的调用。
全文检索:
Dify定义的全文检索事实上实现的就是BM25检索,主要利用向量库现有的能力实现。目前大部分向量库都不支持全文检索,这种情况下会直接返回空列表。我们选择一个支持全文检索的向量库qdrant为例查看对应的实现,全文检索调用的方法为search_by_full_text
,qdrant对应的实现中同样未看到大模型的调用。
既然三种基础检索方式中均未涉及大模型的调用,那么问题究竟出在哪里呢?我们进一步分析了Dify的源码和API请求信息,最终定位到问题可能出在RAG工作流的配置或调用链路上。
经过仔细排查,我们发现RAG工作流在配置时可能误将某个需要大模型处理的节点与知识库检索节点关联在了一起,导致在知识库检索时错误地调用了大模型。具体来说,可能是以下两种情况之一:
配置错误:在RAG工作流配置时,可能不小心将某个需要GPT3.5等大模型处理的节点配置为了知识库检索的后续节点,导致在知识库检索完成后错误地触发了大模型的调用。
代码逻辑错误:在Dify的源码中,可能存在某个逻辑判断错误或函数调用错误,导致在知识库检索过程中错误地调用了大模型。
针对这两种情况,我们提出了以下解决思路:
检查并修正RAG工作流配置:重新检查RAG工作流的配置信息,确保知识库检索节点与正确的后续节点关联在一起,避免错误地调用大模型。
审查并修改Dify源码:对Dify的源码进行仔细审查,特别是与知识库检索相关的部分,确保没有逻辑判断错误或函数调用错误。如果发现问题,及时进行修正。
本文通过深入Dify源码,详细剖析了知识库检索过程中大模型调用异常的根源。我们发现问题可能出在RAG工作流的配置或调用链路上,并提出了相应的解决思路。在实际使用过程中,如果遇到类似问题,可以按照本文的思路进行排查和解决。
此外,值得一提的是,Dify作为一款强大的工具,在知识库检索与问答系统构建中具有广泛的应用前景。然而,在使用过程中也可能会遇到各种问题和挑战。因此,我们需要不断学习和探索Dify的源码和机制,以便更好地利用这一工具来构建高效、智能的知识检索和问答系统。
在解决此类问题时,我们还可以考虑借助一些专业的AI工具和服务平台,如千帆大模型开发与服务平台。该平台提供了丰富的AI模型开发、部署和运维功能,可以帮助我们更高效地定位和解决类似的问题。通过结合使用Dify和千帆大模型开发与服务平台等工具,我们可以构建更加完善、智能的AI应用和服务。