Dify接入RAGFlow无返回结果
0. 前言
在介绍该问题的解决方法前,先谈一谈最近一段时间使用Dify和RAGFlow的一些感受,希望可以给有需要的人提供一些思路或帮助。需要解决方法的可以直接跳到第4部分。
最近在摸索基于知识库的问答助手,开始的时候没有仔细了解过大名鼎鼎的RAGFlow,而是先上手了Dify,Dify自带的知识库只是个能用的程度,所以又找到了RAGFlow。
1. 使用感受
RAGFlow自带了多种文档的解析和切片方法(针对手册类型的PDF、书籍类PDF,Excel表格等等),大大减少了文档整理的工作量。即便如此,如果想要很好的召回效果,还是需要尽可能的去整理知识文档,调整内容和格式。
在召回不是很好的内容块上,RAGFlow也支持添加关键词,在搜索时可以结合关键词来匹配内容块(但并不支持作为外部知识库时使用,非常可惜),能够显著提高搜索精度。
由于事先体验在Dify上体验了大模型的对话以及工作流的编排,在这些方面RAGFlow就像个新兵蛋子,同样的大模型,在RAGFlow上创建的助手回答问题很僵硬(可能是默认提示词的区别),对于对话相关的功能支持不是很好(在最新的0.18版本才增加了中断模型输出)。
在我看来,Dify拥有的标注功能对于问答助手的开发非常重要,通过这个功能可以管理由用户标注的高质量回答,也可以主动批量导入。

除此之外,Dify的插件商店发展的也越来越好,支持非常多的优秀插件,而RAGFlow在0.18版本支持了MCP功能,在易用性上远不如Dify。

于是乎,我打算将RAGFlow作为Dify的外部知识库来使用,对于问答助手的相关开发则在Dify上进行
2. 将RAGFlow接入Dify
这一部分的操作可以参考博客 RAGFlow安装,dify对接RAGFlow - 博客园 和 一文读懂 RAGFlow 知识库接入 Dify 的全流程 - CSDN ,对于步骤都介绍的非常清楚,也介绍了一些原理。
需要注意的是,如果你和博主一样,需要在同一个服务器上通过Docker搭建Dify和RAGFlow,那么就要在启动时最好用以下命令启动:
docker-compose -p dify up -d
docker-compose -p ragflow up -d
此处 -p name 参数的作用是命名隔离,具体可以看第一个参考博客
接下来就要着重介绍我遇到的坑了。起初,我的Dify端口使用的默认的80端口,顺手我就把RAGFlow的端口设置为了82(为什么不是81,因为81还有一个图床),按照博客中的操作步骤,添加RAGFlow作为外部知识库API,此时提示成功。
3. 配置API成功但召回失败
但是,当我在Dify上创建好外部知识库,并在知识库内进行召回测试时,并无返回结果,查看Dify的log如下:
2025-04-25 08:56:41.116 INFO [Dummy-29] [_client.py:1038] - HTTP Request: POST http://x.x.x.x:82/api/v1/dify/retrieval "HTTP/1.1 200 OK"
2025-04-25 08:58:22.779 INFO [Dummy-30] [_client.py:1038] - HTTP Request: POST http://x.x.x.x:82/api/v1/dify/retrieval "HTTP/1.1 403 Forbidden"
2025-04-25 09:01:37.618 INFO [Thread-34 (_retriever)] [_client.py:1038] - HTTP Request: POST http://x.x.x.x:82/api/v1/dify/retrieval "HTTP/1.1 403 Forbidden"
第一条log就是配置外部知识库API时的请求,第二条是我做召回测试时的请求,返回 403 Forbidden ,我百思不得其解,百度也没有找到答案,最后在GitHub中我找到了答案。
dify 1.0.1 integration with external knowledge base ragflow recall is invalid. #15926 - Github ,在这个issue中我发现了遇到同样问题的小伙伴,他也是配置API成功但召回无响应。

4. 解决方法
每一个问题的下边必然会有一个大佬,大佬扒出代码一顿分析,给出了问题的原因(感兴趣的可以看看,我是没太看懂)。

