按 Enter 键跳转到正文

RAGFlow

RAGFlow

一、介绍

RAGFlow是一个完整的、开源的RAG(检索增强生成)系统。你可以把它看作一个已经搭建好的智能问答应用框架。

RAGFlow不是一个需要你从零编码的库,而是一个可以直接运行起来的服务。它内置了我们聊过的RAG的完整流程:上传文档 -> 自动解析 -> 切片 -> 调用Embedding模型生成向量 -> 存储 -> 检索 -> 调用大模型生成回答。

RAGFlow 官网

二、搭建一个智能问答系统

整体架构:

1你的文档 (PDF/Word/PPT) 
23[RAGFlow核心] 
4    ├─ 深度文档解析 → 保留表格/图片/格式
5    ├─ 智能分块 → 按语义切割文档
6    ├─ 向量化 → 调用Embedding模型
7    └─ 向量存储 → 存入数据库
89用户提问 → [检索引擎] → [你的微调模型] → 带引用的精准回答

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-m3nomic-embed-text

    • 先在Ollama拉取:docker exec ollama ollama pull bge-m3

设置默认模型: 在"设置默认模型"中 :

  • LLM 模型:选择 my-shakespeare-model

  • Embedding 模型:选择 bge-m3

  • Rerank 模型:(可选)暂时不选

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密钥

  • 点击右上角头像 → APIAPI 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}

发表评论