RAGFlow
RAGFlow
一、介绍
RAGFlow是一个完整的、开源的RAG(检索增强生成)系统。你可以把它看作一个已经搭建好的智能问答应用框架。
RAGFlow不是一个需要你从零编码的库,而是一个可以直接运行起来的服务。它内置了我们聊过的RAG的完整流程:上传文档 -> 自动解析 -> 切片 -> 调用Embedding模型生成向量 -> 存储 -> 检索 -> 调用大模型生成回答。
二、搭建一个智能问答系统
整体架构:
1你的文档 (PDF/Word/PPT)
2 ↓
3[RAGFlow核心]
4 ├─ 深度文档解析 → 保留表格/图片/格式
5 ├─ 智能分块 → 按语义切割文档
6 ├─ 向量化 → 调用Embedding模型
7 └─ 向量存储 → 存入数据库
8 ↓
9用户提问 → [检索引擎] → [你的微调模型] → 带引用的精准回答
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
1# 克隆RAGFlow仓库
2git clone https://github.com/infiniflow/ragflow.git
3cd ragflow/docker
4
5# 检查并设置虚拟内存(Elasticsearch需要)
6sudo sysctl -w vm.max_map_count=262144
7
8# 启动所有服务(首次会拉取镜像,约2GB,耐心等待)
9docker-compose -f docker-compose.yml up -d
10
11# 查看启动日志
12docker-compose logs -f ragflow-server
看到类似输出说明启动成功 :
1ragflow-server | INFO: Application startup complete.
2ragflow-server | INFO: Uvicorn running on http://0.0.0.0:80
访问RAGFlow界面: 打开浏览器访问 http://localhost(如果是远程服务器,用IP替换localhost)。
首次访问需要注册账号,输入邮箱和密码即可 。
2.2 配置Ollama模型(接入你的微调模型)
我们之前在另一篇 模型微调 ,微调的莎士比亚模型,现在让RAGFlow调用
确保Ollama正在运行 :
1# 查看Ollama状态
2docker ps | grep ollama
3
4# 如果没有运行,启动它
5docker 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:
1十四行诗 18
2我能否将你比作夏日?
3你比夏日更可爱温和:
4狂风会吹落五月的花蕾,
5夏天租赁的期限太短:
6有时天堂之眼照得太热,
7常常他的金色面容被遮掩;
8被机遇或自然的变迁摧毁,
9没有永恒的美不凋残;
10但你永恒的夏天不会褪色,
11不会失去你拥有的美颜,
12死亡不能夸口你在他的阴影里徘徊,
13当你在永恒的诗行中随时间生长:
14只要人类能呼吸,眼睛能看见,
15此诗将永存,并赐予你生命。
16
17十四行诗 116
18让我承认,两颗真心的结合
19是阻碍不了的。爱算不得爱,
20如果人家变心,它也跟着改变,
21或者人家改道,它也看着消散。
22哦,不!爱是永远固定的标志,
23面对风暴,永远不会动摇;
24它是星,指引每只漂泊的船,
25价值无法估量,虽然可被丈量。
26爱不受时间愚弄,即使红唇粉颊
27终将在时间的镰刀下凋谢;
28爱不随短暂的时光改变,
29直到世界末日也依然存在。
30如果这说法错了,并证明不对,
31就算我从未写诗,也从未爱过。
2.3.2 创建知识库
点击顶部导航栏 知识库 → 创建知识库
填写信息:
名称:
莎士比亚诗集解析方法:选择 General(通用)
点击 保存
2.3.3 上传文档
进入刚创建的知识库
点击 上传文档 → 选择
shakespeare.txt勾选 创建时解析,点击确定
等待解析完成(可以点击刷新查看状态)
解析完成后,你可以点击文档查看分块效果,RAGFlow会自动把长文本切成适合检索的片段 。
2.4 创建智能问答应用
2.4.1 创建聊天助手
点击 聊天 → 创建聊天
填写:
名称:
莎士比亚问答助手关联知识库:勾选刚才创建的"莎士比亚诗集"
点击 保存
2.4.2 设置对话开场白(可选)
在助手设置中,可以添加系统提示词:
1开场白: 你好,我是以莎士比亚风格创作的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客户端
1composer require lyhiving/ragflow-laravel
编写调用代码 如ragflow_test.php
1<?php
2
3require 'vendor/autoload.php';
4
5use RAGFlow\Laravel\Facades\RAGFlow;
6
7// 配置(也可以放在.env文件中)
8$apiKey = 'ragflow-你的密钥'; // 替换为你的API密钥
9$baseUrl = 'http://localhost/api/v1'; // 替换为你的RAGFlow地址
10$dialogId = '你的dialog-id'; // 替换为你的对话ID
11
12// 初始化客户端
13$client = new \RAGFlow\Client([
14 'api_key' => $apiKey,
15 'base_uri' => $baseUrl,
16]);
17
18// 发送对话请求
19$response = $client->chat()->create([
20 'dialog_id' => $dialogId,
21 'messages' => [
22 [
23 'role' => 'user',
24 'content' => 'What is love?'
25 ]
26 ],
27 'stream' => false
28]);
29
30// 输出回答
31echo "问题:What is love?\n";
32echo "回答:" . $response['choices'][0]['message']['content'] . "\n";
33
34// 输出引用来源(RAGFlow的特色功能)
35if (isset($response['citations'])) {
36 echo "\n引用来源:\n";
37 foreach ($response['citations'] as $citation) {
38 echo "- " . $citation['document_name'] . " (第" . $citation['chunk_id'] . "段)\n";
39 }
40}
发表评论