RAGFlow
一、介绍
RAGFlow是一个完整的、开源的RAG(检索增强生成)系统。你可以把它看作一个已经搭建好的智能问答应用框架。
RAGFlow不是一个需要你从零编码的库,而是一个可以直接运行起来的服务。它内置了我们聊过的RAG的完整流程:上传文档 -> 自动解析 -> 切片 -> 调用Embedding模型生成向量 -> 存储 -> 检索 -> 调用大模型生成回答。
二、搭建一个智能问答系统
整体架构:
你的文档 (PDF/Word/PPT)
↓
[RAGFlow核心]
├─ 深度文档解析 → 保留表格/图片/格式
├─ 智能分块 → 按语义切割文档
├─ 向量化 → 调用Embedding模型
└─ 向量存储 → 存入数据库
↓
用户提问 → [检索引擎] → [你的微调模型] → 带引用的精准回答
2.1 部署RAGFlow
这里使用 Docker 方式 环境要求:
- CPU ≥ 4 cores (x86);
- RAM ≥ 16 GB;
- Disk ≥ 50 GB;
- Docker ≥ 24.0.0 & Docker Compose ≥ v2.26.1.
- gVisor: Required only if you intend to use the code executor (sandbox) feature of RAGFlow.
部署RAGFlow
# 克隆RAGFlow仓库
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/docker
# 检查并设置虚拟内存(Elasticsearch需要)
sudo sysctl -w vm.max_map_count=262144
# 启动所有服务(首次会拉取镜像,约2GB,耐心等待)
docker-compose -f docker-compose.yml up -d
# 查看启动日志
docker-compose logs -f ragflow-server
看到类似输出说明启动成功 :
ragflow-server | INFO: Application startup complete.
ragflow-server | INFO: Uvicorn running on http://0.0.0.0:80
访问RAGFlow界面: 打开浏览器访问 http://localhost(如果是远程服务器,用IP替换localhost)。
首次访问需要注册账号,输入邮箱和密码即可 。
2.2 配置Ollama模型(接入你的微调模型)
我们之前在另一篇 模型微调 ,微调的莎士比亚模型,现在让RAGFlow调用
确保Ollama正在运行 :
# 查看Ollama状态
docker ps | grep ollama
# 如果没有运行,启动它
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
在RAGFlow中配置模型: 登录RAGFlow后,点击右上角头像 → 设置 → 模型提供商:
找到 Ollama 图标,点击"添加模型"
配置连接信息:
API地址:
http://host.docker.internal:11434(Windows/Mac)或
http://172.17.0.1:11434(Linux)
添加聊天模型(你的微调模型):
模型名称:
my-shakespeare-model模型类型:Chat
添加嵌入模型(用于向量化):
模型名称:推荐
bge-m3或nomic-embed-text先在Ollama拉取:
docker exec ollama ollama pull bge-m3
设置默认模型: 在"设置默认模型"中 :
LLM 模型:选择
my-shakespeare-modelEmbedding 模型:选择
bge-m3Rerank 模型:(可选)暂时不选
2.3 创建你的第一个知识库
2.3.1 准备测试文档
创建一个测试文件 shakespeare.txt:
十四行诗 18
我能否将你比作夏日?
你比夏日更可爱温和:
狂风会吹落五月的花蕾,
夏天租赁的期限太短:
有时天堂之眼照得太热,
常常他的金色面容被遮掩;
被机遇或自然的变迁摧毁,
没有永恒的美不凋残;
但你永恒的夏天不会褪色,
不会失去你拥有的美颜,
死亡不能夸口你在他的阴影里徘徊,
当你在永恒的诗行中随时间生长:
只要人类能呼吸,眼睛能看见,
此诗将永存,并赐予你生命。
十四行诗 116
让我承认,两颗真心的结合
是阻碍不了的。爱算不得爱,
如果人家变心,它也跟着改变,
或者人家改道,它也看着消散。
哦,不!爱是永远固定的标志,
面对风暴,永远不会动摇;
它是星,指引每只漂泊的船,
价值无法估量,虽然可被丈量。
爱不受时间愚弄,即使红唇粉颊
终将在时间的镰刀下凋谢;
爱不随短暂的时光改变,
直到世界末日也依然存在。
如果这说法错了,并证明不对,
就算我从未写诗,也从未爱过。
2.3.2 创建知识库
点击顶部导航栏 知识库 → 创建知识库
填写信息:
名称:
莎士比亚诗集解析方法:选择 General(通用)
点击 保存
2.3.3 上传文档
进入刚创建的知识库
点击 上传文档 → 选择
shakespeare.txt勾选 创建时解析,点击确定
等待解析完成(可以点击刷新查看状态)
解析完成后,你可以点击文档查看分块效果,RAGFlow会自动把长文本切成适合检索的片段 。
2.4 创建智能问答应用
2.4.1 创建聊天助手
点击 聊天 → 创建聊天
填写:
名称:
莎士比亚问答助手关联知识库:勾选刚才创建的"莎士比亚诗集"
点击 保存
2.4.2 设置对话开场白(可选)
在助手设置中,可以添加系统提示词:
开场白: 你好,我是以莎士比亚风格创作的AI助手,请用诗意的语言向我提问。
2.4.3 开始对话
点击你的助手,在对话框中提问 :
“What is love?"(你的微调模型会以莎士比亚风格回答)
“Write a poem about the moon”
“十四行诗第18首的内容是什么?"(RAG会从知识库检索)
2.5 调用你的RAGFlow应用
2.5.1 获取API密钥
点击右上角头像 → API → API KEY
点击 创建新密钥,生成一个以
ragflow-开头的密钥复制保存,注意不要泄露
2.5.2 获取对话ID
进入你创建的"莎士比亚问答助手"聊天界面
从浏览器地址栏复制URL中的
dialogId- 格式类似:
http://localhost/chat/123e4567-e89b-12d3-a456-426614174000
- 格式类似:
2.5.3 PHP调用
通过Composer安装社区维护的RAGFlow PHP客户端
composer require lyhiving/ragflow-laravel
编写调用代码 如ragflow_test.php
<?php
require 'vendor/autoload.php';
use RAGFlow\Laravel\Facades\RAGFlow;
// 配置(也可以放在.env文件中)
$apiKey = 'ragflow-你的密钥'; // 替换为你的API密钥
$baseUrl = 'http://localhost/api/v1'; // 替换为你的RAGFlow地址
$dialogId = '你的dialog-id'; // 替换为你的对话ID
// 初始化客户端
$client = new \RAGFlow\Client([
'api_key' => $apiKey,
'base_uri' => $baseUrl,
]);
// 发送对话请求
$response = $client->chat()->create([
'dialog_id' => $dialogId,
'messages' => [
[
'role' => 'user',
'content' => 'What is love?'
]
],
'stream' => false
]);
// 输出回答
echo "问题:What is love?\n";
echo "回答:" . $response['choices'][0]['message']['content'] . "\n";
// 输出引用来源(RAGFlow的特色功能)
if (isset($response['citations'])) {
echo "\n引用来源:\n";
foreach ($response['citations'] as $citation) {
echo "- " . $citation['document_name'] . " (第" . $citation['chunk_id'] . "段)\n";
}
}