【Ragflow】26.RagflowPlus(v0.4.0):完善解析邏輯/文檔撰寫模式全新升級

概述

在歷經半個月的間歇性開發后,RagflowPlus再次迎來一輪升級,正式發布v0.4.0

開源地址:https://github.com/zstar1003/ragflow-plus

更新方法

下載倉庫最新代碼:

git clone https://github.com/zstar1003/ragflow-plus.git

使用docker啟動:

# cpu模式
docker compose -f docker/docker-compose.yml up -d
# gpu模式
docker compose -f docker/docker-compose_gpu.yml up -d

首次啟動會自動拉取最新版本鏡像。

新功能

1. 上傳文件支持文件夾

在此版本中,優化了上傳文件,目前支持選擇文件夾進行上傳。

系統會自動識別,將該文件夾及其子文件夾中所有文件提取上傳。

新增的選擇文件夾按鈕

同時,該版本重新調整了文件上傳的請求通道,減少上傳超時的可能性。

2. 文檔撰寫模式全新升級

此版本重點重構了文檔撰寫模塊,目前在此版本中,支持自定義模板,可將當前文檔內容保存為自定義名稱的模板,并可對現有模板進行調整刪除。

同時,文檔撰寫后端采用了獨立的響應通道,不再需要依賴助理設置進行輸出,響應速度大幅提升。

左下角增加配置選項,可以自由選擇一個或多個知識庫信息,同時可調節較為常用的三個搜索及模型參數。

考慮到過多的文檔內容輸入,有超過模型輸入上限的風險。本版本對輸入模型的文本范圍進行重新優化,會自動選取光標位置上下文最多共4000個字符輸入到問答模型中。

功能優化

1. 解析邏輯調整

本版本重新調整了解析邏輯,在解析時增加了和搜索一致的分詞器,解決了上一版本中,做知識庫檢索時,關鍵詞相似度為0的情況。

具體細節可參考本系列第24篇文章:【Ragflow】24.Ragflow-plus開發日志:增加分詞邏輯,修復關鍵詞檢索失效問題

2. 知識庫創建人權限問題

在上一版本中,知識庫創建時,創建人選擇非初始用戶,問答時會出現報錯。
本版本修復了這一問題。

3. excel解析優化

本版本對excel類型的文件采用了單獨的解析管線,速度更快,效果更好。

具體細節可參考本系列第25篇文章:【Ragflow】25.Ragflow-plus開發日志:excel文件解析新思路/公式解析適配

4. Ollama解析接口調整

