RAGFlow
是一種融合了數據檢索與生成式模型的新型系統架構,其核心思想在于將大規模檢索系統與先進的生成式模型(如Transformer、GPT系列)相結合,從而在回答查詢時既能利用海量數據的知識庫,又能生成符合上下文語義的自然語言回復。該系統主要包含兩個關鍵模塊:數據檢索模塊和生成模塊。數據檢索模塊負責在海量數據中快速定位相關信息,而生成模塊則基于檢索結果生成高質量的回答或文本內容。
在實際應用中,RAGFlow能夠在客戶服務、問答系統、智能搜索、內容推薦等領域發揮重要作用,通過檢索與生成的雙重保障,顯著提升系統的響應速度和準確性。
RAGFlow安裝
項目地址:https://github.com/infiniflow/ragflow
wsl安裝
安裝 WSL文檔: https://learn.microsoft.com/zh-cn/windows/wsl/install
WSL基本命令:https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands
1、管理員權限打開powershell命令
#啟動wsl子系統
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux
/all /norestart
#啟用虛擬機平臺支持
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all
/norestart
#設置wsl2
wsl --set-default-version 2
也可以手動選擇:
RAGFlow最終完成版安裝步驟
采用docker安裝,沒有的需要安裝下:https://blog.csdn.net/YXWik/article/details/128254108
ragflow項目地址:https://github.com/infiniflow/ragflow
下載項目
解壓
修改修改鏡像為國內鏡像 F:\ragflow-main\docker
文件夾下的 .env
文件中的RAGFLOW_IMAGE
RAGFLOW_IMAGE=docker-0.unsee.tech/infiniflow/ragflow:v0.17.0
在.env文件中,使用鏡像地址就行:HF_ENDPOINT=https://hf-mirror.com
docker-compose-base.yml
配置更改如下
redis:image: valkey/valkey:8container_name: ragflow-redisentrypoint: ["redis-server", "--requirepass", "${REDIS_PASSWORD}", "--maxmemory", "128mb", "--maxmemory-policy", "allkeys-lru"]env_file: .envports:- ${REDIS_PORT}:6379volumes:- redis_data:/datanetworks:- ragflowrestart: on-failure
更換鏡像:
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"debug": true,"experimental": true,"insecure-registries": [],"registry-mirrors": ["https://docker-0.unsee.tech","https://docker-cf.registry.cyou","https://docker.1panel.live"]
}
在 F:\ragflow-main\docker
目錄下打開cmd命令窗口
docker compose -f docker-compose.yml up -d
RAGFlow安裝(每一步的踩坑記錄)
采用docker安裝,沒有的需要安裝下:https://blog.csdn.net/YXWik/article/details/128254108
ragflow項目地址:https://github.com/infiniflow/ragflow
下載項目
解壓
修改修改鏡像為國內鏡像 F:\ragflow-main\docker
文件夾下的 .env
文件中的RAGFLOW_IMAGE
RAGFLOW_IMAGE=docker-0.unsee.tech/infiniflow/ragflow:v0.17.0
在 F:\ragflow-main\docker
目錄下打開cmd命令窗口
下載項目的依賴鏡像和環境
docker compose -f docker-compose.yml up -d
遇到如下報錯
更換鏡像:
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"debug": true,"experimental": true,"insecure-registries": [],"registry-mirrors": ["https://docker-0.unsee.tech","https://docker-cf.registry.cyou","https://docker.1panel.live"]
}
重新下載項目的依賴鏡像和環境
docker compose -f docker-compose.yml up -d
安裝并啟動成功后查看 RAGFlow
訪問路徑
按照提示注冊登錄即可
注冊報錯network abnormal
或 網絡異常 ,因為 RAGFlow
可能并未完全啟動成功。
docker中卸載了重新安裝
再次啟動發現報錯WARNING:root:RedisDB.queue_info rag_flow_svr_queue got exception: no such key
我們看上面的日志 發現 redis
連接的庫是 1
庫,一會直連redis,查看1庫的中 rag_flow_svr_queue
key的情況
先在.env
中找到redis
的密碼
infini_rag_flow
查看docker中運行的服務
docker ps
進入redis容器
docker exec -it ragflow-redis bash
檢查是否存在rag_flow_svr_queue
的key,infini_rag_flow
為上面查到的redis密碼
redis-cli -h redis -p 6379 -n 1 -a infini_rag_flow EXISTS rag_flow_svr_queue
這里的 -n 1
代表的 1
庫
不存在,咱們創建 rag_flow_svr_queue
的key,默認給個空字符串(先別著急執行后續的這些命令,問題不在redis初始化的key上,往下面看
)
redis-cli -h redis -p 6379 -n 1 -a infini_rag_flow RPUSH rag_flow_svr_queue ""
exit退出
再次查看日志
docker logs -f ragflow-server
報錯變成了:
WARNING:root:RedisDB.queue_info rag_flow_svr_queue got exception: WRONGTYPE Operation against a key holding the wrong kind of value
這意思是說 我們 rag_flow_svr_queue 對應的value的類型不正確,我們當時設置的是字符串類型
查找源碼,找到rag_flow_svr_queue
,發現需要的是list類型
連接redis 刪除rag_flow_svr_queue
docker exec -it ragflow-redis bash
刪除
redis-cli -h redis -p 6379 -n 1 -a infini_rag_flow DEL rag_flow_svr_queue
新增 rag_flow_svr_queue 的key,將 value設置為空list
redis-cli -h 127.0.0.1 -p 6379 -a infini_rag_flow -n 1 RPUSH rag_flow_svr_queue ""
退出:exit
查看日志 docker logs -f ragflow-server
報錯: WARNING:root:RedisDB.queue_info rag_flow_svr_queue got exception: WRONGTYPE Operation against a key holding the wrong kind of value
去官網看看有啥解決方案:https://github.com/infiniflow/ragflow
看了好幾個 issues 發現都有這個key不存在報錯
這個評論說不帶端口運行
再次訪問http://localhost/ 進行注冊發現成功了 ,盲猜一波最初注冊報錯是不是因為項目啟動加載過慢導致了,稍微等等就可以了,還是因為我初始化了redis的key解決了,雖然出現了另一個報錯,但是看起來并不影響
建立知識庫
我這邊本地使用的ollama,配置的千問模型:https://blog.csdn.net/YXWik/article/details/143871588
默認的ollama是這個端口
http://127.0.0.1:11434
ollama是windows的docker啟動,則使用
http://host.docker.internal:11434/
查看ollama安裝的模型
ollama list
添加模型
報錯:Fail to access model(qwen2.5:7b).**ERROR**: [Errno 111] Connection refused
RAG訪問容器內的11434端口造成的訪問失敗
更改為以下:
http://host.docker.internal:11434/
點擊系統模型設置配置聊天模型
創建知識庫
上傳知識庫文件
設置解析規則
這里在解析狀態后面有個綠色的開始鍵點擊開始解析
雖有redis的報錯,但是稍等一下會開始解析,并沒有什么影響
如果解析進度一直不動,是因為部署環境因為網絡無法訪問 huggingface.co ,導致本地模型無法下載
解決方案要么開啟科學上網,要么設置代理
設置代理:在.env文件中,使用鏡像地址就行:HF_ENDPOINT=https://hf-mirror.com
然后刪除任務重啟Docker
重啟Docker后ragflow卡住了,將ragflow進行一個重啟
重啟之后開始重新解析我發現它還卡在這個位置,我就去redis中查找相關的key,發現redis中一個key也沒有,但是redis的狀態是啟動的
查看日志我發現ragflow一直連接不上redis
我發現一個問題,我用redis客戶端工具連接redis時發現不輸入密碼可以連接成功,但是ragflow配置文件中設置的redis密碼是infini_rag_flow
Docker 容器的服務的配置中設置是有相關初始化配置的,但很顯然這個配置沒有生效
連接redis,查看器配置文件
docker ps
docker exec -it ragflow-redis /bin/bash
檢查 Redis 是否正在運行:
pidof redis-server
查看 Redis 啟動參數:
cat /proc/1/cmdline | tr '\0' ' '
以上截圖表明 Redis 是以默認方式啟動的,并未包含 --requirepass 參數。因此,Redis 沒有啟用密碼驗證,但我們查看啟動配置文件時發現時有配置密碼的。
命令查看,或者在Docker中查看
docker inspect ragflow-redis
既然配置文件沒有問題,那下一步我們排查它的啟動腳本 docker-entrypoint.sh
在redis的Docker容器中查看entrypoint.sh
cat /usr/local/bin/docker-entrypoint.sh
從 docker-entrypoint.sh
腳本的內容來看,問題的根本原因已經明確:腳本默認啟動的是 valkey-server
,而不是 redis-server
。因此,即使在啟動容器時傳遞了 redis-server
和相關參數(如 --requirepass
),這些參數也被腳本忽略了。
怎么處理呢,找到 docker-compose-base.yml
配置文件,覆蓋入口腳本來強制使用 redis-server
,而不是 valkey-server
,在配置文件中找到redis的啟動命令和參數配置進行更改
redis:image: valkey/valkey:8container_name: ragflow-redisentrypoint: ["redis-server", "--requirepass", "${REDIS_PASSWORD}", "--maxmemory", "128mb", "--maxmemory-policy", "allkeys-lru"]env_file: .envports:- ${REDIS_PORT}:6379volumes:- redis_data:/datanetworks:- ragflowrestart: on-failure
改完之后刪除
docker stop ragflow-redis
docker rm ragflow-redis
docker volume rm docker_redis_data
docker compose -f docker-compose.yml up -d
重啟之后再進入redis 進行查看
docker exec -it ragflow-redis redis-cli
AUTH infini_rag_flow
SELECT 1
keys *
如果存在key將其刪除
del task_consumer_0
回到頁面將原數據集刪除后,重新添加并點擊解析,發現報錯沒了
稍等一會兒解析成功
配置助理
選擇知識庫
測試
ragflow官網的給出一些常見問題的解決方案:https://ragflow.io/docs/dev/faq#issues-with-ragflow-backend-services