ragflow icon indicating copy to clipboard operation
ragflow copied to clipboard

[Bug]: Duplicate Content in Knowledge Base Q&A Responses of RAGFlow

Open comaaxl opened this issue 1 month ago • 4 comments

Self Checks

  • [x] I have searched for existing issues search for existing issues, including closed ones.
  • [x] I confirm that I am using English to submit this report (Language Policy).
  • [x] Non-english title submitions will be closed directly ( 非英文标题的提交将会被直接关闭 ) (Language Policy).
  • [x] Please do not modify this template :) and fill in all the required fields.

RAGFlow workspace code commit ID

c51e6b2a58abb25628e329d579c88875f75e7469

RAGFlow image version

v0.22.1-166-gc51e6b2a

Other environment information

MacBook Pro M4

Actual behavior

  1. Deployment Environment & Method: I deployed RAGFlow on a MacBook Pro M4 via the official source code approach in the Mac terminal.
  2. Python Dependency Installation: The script used for installing Python dependencies is uv sync --python 3.12 --all-extras, as the official script uv sync --python 3.10 consistently threw errors in my environment.
  3. Modified Deployment Files: Several files adjusted during deployment are attached for reference: pyproject.toml: Modified versions of a few Python modules. docker-compose-base.yml: Updated to use ARM images based on the official template. service_conf.yaml .env

docker-compose-base.yml

service_conf.yaml

  1. Model Configuration: The setup uses an OpenAI proxy with the base URL: https://api.openai-next.com/v1/. The issue of duplicate responses in knowledge base Q&A remains unchanged even after switching to different models.
  2. Test Question & Symptom: The test question is: "信界安全工作空间的典型应用场景有哪些?" The model’s responses to this question contain duplicate content (the full response is as follows):

信界安全工作空间的典型应用场景包括: 1. 防内鬼利用外挂/爬虫窃取数据:实时监测业务数据和网络请求,精准识别是否产生异常请求,及时发现潜在的安全风险。通过加密传输、证书校验、防注入、人机校验等手段,拦截恶意工具、阻止爬虫,防止数据被窃取。一旦检测到异常情况,会立即截图取证,留存关键证据[ID:0][ID:1]。 2. 内部人员违规操作监测:详细记录所有操作轨迹,并通过智能水印技术标记访问者信息,对网页操作、表单修改等进行监控。一旦发生泄密事件,可以迅速追踪数据流向,精准定位源头,责任到人[ID:1][ID:7]。 3. 外包兼职人员数据防泄密:对于外包人员、客服等特殊用户群体,通过网页与文件防泄密手段,防止敏感数据被非法下载或扩散[ID:1][ID:3]。 4. 供应链系统暴露面收缩:通过统一收口方式,限制业务系统只能通过信界访问,从网络层有效缩小暴露面,防止通过其他浏览器等非信界途径访问业务系统。可采用Nginx插件、WAF/负载设备配置HTTP头校验、引入SDP网关等方式实施[ID:0][ID:1]。 5. 企业核心文件数据不落地:下载文件可脱敏,敏感文件可在线预览并加水印,降低文件本地落地和扩散风险,防止核心数据泄密[ID:1][ID:7]。 6. 打造统一办公门户:通过信界将各类业务统一纳入安全办公入口,支持免改造单点登录,提升访问便捷性和管理效率[ID:2][ID:7]。 此外,还包括代理商业务安全监控、Web系统特权账号管控、免改造单点登录、信创替代等多种场景,能够帮助企业应对违规办理业务、业务数据泄露、账号管理混乱等多种业务安全挑战[ID:3][ID:1]。

信界安全工作空间的典型应用场景包括: 1. 防内鬼利用外挂/爬虫窃取数据:适用于企业内部或外部员工办理重要业务时,实现实时业务数据和网络请求监控,精准识别异常请求,及时发现并拦截内外勾结泄密、恶意工具、自动爬虫等安全风险。一旦检测到异常,信界会启动截图取证,留存证据,全方位守护业务安全[ID:0][ID:1]。 2. 内部人员违规操作监测:可详细记录用户的每一步操作,如业务请求、网页操作、表单修改、客户端截屏等,帮助企业发现和阻断内部违规行为,实现操作流程的全程追溯和高效溯源定责[ID:1][ID:7]。 3. 外包兼职人员数据防泄密:针对外包或兼职人员访问企业核心数据的场景,提供网页与文件防泄密、脱敏下载、在线预览和加水印等服务,防止敏感数据被非法获取或扩散[ID:1][ID:3][ID:7]。 4. 供应链系统暴露面收缩:通过在业务系统前配置统一收口(如Nginx插件校验、WAF校验、SDP网关接入或SaaS账号托管),让业务系统只能通过信界访问,防止被其他浏览器或渠道绕过安全监管[ID:0][ID:1]。 5. 企业核心文件数据不落地:实现文件下载脱敏、在线预览和文档加水印,避免企业核心文件在终端落地,降低泄密风险[ID:1][ID:7]。 6. 打造统一办公门户:通过信界统一管理各类业务应用,支持单点登录与账号统一管理,提升办公体验和安全性[ID:2][ID:7]。 此外,应用场景还包括:代理商业务安全监控、web系统特权账号管控、免改造单点登录和信创替代等[ID:3][ID:1]。

信界安全工作空间的典型应用场景包括: 1. 防内鬼利用外挂/爬虫窃取数据:可实时监控业务数据和网络请求,精准识别异常操作,并通过加密传输、证书校验、防注入、人机校验等手段,拦截恶意工具和自动爬虫窃取数据。一旦检测到风险,自动截图取证,防止数据泄露,并为事后追责提供证据 [ID:0][ID:1]。 2. 内部人员违规操作监测:对员工在系统内的违规操作进行细致管控,能够记录所有操作轨迹,并通过智能水印标记访问者信息,实现责任可追溯,一旦发生泄密可精准定位到人 [ID:1][ID:7]。 3. 外包/兼职人员数据防泄密:适用于外包或临时人员访问公司业务系统,防止其在工作中接触和泄露敏感数据,例如网页与文件防泄密、脱敏下载、加水印等措施 [ID:1][ID:3][ID:7]。 4. 供应链系统暴露面收缩:帮助企业减少与合作方或外部连接时的直接暴露面。通过统一访问收口方式,只允许通过信界访问业务系统;支持Nginx 反向代理/WAF/SDP方案或基于账号托管的第三方SaaS收口,防止业务系统被绕开安全访问 [ID:0][ID:1]。 5. 企业核心文件数据不落地:通过下载脱敏、在线预览和水印等方式,防止敏感文件落地终端,减少被非法复制或传播的风险 [ID:1][ID:7]。 6. 打造统一办公门户:为企业提供统一的办公入口和单点登录体验,员工只需通过信界即可访问所有业务系统,无需记忆多个账号和密码,提高使用便利性和效率 [ID:2][ID:7]。 此外,信界安全工作空间还适用于代理商业务安全监控、Web系统特权账号管控、免改造单点登录、信创环境替代等多类业务场景 [ID:3]。

信界安全工作空间的典型应用场景主要包括以下几类: 1. 防内鬼利用外挂/爬虫窃取数据:通过实时监测业务数据和网络请求,及时发现并拦截异常请求、外挂、爬虫等,防止数据被恶意窃取,同时支持异常情况的截图取证功能 [ID:0][ID:1]。 2. 内部人员违规操作监测:可以对员工的网页操作、表单修改、业务请求等进行实时监控和日志记录,有效发现和追溯内部违规操作 [ID:1][ID:3]。 3. 外包兼职人员数据防泄密:针对外包和兼职人员,提供网页和文件防泄密、下载脱敏、文档加水印等,控制数据落地和扩散风险 [ID:1][ID:3][ID:7]。 4. 供应链系统暴露面收缩:通过统一收口方式(如Nginx插件、WAF规则、SDP网关、SaaS账号托管等),只允许通过信界访问业务系统,降低系统被绕过直接访问的风险 [ID:0][ID:1]。 5. 企业核心文件数据不落地:实现文件在线预览、下载脱敏、加水印,防止企业核心文件被非法保存和传播 [ID:1][ID:7]。 6. 打造统一办公门户:为企业提供免改造单点登录、统一门户入口,便于整合各类内部和SaaS业务应用,提高办公效率和安全性 [ID:2][ID:3][ID:7]。 信界安全工作空间通过这些应用场景,帮助企业应对数据泄露、违规操作、账号管理混乱等业务安全问题,保护数据资产安全,提升安全管理水平 [ID:3][ID:1][ID:7]。

