Quick start
RAGFlow is an open-source RAG (Retrieval-Augmented Generation) engine based on deep document understanding. When integrated with LLMs, it is capable of providing truthful question-answering capabilities, backed by well-founded citations from various complex formatted data.
This quick start guide describes a general process from:
- Starting up a local RAGFlow server,
- Creating a knowledge base,
- Intervening with file parsing, to
- Establishing an AI chat based on your datasets.
Prerequisites
-
CPU ≥ 4 cores;
-
RAM ≥ 16 GB;
-
Disk ≥ 50 GB;
-
Docker ≥ 24.0.0 & Docker Compose ≥ v2.26.1.
If you have not installed Docker on your local machine (Windows, Mac, or Linux), see Install Docker Engine.
Start up the server
This section provides instructions on setting up the RAGFlow server on Linux. If you are on a different operating system, no worries. Most steps are alike.
1. Ensure vm.max_map_count
≥ 262144:
vm.max_map_count
. This value sets the maximum number of memory map areas a process may have. Its default value is 65530. While most applications require fewer than a thousand maps, reducing this value can result in abmornal behaviors, and the system will throw out-of-memory errors when a process reaches the limitation.
RAGFlow v0.12.0 uses Elasticsearch for multiple recall. Setting the value of vm.max_map_count
correctly is crucial to the proper functioning of the Elasticsearch component.
- Linux
- macOS
- Windows
1.1. Check the value of vm.max_map_count
:
$ sysctl vm.max_map_count
1.2. Reset vm.max_map_count
to a value at least 262144 if it is not.
$ sudo sysctl -w vm.max_map_count=262144
This change will be reset after a system reboot. If you forget to update the value the next time you start up the server, you may get a Can't connect to ES cluster
exception.
1.3. To ensure your change remains permanent, add or update the vm.max_map_count
value in /etc/sysctl.conf accordingly:
vm.max_map_count=262144
If you are on macOS with Docker Desktop, run the following command to update vm.max_map_count
:
docker run --rm --privileged --pid=host alpine sysctl -w vm.max_map_count=262144
This change will be reset after a system reboot. If you forget to update the value the next time you start up the server, you may get a Can't connect to ES cluster
exception.
To make your change persistent, create a file with proper settings:
1.1. Create a file:
sudo nano /Library/LaunchDaemons/com.user.vmmaxmap.plist
1.2. Open the file:
sudo launchctl load /Library/LaunchDaemons/com.user.vmmaxmap.plist
1.3. Add settings:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.vmmaxmap</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/sysctl</string>
<string>-w</string>
<string>vm.max_map_count=262144</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
1.4. After saving the file, load the new daemon:
sudo launchctl load /Library/LaunchDaemons/com.user.vmmaxmap.plist
If the above steps do not work, consider using this workaround, which employs a container and does not require manual editing of the macOS settings.
If you are on Windows with Docker Desktop, then you must use docker-machine to set vm.max_map_count
:
$ docker-machine ssh
$ sudo sysctl -w vm.max_map_count=262144
If you are on Windows with Docker Desktop WSL 2 backend, then use docker-desktop to set vm.max_map_count
:
1.1. Run the following in WSL:
$ wsl -d docker-desktop -u root
$ sysctl -w vm.max_map_count=262144
This change will be reset after you restart Docker. If you forget to update the value the next time you start up the server, you may get a Can't connect to ES cluster
exception.
1.2. If you do not wish to have to run those commands each time you restart Docker, you can update your %USERPROFILE%.wslconfig
as follows to keep your change permanent and globally for all WSL distributions:
[wsl2]
kernelCommandLine = "sysctl.vm.max_map_count=262144"
This causes all WSL2 virtual machines to have that setting assigned when they start.
If you are on Windows 11 or Windows 10 version 22H2, and have installed the Microsoft Store version of WSL, you can also update the /etc/sysctl.conf within the docker-desktop WSL distribution to keep your change permanent:
$ wsl -d docker-desktop -u root
$ vi /etc/sysctl.conf
# Append a line, which reads:
vm.max_map_count = 262144
-
Clone the repo:
$ git clone https://github.com/infiniflow/ragflow.git
-
Build the pre-built Docker images and start up the server:
Running the following commands automatically downloads the dev version RAGFlow Docker image. To download and run a specified Docker version, update
RAGFLOW_IMAGE
in docker/.env to the intended version, for exampleRAGFLOW_IMAGE=infiniflow/ragflow:v0.12.0
, before running the following commands.$ cd ragflow/docker
$ chmod +x ./entrypoint.sh
$ docker compose up -d
The core image is about 9 GB in size and may take a while to load.
-
Check the server status after having the server up and running:
$ docker logs -f ragflow-server
The following output confirms a successful launch of the system:
____ ___ ______ ______ __
/ __ \ / | / ____// ____// /____ _ __
/ /_/ // /| | / / __ / /_ / // __ \| | /| / /
/ _, _// ___ |/ /_/ // __/ / // /_/ /| |/ |/ /
/_/ |_|/_/ |_|\____//_/ /_/ \____/ |__/|__/
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:9380
* Running on http://x.x.x.x:9380
INFO:werkzeug:Press CTRL+C to quitIf you skip this confirmation step and directly log in to RAGFlow, your browser may prompt a
network anomaly
error because, at that moment, your RAGFlow may not be fully initialized. -
In your web browser, enter the IP address of your server and log in to RAGFlow.
With the default settings, you only need to enter http://IP_OF_YOUR_MACHINE
(sans port number) as the default HTTP serving port 80
can be omitted when using the default configurations.
Configure LLMs
RAGFlow is a RAG engine, and it needs to work with an LLM to offer grounded, hallucination-free question-answering capabilities. For now, RAGFlow supports the following LLMs, and the list is expanding:
- OpenAI
- Azure-OpenAI
- Gemini
- Groq
- Mistral
- Bedrock
- Tongyi-Qianwen
- ZHIPU-AI
- MiniMax
- Moonshot
- DeepSeek
- Baichuan
- VolcEngine
- Jina
- OpenRouter
- StepFun
RAGFlow also supports deploying LLMs locally using Ollama, Xinference, or LocalAI, but this part is not covered in this quick start guide.
To add and configure an LLM:
-
Click on your logo on the top right of the page > Model Providers:
Each RAGFlow account is able to use text-embedding-v2 for free, an embedding model of Tongyi-Qianwen. This is why you can see Tongyi-Qianwen in the Added models list. And you may need to update your Tongyi-Qianwen API key at a later point.
-
Click on the desired LLM and update the API key accordingly (DeepSeek-V2 in this case):
Your added models appear as follows:
-
Click System Model Settings to select the default models:
- Chat model,
- Embedding model,
- Image-to-text model.
Some models, such as the image-to-text model qwen-vl-max, are subsidiary to a specific LLM. And you may need to update your API key to access these models.
Create your first knowledge base
You are allowed to upload files to a knowledge base in RAGFlow and parse them into datasets. A knowledge base is virtually a collection of datasets. Question answering in RAGFlow can be based on a particular knowledge base or multiple knowledge bases. File formats that RAGFlow supports include documents (PDF, DOC, DOCX, TXT, MD), tables (CSV, XLSX, XLS), pictures (JPEG, JPG, PNG, TIF, GIF), and slides (PPT, PPTX).
To create your first knowledge base:
-
Click the Knowledge Base tab in the top middle of the page > Create knowledge base.
-
Input the name of your knowledge base and click OK to confirm your changes.
You are taken to the Configuration page of your knowledge base.
-
RAGFlow offers multiple chunk templates that cater to different document layouts and file formats. Select the embedding model and chunk method (template) for your knowledge base.
Once you have selected an embedding model and used it to parse a file, you are no longer allowed to change it. The obvious reason is that we must ensure that all files in a specific knowledge base are parsed using the same embedding model (ensure that they are being compared in the same embedding space).
You are taken to the Dataset page of your knowledge base.
-
Click + Add file > Local files to start uploading a particular file to the knowledge base.
-
In the uploaded file entry, click the play button to start file parsing:
When the file parsing completes, its parsing status changes to SUCCESS.
Intervene with file parsing
RAGFlow features visibility and explainability, allowing you to view the chunking results and intervene where necessary. To do so:
-
Click on the file that completes file parsing to view the chunking results:
You are taken to the Chunk page:
-
Hover over each snapshot for a quick view of each chunk.
-
Double click the chunked texts to add keywords or make manual changes where necessary:
You can add keywords to a file chunk to increase its relevance. This action increases its keyword weight and can improve its position in search list.
-
In Retrieval testing, ask a quick question in Test text to double check if your configurations work:
As you can tell from the following, RAGFlow responds with truthful citations.
Set up an AI chat
Conversations in RAGFlow are based on a particular knowledge base or multiple knowledge bases. Once you have created your knowledge base and finished file parsing, you can go ahead and start an AI conversation.
-
Click the Chat tab in the middle top of the mage > Create an assistant to show the Chat Configuration dialogue of your next dialogue.
RAGFlow offer the flexibility of choosing a different chat model for each dialogue, while allowing you to set the default models in System Model Settings.
-
Update Assistant Setting:
- Name your assistant and specify your knowledge bases.
- Empty response:
- If you wish to confine RAGFlow's answers to your knowledge bases, leave a response here. Then when it doesn't retrieve an answer, it uniformly responds with what you set here.
- If you wish RAGFlow to improvise when it doesn't retrieve an answer from your knowledge bases, leave it blank, which may give rise to hallucinations.
-
Update Prompt Engine or leave it as is for the beginning.
-
Update Model Setting.
-
RAGFlow also offers conversation APIs. Hover over your dialogue > Chat Bot API to integrate RAGFlow's chat capabilities into your applications:
-
Now, let's start the show: