RAGFlow 实战:把公司文档变成会说话的知识库
很多公司都有这样的痛点:
产品手册、操作规程、合同模板、培训资料——这些文档散落在各个地方,新员工查起来要翻半天,老员工凭记忆猜,出了问题才发现”原来手册里写了”。
构建一个企业知识库的想法人人都有,但大多数 RAG 系统在实际使用中都面临同样的问题:回答质量不稳定。
常见的失败模式:
- PDF 里的表格内容被抽取成乱码
- 多页文档的上下文被错误地切断
- 图片里的文字完全被忽略
- 专业术语被匹配到不相关的文档片段
RAGFlow 专门针对这些问题做了深度优化。GitHub 74.7k Stars,它不只是简单地切片+向量搜索,而是把文档理解做得更深:布局分析、表格结构还原、视觉内容识别——最终让检索质量真正可用。
RAGFlow 的核心优势
1. 智能文档解析(Deep Document Understanding)
传统 RAG 处理 PDF:提取文字 → 按字符数切片 → 向量化。
RAGFlow 的处理方式:
- 分析 PDF 页面布局(识别标题/正文/表格/图片区域)
- 表格内容按行列结构完整保留,不会被切断
- OCR 识别扫描件中的文字
- 图表提取文字描述
2. 多种文档格式支持
PDF、Word、Excel、PowerPoint、TXT、Markdown、HTML、图片——全部支持,且格式特有的结构(如 Excel 的表格、PPT 的幻灯片结构)都能保留。
3. 智能分块策略
不是按固定字符数切片,而是按文档的语义结构切分:
- 按章节标题切分
- 表格作为整体保留
- 段落完整性优先
4. 混合检索
向量相似度检索 + 关键词检索(BM25)双路并行,再用重排模型(Reranker)做结果排序,检索准确率显著高于单一方式。
安装部署
前置要求:Docker 20.10+,16GB RAM(推荐 32GB)
“`bash
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/docker
cp .env.example .env
“`
编辑 `.env`,配置关键参数:
“`bash
LLM_FACTORY=OpenAI
OPENAI_API_KEY=sk-your-key
EMBEDDING_MODEL_NAME=text-embedding-3-small
“`
启动:
“`bash
docker compose -f docker-compose.yml up -d
“`
访问 `http://localhost:80`,默认账号:`admin` / `infiniflow`。
注意:首次启动需要下载多个 AI 模型(包含嵌入模型和 OCR 模型),大约需要 5-10 分钟和 10GB 磁盘空间。
实战:搭建员工操作手册知识库
Step 1:创建知识库
登录后点击 `Knowledge Base` → `+ Create`。
配置项:
- Name:内部操作手册
- Embedding Model:选择你配置的 Embedding 模型
- Chunk Method:推荐选 `Naive`(通用文档用这个,效果最稳定)
– 其他选项:`Book`(长文档书籍)、`Table`(Excel 为主)、`Manual`(技术手册)
Step 2:上传文档
点击 `+ Add file` 上传文档。
支持批量上传,上传后系统自动开始解析。大文档解析需要几分钟,可以在列表里看到解析进度。
解析完成后点击文档可以预览分块效果——这是 RAGFlow 非常有用的功能:你能看到每个切片的具体内容,可以手动调整不合理的切割。
Step 3:配置召回策略
在知识库设置里:
- Top K:检索时返回的最相关分块数,推荐设 5-8
- Similarity Threshold:相似度阈值,低于这个值的结果过滤掉,推荐 0.2
- Rerank Model:启用重排模型(显著提升相关性排序),推荐开启
Step 4:创建应用
点击 `Chat` → `+ Create Chat`,绑定刚才创建的知识库。
配置系统提示词:
“`
你是公司内部的操作手册助手。请基于提供的文档内容回答员工的操作咨询问题。
回答规范:
1. 回答必须基于文档内容,引用具体章节或条款
2. 如果手册中没有相关内容,明确告知”手册中未收录此内容,建议联系对应部门”
3. 操作步骤要完整列出,不能省略
4. 遇到安全相关操作,务必提醒注意事项
“`
测试提问,观察回答是否准确引用了手册内容。
进阶:通过 API 集成到现有系统
RAGFlow 提供 REST API,可以嵌入到企业内部系统(OA、钉钉、飞书机器人等)。
“`python
import requests
session_resp = requests.post(
“http://localhost/v1/api/new_conversation”,
headers={“Authorization”: “Bearer ragflow-xxx”},
json={
“user_id”: “employee_123”,
“kb_ids”: [“your-knowledge-base-id”]
}
)
conversation_id = session_resp.json()[“data”][“id”]
answer_resp = requests.post(
“http://localhost/v1/api/completion”,
headers={“Authorization”: “Bearer ragflow-xxx”},
json={
“conversation_id”: conversation_id,
“messages”: [{“role”: “user”, “content”: “员工年假怎么申请?”}],
“stream”: False
}
)
result = answer_resp.json()
print(result[“data”][“answer”])
print(“引用来源:”, [ref[“doc_name”] for ref in result[“data”][“reference”][“chunks”]])
“`
知识库维护建议
文档更新:删除旧版本文档后重新上传新版本,系统会自动重新解析和向量化。
质量监控:定期查看对话记录,找出回答质量差的问题,反查是哪个文档切片出了问题,手动修正切片或补充内容。
分库管理:不同业务域的文档建议建立独立的知识库,避免相互干扰检索结果。
结语
企业知识库的核心价值,不是「把文档搬到线上」,而是让组织的知识真正流动起来。
新员工第一天就能查到所有操作规程;老员工不用凭记忆,有依据可查;管理层不用担心关键知识只存在于少数人脑子里。
RAGFlow 解决了这件事里最难的部分——把非结构化的文档变成真正可以检索、可以引用的结构化知识。
部署建议:先用少量核心文档(10-20 份)跑通流程,验证回答质量符合预期后,再批量上传。文档质量直接决定知识库质量,上传前做好格式整理,效果差距很大。
夜雨聆风