信界安全工作空间的典型应用场景包括: 1. 防内鬼利用外挂/爬虫窃取数据:能够实时监控业务数据和网络请求,识别异常请求,及时发现安全风险。通过加密传输、证书校验、防注入、人机校验等手段拦截恶意工具,阻止数据被外挂或爬虫窃取,并能在发现异常时截图取证,留存关键证据,防止数据泄露[ID:0][ID:1]。 2. 内部人员违规操作监测:详细记录所有操作轨迹,通过业务请求监控、网页操作监控、表单修改监控和客户端截屏监控等措施,发现和阻断内部人员的违规行为。结合智能水印技术,可以在发生泄密事件时迅速溯源,并精准定位责任人[ID:1][ID:7]。 3. 外包兼职人员数据防泄密:针对外包、客服等高风险群体,通过网页与文件防泄密、下载文件脱敏、文件在线预览及文档加水印等方式,减少敏感数据落地和扩散的风险,保护企业核心数据安全[ID:1][ID:3][ID:7]。 4. 供应链系统暴露面收缩:采用统一收口方式,仅允许信界访问业务系统。可通过Nginx插件校验、WAF或负载设备的HTTP头校验、SDP网关只允许信界程序连接等多种方式,从源头阻断非信界入口的访问路径,有效降低系统暴露风险[ID:0][ID:1]。 5. 企业核心文件数据不落地:通过下载文件脱敏、在线预览、加注水印等措施,降低文件落地至终端的风险,防止敏感文件被复制或外泄[ID:1][ID:7]。 6. 打造统一办公门户:为用户提供统一入口,单点登录、多系统免记账号密码,提高办公效率并提升管控能力[ID:2][ID:7]。 7. 代理商业务安全监控、web系统特权账号管控、内部违规查询监测、信创替代、免改造单点登录等场景,也广泛适用信界安全工作空间[ID:3][ID:1]。 这些典型场景结合了信界的精细化访问控制、数据安全防护、操作审计和统一身份管控等能力,有效解决数字化办公过程中的业务与数据安全挑战[ID:3][ID:7][ID:4]。

信界安全工作空间的典型应用场景主要涵盖以下几个方面: 1. 防内鬼利用外挂/爬虫窃取数据 信界通过实时监测业务数据和网络请求,精确识别异常行为,结合加密传输、证书校验、防注入、人机校验等手段,有效拦截外挂、爬虫等恶意工具,防止数据被恶意窃取。同时,一旦检测到异常,信界会自动截图取证,保留关键证据,守护业务与数据安全[ID:0][ID:1]。 2. 内部人员违规操作监测 针对企业内部员工可能存在的违规操作行为,信界可以细致记录和监控所有业务请求、网页操作、表单修改和客户端截屏等行为,形成完整的操作轨迹,实现事中预警和事后溯源,快速定位问题和责任人[ID:1][ID:7]。 3. 外包或兼职人员数据防泄密 对于外包或兼职人员,信界可通过网页与文件防泄密、文件脱敏、在线预览等功能,降低敏感数据落地和扩散风险,避免数据因管理外延而发生泄漏[ID:3][ID:1]。 4. 供应链系统暴露面收缩 信界通过多种统一收口策略,只允许业务系统通过信界进行访问,如在Nginx或WAF等设备配置校验规则、引入亚信SDP,或通过账号托管方式等,从源头上收紧访问通道,阻断绕行风险[ID:0][ID:1]。 5. 企业核心文件数据不落地 通过下载文件脱敏、加注水印及文件在线预览等措施,敏感文件不易落地终端,防止被复制、截屏、扩散和非法传递,有效保护企业核心数据资产安全[ID:1][ID:7]。 6. 打造统一办公门户 信界可整合企业各类应用,提供统一导航和免改造单点登录体验,提升用户便利性和业务安全性[ID:2][ID:7]。 此外,信界还适用诸如代理商业务安全监控、Web系统特权账号管控、内部违规查询监测、免改造单点登录、信创替代等场景,有效帮助企业解决违规办理业务、账号管理混乱和数据泄漏等问题[ID:3]。

  1. Server-side Logs: The relevant server logs are provided below:

server_logs.txt

Expected behavior

No response

Steps to reproduce

None

Additional information

No response

