在人工智能和自然語言處理領域,檢索增強生成(RAG)技術正在迅速崛起。RAGFlow作為一個開源的RAG引擎,為開發者和企業提供了一個強大的工具,以提升AI應用的問答能力和資訊檢索精準度。本文將深入探討RAGFlow的核心功能和應用場景,幫助您了解如何利用這一創新技術打造先進的NLP解決方案。
RAGFlow: 深度文檔理解的新境界
RAGFlow的核心優勢在於其強大的深度文檔理解能力。通過結合先進的自然語言處理技術和大型語言模型,RAGFlow能夠深入解析各種複雜文檔,提取關鍵信息,並建立語義連接。這使得AI系統能夠更準確地理解和回答用戶查詢,大大提升了問答系統的性能。
知識庫管理: 智能化的資訊組織
RAGFlow提供了全面的知識庫管理功能,使得組織和更新大量資訊變得簡單高效。通過智能分類和索引技術,RAGFlow能夠自動組織和關聯不同來源的資料,建立一個結構化的知識網絡。這不僅提高了資訊檢索的效率,還為AI應用提供了豐富的背景知識,使其能夠生成更加準確和相關的回答。
大型語言模型集成: 釋放AI的潛力
RAGFlow無縫集成了多種大型語言模型,如GPT系列,使得開發者可以輕鬆利用這些強大的AI模型來增強自己的應用。通過結合RAG技術和大型語言模型,RAGFlow能夠生成更加準確、相關和富有洞察力的回答,大大提升了AI系統的表現。
RAGFlow的應用場景
RAGFlow的靈活性使其適用於多種場景:
- 智能客服系統: 利用RAGFlow的深度文檔理解能力,企業可以構建更智能的客服機器人,能夠準確回答複雜的產品和服務相關問題。
- 研究輔助工具: 研究人員可以使用RAGFlow快速分析大量學術文獻,提取關鍵信息,並生成研究摘要。
- 法律文檔分析: 法律專業人士可以利用RAGFlow深入解析複雜的法律文件,快速找到相關案例和條款。
- 個人知識管理: 個人用戶可以使用RAGFlow建立自己的知識庫,實現高效的個人信息管理和學習。
線上測試RAGFlow
RAGFlow是一款基於深度文件理解所建構的開源RAG(Retrieval-Augmented Generation)引擎。 RAGFlow 可以為各種規模的企業及個人提供一套精簡的RAG 工作流程,結合大語言模型(LLM)針對用戶各類不同的複雜格式數據提供可靠的問答以及有理有據的引用。
線上DEMO網址: https://demo.ragflow.io.
![](https://i0.wp.com/claire-chang.com/wp-content/uploads/2024/07/2024-07-24_180622.jpg?resize=980%2C589&ssl=1)
安裝方式
如需確認vm.max_map_count
的大小:
sysctl vm.max_map_count
如果vm.max_map_count
的值小於262144,可以進行重設:
# 設為 262144:
sudo sysctl -w vm.max_map_count=262144
你的改動會在下次系統重新啟動時被重置。如果希望做永久改動,還需要在/etc/sysctl.conf檔案裡把vm.max_map_count
的值再相應更新一次:
vm.max_map_count=262144
下載程式
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/docker
chmod +x ./entrypoint.sh
直接啟動會顯示不支持MACOS,且無法設定環境變數include:env_file: ./.env
因此對於內容有稍作修改,改成如下
以下為docker-compose-CN.yml
services:
ragflow:
depends_on:
mysql:
condition: service_healthy
es01:
condition: service_healthy
image: swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:${RAGFLOW_VERSION}
container_name: ragflow-server
ports:
- ${SVR_HTTP_PORT}:9380
- 80:80
- 443:443
volumes:
- ./service_conf.yaml:/ragflow/conf/service_conf.yaml
- ./ragflow-logs:/ragflow/logs
- ./nginx/ragflow.conf:/etc/nginx/conf.d/ragflow.conf
- ./nginx/proxy.conf:/etc/nginx/proxy.conf
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
environment:
- MINIO_CONSOLE_PORT=9001
- MINIO_PORT=9000
- MINIO_USER=rag_flow
- MINIO_PASSWORD=infini_rag_flow
- REDIS_PORT=6379
- REDIS_PASSWORD=infini_rag_flow
- SVR_HTTP_PORT=9380
- RAGFLOW_VERSION=dev
- MEM_LIMIT=8073741824
- KIBANA_PORT=6601
- ELASTIC_PASSWORD=infini_rag_flow
- STACK_VERSION=8.11.3
- ES_PORT=1200
- MYSQL_PASSWORD=infini_rag_flow
- MYSQL_PORT=5455
- TZ='Asia/Shanghai'
- HF_ENDPOINT=https://hf-mirror.com
networks:
- ragflow
network_mode: host
restart: always
以下為docker-compose-base.yml
services:
es01:
container_name: ragflow-es-01
image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
volumes:
- esdata01:/usr/share/elasticsearch/data
ports:
- ${ES_PORT}:9200
environment:
- MINIO_CONSOLE_PORT=9001
- MINIO_PORT=9000
- MINIO_USER=rag_flow
- MINIO_PASSWORD=infini_rag_flow
- REDIS_PORT=6378
- REDIS_PASSWORD=infini_rag_flow
- SVR_HTTP_PORT=9380
- RAGFLOW_VERSION=dev
- TIMEZONE=Asia/Shanghai
- MEM_LIMIT=8073741824
- KIBANA_PORT=6601
- ELASTIC_PASSWORD=infini_rag_flow
- STACK_VERSION=8.11.3
- ES_PORT=1200
- MYSQL_PASSWORD=infini_rag_flow
- MYSQL_PORT=5455
- node.name=es01
- bootstrap.memory_lock=false
- discovery.type=single-node
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=false
- xpack.security.transport.ssl.enabled=false
- TZ=${TIMEZONE}
mem_limit: ${MEM_LIMIT}
ulimits:
memlock:
soft: -1
hard: -1
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:9200"]
interval: 10s
timeout: 10s
retries: 120
networks:
- ragflow
network_mode: host
restart: always
mysql:
image: mysql:5.7.18
container_name: ragflow-mysql
environment:
- MINIO_CONSOLE_PORT=9001
- MINIO_PORT=9000
- MINIO_USER=rag_flow
- MINIO_PASSWORD=infini_rag_flow
- REDIS_PORT=6378
- REDIS_PASSWORD=infini_rag_flow
- SVR_HTTP_PORT=9380
- RAGFLOW_VERSION=dev
- TIMEZONE=Asia/Shanghai
- MEM_LIMIT=8073741824
- KIBANA_PORT=6601
- ELASTIC_PASSWORD=infini_rag_flow
- STACK_VERSION=8.11.3
- ES_PORT=1200
- MYSQL_PASSWORD=infini_rag_flow
- MYSQL_PORT=5455
- MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD}
- TZ=${TIMEZONE}
command:
--max_connections=1000
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--default-authentication-plugin=mysql_native_password
--tls_version="TLSv1.2,TLSv1.3"
--init-file /data/application/init.sql
ports:
- ${MYSQL_PORT}:3306
volumes:
- mysql_data:/var/lib/mysql
- ./init.sql:/data/application/init.sql
networks:
- ragflow
network_mode: host
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-uroot", "-p${MYSQL_PASSWORD}"]
interval: 10s
timeout: 10s
retries: 3
restart: always
minio:
image: quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z
container_name: ragflow-minio
command: server --console-address ":9001" /data
ports:
- ${MINIO_PORT}:9000
- ${MINIO_CONSOLE_PORT}:9001
environment:
- MINIO_CONSOLE_PORT=9001
- MINIO_PORT=9000
- MINIO_USER=rag_flow
- MINIO_PASSWORD=infini_rag_flow
- REDIS_PORT=6378
- REDIS_PASSWORD=infini_rag_flow
- SVR_HTTP_PORT=9380
- RAGFLOW_VERSION=dev
- TIMEZONE=Asia/Shanghai
- MEM_LIMIT=8073741824
- KIBANA_PORT=6601
- ELASTIC_PASSWORD=infini_rag_flow
- STACK_VERSION=8.11.3
- ES_PORT=1200
- MYSQL_PASSWORD=infini_rag_flow
- MYSQL_PORT=5455
- MINIO_ROOT_USER=${MINIO_USER}
- MINIO_ROOT_PASSWORD=${MINIO_PASSWORD}
- TZ=${TIMEZONE}
volumes:
- minio_data:/data
networks:
- ragflow
network_mode: host
restart: always
redis:
image: redis:7.2.4
container_name: ragflow-redis
command: redis-server --requirepass ${REDIS_PASSWORD} --maxmemory 128mb --maxmemory-policy allkeys-lru
ports:
- 6379:6379
volumes:
- redis_data:/data
networks:
- ragflow
network_mode: host
restart: always
volumes:
esdata01:
driver: local
mysql_data:
driver: local
minio_data:
driver: local
redis_data:
driver: local
networks:
ragflow:
driver: bridge
同時啟動兩個docker-compose
docker-compose -f docker-compose-base.yml -f docker-compose-CN.yml up -d
可看到啟動成功
![](https://i0.wp.com/claire-chang.com/wp-content/uploads/2024/07/2024-07-24_181746.jpg?resize=980%2C575&ssl=1)
接著打開127.0.0.1就可以創建帳號並登入了
![](https://i0.wp.com/claire-chang.com/wp-content/uploads/2024/07/2024-07-24_185608.jpg?resize=980%2C604&ssl=1)