有群友提到(issue#65),使用ollama構建嵌入模型時,前臺接口采用的是api/embeddings,而上版本后端接口采用的是v1/embeddings,不同的接口返回值不一致,會造成向量相似度計算偏差較大。

下面寫了一個測試腳本,具體測試了一下這兩種接口的具體調用結果:

import requests
import time# Ollama配置
OLLAMA_HOST = "http://localhost:11434"  # 默認Ollama地址
MODEL_NAME = "bge-m3"  # 使用的embedding模型
TEXT_TO_EMBED = "測試文本"# 定義接口URL和對應的請求體結構
ENDPOINTS = {"api/embeddings": {"url": f"{OLLAMA_HOST}/api/embeddings",  # 原生API路徑"payload": {"model": MODEL_NAME, "prompt": TEXT_TO_EMBED},  # 原生API用prompt字段},"v1/embeddings": {"url": f"{OLLAMA_HOST}/v1/embeddings",  # OpenAI兼容API路徑"payload": {"model": MODEL_NAME, "input": TEXT_TO_EMBED},  # OpenAI兼容API用input字段},
}headers = {"Content-Type": "application/json"}def test_endpoint(endpoint_name, endpoint_info):"""測試單個端點并返回結果"""print(f"\n測試接口: {endpoint_name}")url = endpoint_info["url"]payload = endpoint_info["payload"]try:start_time = time.time()response = requests.post(url, headers=headers, json=payload)response_time = time.time() - start_timeprint(f"狀態碼: {response.status_code}")print(f"響應時間: {response_time:.3f}秒")try:data = response.json()# 處理不同接口的響應結構差異embedding = Noneif endpoint_name == "api/embeddings":embedding = data.get("embedding")  # 原生API返回embedding字段elif endpoint_name == "v1/embeddings":embedding = data.get("data", [{}])[0].get("embedding")  # OpenAI兼容API返回data數組中的embeddingif embedding:print(f"Embedding向量長度: {len(embedding)}")return {"endpoint": endpoint_name,"status_code": response.status_code,"response_time": response_time,"embedding_length": len(embedding),"embedding": embedding[:5],}else:print("響應中未找到'embedding'字段")return {"endpoint": endpoint_name, "status_code": response.status_code, "error": "No embedding field in response"}except ValueError:print("響應不是有效的JSON格式")return {"endpoint": endpoint_name, "status_code": response.status_code, "error": "Invalid JSON response"}except Exception as e:print(f"請求失敗: {str(e)}")return {"endpoint": endpoint_name, "error": str(e)}def compare_endpoints():"""比較兩個端點的性能"""results = []print("=" * 50)print(f"開始比較Ollama的embeddings接口,使用模型: {MODEL_NAME}")print("=" * 50)for endpoint_name, endpoint_info in ENDPOINTS.items():results.append(test_endpoint(endpoint_name, endpoint_info))print("\n" + "=" * 50)print("比較結果摘要:")print("=" * 50)successful_results = [res for res in results if "embedding_length" in res]if len(successful_results) == 2:if successful_results[0]["embedding_length"] == successful_results[1]["embedding_length"]:print(f"兩個接口返回的embedding維度相同: {successful_results[0]['embedding_length']}")else:print("兩個接口返回的embedding維度不同:")for result in successful_results:print(f"- {result['endpoint']}: {result['embedding_length']}")print("\nEmbedding前5個元素示例:")for result in successful_results:print(f"- {result['endpoint']}: {result['embedding']}")faster = min(successful_results, key=lambda x: x["response_time"])slower = max(successful_results, key=lambda x: x["response_time"])print(f"\n更快的接口: {faster['endpoint']} ({faster['response_time']:.3f}秒 vs {slower['response_time']:.3f}秒)")else:print("至少有一個接口未返回有效的embedding數據")for result in results:if "error" in result:print(f"- {result['endpoint']} 錯誤: {result['error']}")if __name__ == "__main__":compare_endpoints()

輸出結果如下:

Embedding前5個元素示例:
- api/embeddings: [-1.6793335676193237, 0.28421875834465027, -0.3738324046134949, -0.12534970045089722, 0.22841963171958923]
- v1/embeddings: [-0.0640459, 0.0108394455, -0.014257102, -0.004780547, 0.008711396]更快的接口: api/embeddings (0.078秒 vs 0.091)

結果顯示,兩個接口返回維度相同(均為1024),但結果的確存在差異,同時api/embeddings接口的速度更快。

因此,本版本在后臺解析時,對于ollama模型,調用接口調整為api/embeddings,修復前后臺不一致的問題。

雜項

1. 前臺元素精簡

此版本在前臺移除Agent文件管理,語言僅保留簡體中文繁體中文英語,界面更簡介清晰。

2. 后端代碼清理

實測發現,DeepWiki在解析代碼時,會輸出不少deepdoc代碼的細節,版本對其進行進一步解耦清理。

3. 封面優化

對后臺管理的界面圖標和前臺登陸頁的封面進行更換。

下版本計劃

下版本將繼續圍繞文件解析和交互進行優化,計劃改進點如下:

1. 聊天文件上傳

在聊天時,恢復原本的上傳文件交互按鈕,重構文件上傳處理邏輯。

2. chunk關聯圖片修改

在前臺知識庫界面,優化chunk和圖片的關聯顯示,并支持手動編輯調整關聯圖片信息。

3. 圖片輸出順序優化

問答輸出圖片時,進一步支持圖片在回答問題中進行顯示,而不是全放到末尾。

4. 關鍵詞顯性顯示

在知識庫預覽中,顯性顯示每一個chunk的自定義關鍵詞。

5. 中翻英適配

ragflow最新版提供了一個中文翻譯成英文,然后在知識庫中進行檢索的功能,但實現邏輯是通過聊天模型轉換,效率較低,考慮使用更輕量的方式進行實現。

總結

最近聽了好幾小時劉強東的采訪,當初,馬云問劉強東:“四通一達這么便宜,你為什么不用呢?”

出于多種原因,京東走上了自建物流的道路。

RagflowPlus的發展道路也非常相似,當現有的功能實現不夠好時,重構是必由選擇。

掌控算法細節,才能透過表象覺察到底層的本質原因。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84238.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84238.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84238.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【論文解讀】Toolformer: 語言模型自學使用工具

1st author: ?Timo Schick? - ?Google Scholar? paper: Toolformer: Language Models Can Teach Themselves to Use Tools | OpenReview NeurIPS 2023 oral code: lucidrains/toolformer-pytorch: Implementation of Toolformer, Language Models That Can Use Tools, by…

Spring 官方推薦構造函數注入

1. 依賴關系明確 構造函數注入可以清晰地聲明類的依賴關系,所有必需的依賴項都通過構造函數參數傳遞,使得代碼的可讀性更高。這種方式讓類的使用者能夠直觀地了解類的依賴,而不需要通過注解或反射來猜測。 2. 增強代碼健壯性 構造函數注入…

[深度學習]搭建開發平臺及Tensor基礎

一、實驗目的 1. 掌握Windows下PyTorch 深度學習環境的配置 2. 掌握一種PyTorch開發工具 3. 理解張量并掌握Tensor的常用操作(創建、調整形狀、加、減、乘、除、取絕對值、比較操作、數理統計操作 4. 掌握Tensor與Numpy的互相轉換操作 5. 掌握Tensor 的降維和…

【Zephyr 系列 14】使用 MCUboot 實現 BLE OTA 升級機制:構建安全可靠的固件分發系統

??關鍵詞:Zephyr、MCUboot、OTA 升級、BLE DFU、雙分區、Bootloader、安全固件管理 ??面向讀者:希望基于 Zephyr 為 BLE 設備加入安全 OTA 升級功能的開發者 ??預計字數:5200+ 字 ?? 前言:為什么你需要 OTA? 隨著設備部署數量增多與產品生命周期延長,遠程升級(…

App Search 和 Workplace Search 獨立產品現已棄用

作者:來自 Elastic The Search Product Team App Search 和 Workplace Search 的核心功能已集成到 Elasticsearch 和 Kibana 中。 我們宣布在 9.0 版本中棄用 App Search 和 Workplace Search。 如果你是 Elastic 的客戶,當前正在使用 App Search 和 Wo…

Spring Boot + OpenAI 構建基于RAG的智能問答系統

一、技術架構設計 1.1 系統架構圖 [前端]│▼ (HTTP/REST) [Spring Boot Controller]│▼ (Service Call) [問答處理服務層]├─? [知識庫檢索模塊] ──? [向量數據庫]└─? [OpenAI集成模塊] ──? [OpenAI API]│▼ [結果組裝與返回] 1.2 技術選型 組件技術棧版本要求…

Oracle實用參考(13)——Oracle for Linux物理DG環境搭建(2)

13.2. Oracle for Linux物理DG環境搭建 Oracle 數據庫的DataGuard技術方案,業界也稱為DG,其在數據庫高可用、容災及負載分離等方面,都有著非常廣泛的應用,對此,前面相關章節已做過較為詳盡的講解,此處不再贅述。 需要說明的是, DG方案又分為物理DG和邏輯DG,兩者的搭建…

【論文閱讀29】區間預測CIPM(2025)

這篇論文主要研究的是滑坡位移的區間預測方法,提出了一種新型的預測模型,叫做復合區間預測模型(CIPM),并以三峽庫區的白家堡滑坡為案例進行了應用和驗證。論文的核心內容和貢獻包括: 背景與問題 滑坡位移預…

Linux 文件系統底層原理筆記:磁盤結構、ext2 文件系統與軟硬鏈接解析

文章目錄 一、理解硬件1.1 磁盤、服務器、機柜、機房1.2 磁盤物理結構1.3 磁盤的存儲結構1.4 磁盤的邏輯結構1.4.1 理解過程1.4.2 真實過程 1.5 CHS && LBA地址 二、引入文件系統2.1 引入"塊"概念2.2 引入"分區"概念2.3 引入"inode"概念…

75Qt窗口_Qt窗口概覽

Qt 窗? 是通過 QMainWindow類 來實現的。 QMainWindow 是?個為??提供主窗?程序的類,繼承? QWidget 類,并且提供了?個預定義的布局。 QMainWindow 包含 ?個菜單欄(menu bar)、多個?具欄(tool bars)、多個浮動窗?&#x…

Appium+python自動化(九)- 定位元素工具

簡介 環境搭建好了,其他方面的知識也準備的差不多了,那么就開始下一步元素定位,元素定位主要介紹如何使用uiautomatorviewer,通過定位到頁面上的元素,然后進行相應的點擊等操作. 此外在介紹另一款工具:Insp…

apipost將token設置為環境變量

右上角 可以新增或者是修改當前的環境 環境變量增加一個token,云端值和本地值可以不用寫 在返回token的接口里設置后執行操作,通常是登錄的接口 右側也有方法提示 //設置環境變量 apt.environment.set("token", response.json.data.token); 在需要傳t…

【Docker 02】Docker 安裝

🌈 一、各版本的平臺支持情況 ? 1. Server 版本 Server 版本的 Docker 就只有個命令行,沒有界面。 Platformx86_64 / amd64arm64 / aarch64arm(32 - bit)s390xCentOs√√Debian√√√Fedora√√Raspbian√RHEL√SLES√Ubuntu√√√√Binaries√√√ …

青少年編程與數學 01-011 系統軟件簡介 08 Windows操作系統

青少年編程與數學 01-011 系統軟件簡介 08 Windows操作系統 1. Windows操作系統的起源與發展1.1 早期版本(1985-1995)1.2 Windows 9x系列(1995-2000)1.3 Windows NT系列(1993-2001)1.4 Windows XP及以后版…

微服務架構的性能優化:鏈路追蹤與可觀測性建設

📋 目錄 引言:微服務性能挑戰微服務架構性能瓶頸分析可觀測性體系概述鏈路追蹤技術深度解析性能監控指標體系日志聚合與分析分布式追蹤系統實現性能優化策略與實踐自動化性能調優故障診斷與根因分析最佳實踐與案例研究未來發展趨勢 引言 隨著微服務架…

ubuntu屏幕復制

在ubnuntu20中沒有辦法正常使用鏡像功能,這里提供一下復制屏幕的操作. 使用xrandr查看所有的顯示器情況 這里我發現自己的電腦沒有辦法直接設置分辨率,但是外接的顯示器可以設置,從命令行來說就是設置: xrandr --output HDMI-0 --mode 1920x1080那怎么樣才能將原生電腦屏幕換…

Android 線性布局中常見的沖突屬性總結

1. gravity vs layout_gravity 沖突原因:兩者作用對象不同,混用會導致行為異常。 區別: android:gravity:父容器的屬性,控制子元素在容器內的對齊方式。android:layout_gravity:子元素的屬性,控…

0x-4-Oracle 23 ai-sqlcl 25.1.1 獨立安裝-配置和優化

一、獨立安裝sqlcl 1. ?安裝 Java 環境? SQLcl 需要 Java 1.8.0_220 或更高版本, Oracle Linux9.6 上已經默認安裝Oracle 23ai后Java 是11 lts版本 如果java jdk安裝錯誤將遇上SQLcl困擾n多人的bug sql /nolog 錯誤:找不到或加載主類 oracle.dbto…

如何評價華為最新長焦專利技術?能否顛覆手機長焦攝影的目前限制?

擊上方關注 “終端研發部” 設為“星標”,和你一起掌握更多數據庫知識 目前透露的消息來看是3.7倍和10倍!!! 據悉,華為即將發布的Pura 80系列手機將率先采用這一革命性的專利技術。 華為的伸縮專利讓鏡頭模組學會了&qu…

基于SpringBoot實現的大創管理系統設計與實現【源碼+文檔】

基于SpringBootVue實現的大創管理系統采用前后端分離架構方式,系統設計了管理員、學生、指導老師、院系管理員兩種角色,系統實現了用戶登錄與注冊、個人中心、學生管理、指導老師管理、院系管理員管理、優秀項目管理、項目類型管理、項目信息管理、項目申…