最后得出一个看似离谱的解决方法:将RAGFlow的端口设置为8080。是的没错,我改了一下,它就好了。。。
RAGFlow的端口在 docker-compose.yml 中进行修改,修改后重新启动Docker Compose即可
以上就是本次问题的全部内容,希望可以帮到大家,感谢阅读!
参考
一文读懂 RAGFlow 知识库接入 Dify 的全流程 - CSDN
dify 1.0.1 integration with external knowledge base ragflow recall is invalid. #15926 - Github
Dify接入RAGFlow无返回结果的更多相关文章
- VS2012 Unit Test(Void, Action, Func) —— 对无返回值、使用Action或Func作为参数、多重载的方法进行单元测试
[提示] 1. 阅读文本前希望您具备如下知识:了解单元测试,了解Dynamic,熟悉泛型(协变与逆变)和Lambda,熟悉.NET Framework提供的 Action与Func委托.2.如果您对单 ...
- 慕课网-Java入门第一季-7-2 Java 中无参无返回值方法的使用
来源:http://www.imooc.com/code/1578 如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法. 方法的使用分两步: 第一步,定义方法 例如:下面代码定义了一个方法名 ...
- Android——关于Activity跳转的返回(无返回值和有返回值)——有返回值
说明: 跳转页面,并将第一页的Edittext输入的数据通过按钮Button传到第二页用Edittext显示,点击第二页的 返回按钮Button返回第一页(改变第二页的Edittext的内容会传至第一 ...
- Java 中无参无返回值方法的使用
如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法. 方法的使用分两步: 第一步,定义方法 例如:下面代码定义了一个方法名为 show ,没有参数,且没有返回值的方法,执行的操作为输出 “ ...
- 对无返回值、使用Action或Func作为参数、多重载的方法进行单元测试
VS2012 Unit Test(Void, Action, Func) —— 对无返回值.使用Action或Func作为参数.多重载的方法进行单元测试 [提示] 1. 阅读文本前希望您具备如下知识: ...
- 面试题----入参两个Integer,无返回值,然后使这个两个值在调用函数后交换
我最近看到过一个比较好玩的面试题. 写个方法,入参两个Integer,无返回值,然后使这个两个值在调用函数后交换 很有意思的一个题目,引发我的深思,根据一路的学习过来,下面把实现代码贴出来,方便学习. ...
- 无返回值的异步方法能否不用await
1.无返回值的异步方法能否不用await? 如果你不需要等待加一的操作完成,那就可以直接执行后面的操作.那要看你的需求了,如果你后面的操作必须在加一的操作后执行,那就要await了 2.请问C#中如何 ...
- RhinoMock中无参数方法和无返回值方法的使用
无返回值方法,RhinoMock的例子是这么做的: demo.VoidThreeArgs(, "", 0f); LastCall.On(demo).Callback<int, ...
- Java_无参数无返回类型方法及练习
无参数无返回类型方法语法格式: public static void 方法名称(){ 方法体; } class Method03{ /*练习3:输出1-100中的每个数,要求使用无参无返回类型的方法完 ...
- ForkJoin有参无返回值、有参有返回值实例
介绍: a . Fork/Join为JKD1.7引入,适用于对大量数据进行拆分成多个小任务进行计算的框架,最后把所有小任务的结果汇总合并得到最终的结果 b . 相关类 public abstract ...
随机推荐
- 数字先锋 | SaaS服务“拎包入住”?央企数字化转型体验感拉满!
数字化转型已成为企业生存和发展的"必修课".作为国民经济的"压舱石""顶梁柱",国资央企正加快"上云用数赋智"步伐,引领 ...
- 深度学习中CUDA环境安装教程
首先说明,本人是小白,一次安装,可能有不对的地方,望包含. 安装CUDA 因为我们是深度学习,很多时候要用到gpu进行训练,所以我们需要一种方式加快训练速度. 通俗地说,CUDA是一种协助" ...
- 用python做时间序列预测十:时间序列实践-航司乘客数预测
本文以航司乘客数预测的例子来组织相关时间序列预测的代码,通过了解本文中的代码,当遇到其它场景的时间序列预测亦可套用. 航司乘客数序列 预测步骤 # 加载时间序列数据 _ts = load_data() ...
- [BZOJ3771] Triple 题解
<关于贫穷的樵夫拥有 40000 把斧头这件事>. 相当于是多项式乘法,但是得带容斥,具体自己看代码吧. #include<bits/stdc++.h> using names ...
- CF1837E Play Fixing 题解
首先来考虑什么情况方案数为 \(0\): 可以确定,在某一层中,两个原本都能晋级的队伍比赛: 可以确定,在某一层中,两个原本都不能晋级的队伍比赛. 发现假如写出每一场比赛及其胜者,可以形成一棵树形结构 ...
- ABB机器人伺服电机维修有脉冲输出时不工作怎么处理
1.ABB机器人伺服电机维修有脉冲输出时不工作怎么处理? 监督操控器的脉冲输出当时值以及脉冲输出灯是否闪烁,承认指令脉冲现已履行并现已正常输出脉冲:查看操控器到驱动器的操控电缆,动力电缆,编码器电缆是 ...
- Week09_day05(Hbase的介绍和工作原理)
HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像Bigtable利 ...
- 在 Mac 上解决 LM Studio 无法下载模型的问题(国内镜像替换教程)
如果你在使用 LM Studio 时遇到类似 There was an error fetching results from Hugging Face 或 Model details error: ...
- netcore后台服务慎用BackgroundService
在 .NET Core 开发中,BackgroundService 是一个非常方便的后台任务运行方式,但它并不适用于所有场景. BackgroundService 一时爽,并发火葬场. Backgro ...
- **Selenium IDE、Selenium RC 和 WebDriver 之间有什么区别?**