comaaxl avatar Dec 10 '25 01:12 comaaxl

Hi @comaaxl! I'm Dosu and I’m helping the ragflow team.

The duplicate content in knowledge base Q&A responses is caused by the lack of deduplication logic in the current RAGFlow codebase. The retrieval and prompt construction stages do not merge or filter out semantically identical chunks, so if the retrieval returns overlapping or repeated content, it will appear multiple times in the final answer dialog_service.py prompts/generator.py search.py.

This is not caused by your deployment environment or configuration. To reduce duplication, you can try increasing the similarity threshold and lowering the Top N parameter in your retrieval settings issue #6107. For a more robust solution, deduplication logic would need to be added to the retrieval or prompt construction pipeline.

Your configuration files do not show any misconfiguration that would cause this issue, but if you are indexing the same dataset in multiple search backends (like Elasticsearch and OpenSearch), make sure retrieval is not pulling duplicate chunks from both sources.

Let me know if you want guidance on where to add deduplication in the code or how to tune your retrieval parameters.

To reply, just mention @dosu.


How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other

Chat with Dosu Open in Cursor Join Discord Share on X

dosubot[bot] avatar Dec 10 '25 01:12 dosubot[bot]

I think pr #11832 has fixed this issue.

Magicbook1108 avatar Dec 10 '25 01:12 Magicbook1108

I adjusted the similarity threshold from 0.2 to 0.6 and reduced Top N from 8 to 2, but the model still gives duplicate answers to the same question. After that, I increased the similarity threshold to 0.9, which should have made it impossible to retrieve any knowledge chunks. However, the model’s response turned out like this:

知识库中未找到您要的答案!知识库中未找到您要的答案!知识库中未找到您要的答案!知识库中未找到您要的答案!知识库中未找到您要的答案!知识库中未找到您要的答案!

It seems as if the model was called multiple times? The logs also look like the model was invoked repeatedly:

