Flowise 的 RAG 管线:文档加载、嵌入、向量存储与检索
学习目标
- 理解 Flowise RAG 管线的四个阶段:文档加载 → 分割 → 嵌入 → 存储/检索
- 掌握 Flowise 支持的 24 种向量数据库与 20+ 文档加载器的组合方式
- 学会在画布中构建完整的 RAG 检索链
前置知识
本章涉及 RAG 策略的通用原理,建议先阅读:
下文假设你已理解 RAG 通用概念(检索增强生成、向量嵌入、相似度搜索等),直接聚焦 Flowise 的具体实现。
项目实践
RAG 管线的节点组成
在 Flowise 画布中,一个完整的 RAG 管线由四类节点串联构成:
1. 文档加载器(20+ 种)
Flowise 在 nodes/documentloaders/ 目录下提供多种文档加载器:
| 类别 | 加载器 | 说明 |
|---|---|---|
| 文件 | PDF、CSV、JSON、TXT、DOCX | 本地文件解析 |
| Web | Cheerio(网页抓取)、Puppeteer(浏览器渲染) | 从 URL 加载内容 |
| API | Airtable、GitHub、Notion、Confluence | 从第三方 API 获取数据 |
| 存储 | S3、Google Drive、GitHub Repo | 从云存储加载 |
| 数据库 | SerpAPI 搜索结果、Brave 搜索 | 搜索结果作为文档源 |
2. 文本分割器
| 分割器 | 适用场景 |
|---|---|
| Recursive Character Text Splitter | 通用文本,按字符递归分割 |
| Token Text Splitter | 按 Token 数量精确分割 |
| Markdown Text Splitter | Markdown 文档,尊重标题层级 |
| Code Text Splitter | 代码文件,尊重语法结构 |
3. 向量数据库(24 种)
Flowise 在 nodes/vectorstores/ 目录下支持:
| 类别 | 向量数据库 |
|---|---|
| 云服务 | Pinecone、Milvus、Qdrant、Weaviate、Chroma、Supabase |
| 开源 | Faiss、Meilisearch、SimpleStore(内存) |
| 数据库内置 | Postgres (pgvector)、MongoDB Atlas、Elasticsearch、OpenSearch |
| Redis 系 | Redis、Upstash Redis |
| 企业 | Astra (DataStax)、Kendra (AWS)、Couchbase、Singlestore |
| 其他 | Vectara、Zep、ZepCloud |
4. 检索器
Flowise 在 nodes/retrievers/ 目录下提供:
| 检索器 | 说明 |
|---|---|
| Vector Store Retriever | 基础相似度搜索 |
| Multi Query Retriever | LLM 生成多个查询,综合结果 |
| Self Query Retriever | LLM 解析查询中的元数据过滤条件 |
| Contextual Compression Retriever | 检索后进行上下文压缩 |
| Vespa Retriever | Vespa 引擎检索 |
| LlamaIndex Retriever | 集成 LlamaIndex 的检索引擎 |
实际构建示例:PDF 知识库问答
在 Flowise 画布中连接以下节点:
- PDF 文档加载器 → 上传 PDF 文件
- Recursive Character Text Splitter →
chunkSize: 1000, chunkOverlap: 200 - OpenAI Embeddings →
model: text-embedding-3-small - Pinecone 向量存储 → 配置 API Key 和 Index Name
- Vector Store Retriever →
topK: 5, searchType: similarity - Conversational Retrieval QA Chain → 连接 LLM 和 Retriever
问题与规避
向量维度不匹配
问题:不同嵌入模型生成的向量维度不同(如 OpenAI text-embedding-3-small 是 1536 维,text-embedding-3-large 是 3072 维),与向量库索引的维度不一致会导致插入失败。
对策:
- 创建向量库索引时指定与嵌入模型匹配的维度
- 更换嵌入模型时需要重建索引
大批量文档 Upsert 内存溢出
问题:一次性将大量文档插入向量库时,嵌入模型 API 的批量请求可能导致内存溢出。
对策:
- 使用 Flowise 的 UpsertQueue(BullMQ + Redis)进行分批处理
- 配置
BATCH_SIZE环境变量控制每批文档数量
文档更新与版本控制
问题:源文档更新后,向量库中可能存在旧版本的嵌入。
对策:
- Flowise 的 Document Store 功能支持文档版本管理
- 删除旧文档后重新 Upsert
- 使用元数据(如
source,lastModified)标记文档版本
设计取舍
为什么支持 24+ 种向量数据库?
| 方案 | 优势 | 代价 |
|---|---|---|
| 只支持主流 2-3 种 | 维护成本低、代码质量高 | 用户受限 |
| 广泛支持 24+ 种 | 覆盖几乎所有使用场景 | 维护成本高、测试矩阵大 |
Flowise 选择广泛支持的策略,因为:
- 目标用户群体使用的向量库差异很大(企业用 Pinecone/Milvus,个人用 Faiss/Chroma)
- 每个向量数据库节点的代码量相对固定(配置表单 + 初始化逻辑)
- 社区贡献者可以轻松添加新的向量数据库节点
节点化 RAG vs 代码式 RAG
| 维度 | 节点化(Flowise) | 代码式(LangChain Python) |
|---|---|---|
| 构建速度 | 拖拽几分钟 | 编写代码 30+ 分钟 |
| 调试 | 逐节点查看输出 | 断点调试 |
| 自定义逻辑 | 需 CustomFunction 节点 | 直接编写代码 |
| 版本控制 | JSON diff 不直观 | Git diff 友好 |
Flowise 的节点化 RAG 适合快速原型和标准化管线。当需要高度自定义逻辑时,可通过 CustomFunction 节点注入 JavaScript 代码。