[2025-12-10 09:53:08 +0800] [33232] [INFO] 127.0.0.1:61286 POST /v1/conversation/completion 1.1 200 - 79822319 [2025-12-10 09:53:08 +0800] [33232] [INFO] 127.0.0.1:61350 POST /v1/kb/list 1.1 200 435 10454 [2025-12-10 09:53:08 +0800] [33232] [INFO] 127.0.0.1:61351 GET /v1/user/info 1.1 200 766 10988 [2025-12-10 09:53:08 +0800] [33232] [INFO] 127.0.0.1:61352 GET /v1/llm/list 1.1 200 8669 26882 [2025-12-10 09:53:49 +0800] [33232] [INFO] 127.0.0.1:61407 POST /v1/dialog/set 1.1 200 1723 22836 [2025-12-10 09:53:49 +0800] [33232] [INFO] 127.0.0.1:61410 POST /v1/dialog/next 1.1 200 1609 9289 2025-12-10 09:53:49,823 WARNING 33232 Database connection issue (attempt 1/5): (0, '') [2025-12-10 09:53:50 +0800] [33232] [INFO] 127.0.0.1:61411 GET /v1/dialog/get 1.1 200 1723 1010849 [2025-12-10 09:54:03 +0800] [33232] [INFO] 127.0.0.1:61425 POST /v1/conversation/set 1.1 200 484 16756 [2025-12-10 09:54:03 +0800] [33232] [INFO] 127.0.0.1:61428 GET /v1/conversation/list 1.1 200 296119 15968 2025-12-10 09:54:06,037 INFO 33232 POST http://localhost:1200/ragflow_a196ea1cd4e511f084ff3bf1f8924561/_search [status:200 duration:0.048s] 2025-12-10 09:54:06,151 INFO 33232 [HISTORY STREAMLY][ { "role": "system", "content": "你是一个智能助手,请总结知识库的内容来回答问题,请列举知识库中的数据详细回答。当所有知识库内容都与问题无关时,你的回答必须包括“知识库中未找到您要的答案!”这句话。回答需要考虑聊天历史。\n 以下是知识库:\n \n------\n\n 以上是知识库。" }, { "role": "user", "content": "信界安全工作空间的典型应用场景有哪些?" } ] 2025-12-10 09:54:07,813 INFO 33232 [HISTORY STREAMLY][ { "role": "system", "content": "你是一个智能助手,请总结知识库的内容来回答问题,请列举知识库中的数据详细回答。当所有知识库内容都与问题无关时,你的回答必须包括“知识库中未找到您要的答案!”这句话。回答需要考虑聊天历史。\n 以下是知识库:\n \n------\n\n 以上是知识库。" }, { "role": "user", "content": "信界安全工作空间的典型应用场景有哪些?" } ] 2025-12-10 09:54:09,787 INFO 33232 [HISTORY STREAMLY][ { "role": "system", "content": "你是一个智能助手,请总结知识库的内容来回答问题,请列举知识库中的数据详细回答。当所有知识库内容都与问题无关时,你的回答必须包括“知识库中未找到您要的答案!”这句话。回答需要考虑聊天历史。\n 以下是知识库:\n \n------\n\n 以上是知识库。" }, { "role": "user", "content": "信界安全工作空间的典型应用场景有哪些?" } ] 2025-12-10 09:54:11,276 INFO 33232 [HISTORY STREAMLY][ { "role": "system", "content": "你是一个智能助手,请总结知识库的内容来回答问题,请列举知识库中的数据详细回答。当所有知识库内容都与问题无关时,你的回答必须包括“知识库中未找到您要的答案!”这句话。回答需要考虑聊天历史。\n 以下是知识库:\n \n------\n\n 以上是知识库。" }, { "role": "user", "content": "信界安全工作空间的典型应用场景有哪些?" } ] 2025-12-10 09:54:12,906 INFO 33232 [HISTORY STREAMLY][ { "role": "system", "content": "你是一个智能助手,请总结知识库的内容来回答问题,请列举知识库中的数据详细回答。当所有知识库内容都与问题无关时,你的回答必须包括“知识库中未找到您要的答案!”这句话。回答需要考虑聊天历史。\n 以下是知识库:\n \n------\n\n 以上是知识库。" }, { "role": "user", "content": "信界安全工作空间的典型应用场景有哪些?" } ] 2025-12-10 09:54:14,697 INFO 33232 [HISTORY STREAMLY][ { "role": "system", "content": "你是一个智能助手,请总结知识库的内容来回答问题,请列举知识库中的数据详细回答。当所有知识库内容都与问题无关时,你的回答必须包括“知识库中未找到您要的答案!”这句话。回答需要考虑聊天历史。\n 以下是知识库:\n \n------\n\n 以上是知识库。" }, { "role": "user", "content": "信界安全工作空间的典型应用场景有哪些?" } ] [2025-12-10 09:54:16 +0800] [33232] [INFO] 127.0.0.1:61429 POST /v1/conversation/completion 1.1 200 - 12635967 [2025-12-10 09:54:49 +0800] [33232] [INFO] 127.0.0.1:61491 GET /v1/user/info 1.1 200 766 28001 [2025-12-10 09:54:49 +0800] [33232] [INFO] 127.0.0.1:61492 POST /v1/kb/list 1.1 200 435 28893 [2025-12-10 09:54:49 +0800] [33232] [INFO] 127.0.0.1:61493 GET /v1/llm/list 1.1 200 8669 52825 [2025-12-10 09:58:13 +0800] [33232] [INFO] 127.0.0.1:61631 POST /v1/kb/list 1.1 200 435 33202 [2025-12-10 09:58:13 +0800] [33232] [INFO] 127.0.0.1:61632 GET /v1/user/info 1.1 200 766 34410 [2025-12-10 09:58:13 +0800] [33232] [INFO] 127.0.0.1:61633 GET /v1/llm/list 1.1 200 8669 50313 [2025-12-10 09:59:16 +0800] [33232] [INFO] 127.0.0.1:61686 POST /v1/kb/list 1.1 200 435 28736 [2025-12-10 09:59:16 +0800] [33232] [INFO] 127.0.0.1:61687 GET /v1/user/info 1.1 200 766 29471 [2025-12-10 09:59:16 +0800] [33232] [INFO] 127.0.0.1:61688 GET /v1/llm/list 1.1 200 8669 39566

This issue occurs when deploying via the source code approach. I also tried deploying with a self-built ARM Docker image, but the problem persists. I don’t know what to do—what exactly is causing this?

comaaxl avatar Dec 10 '25 02:12 comaaxl

Pull the code again.

KevinHuSh avatar Dec 10 '25 03:12 KevinHuSh