跳转至

第六章:知识库 RAG

检索增强生成(RAG)是让 AI 基于特定知识回答的关键技术。本章介绍 Dify 的知识库功能。

什么是 RAG?

RAG(Retrieval-Augmented Generation)是一种结合检索和生成的技术:

用户问题 → 向量检索 → 找到相关文档 → 结合文档生成回答

为什么需要 RAG?

问题 RAG 解决方案
AI 知识过时 更新知识库即可
AI 不知道企业内部信息 上传内部文档
AI 会编造答案 基于文档回答,可溯源
需要专业领域知识 上传专业资料

创建知识库

步骤一:上传文档

  1. 进入 知识库 → 创建知识库
  2. 选择文档来源:
  3. 上传文件
  4. 网页抓取
  5. Notion 同步
  6. API 导入

支持格式: - 文本文件:TXT, MD, PDF, DOCX - 网页:URL - 结构化数据:CSV, Excel

步骤二:文档处理

Dify 自动处理文档:

原始文档 → 文本提取 → 分段 → 向量化 → 存储

分段策略

策略 说明 适用场景
自动分段 智能识别段落边界 通用文档
自定义分段 按指定分隔符切分 结构化文档
按段落 每段一个分段 文章、博客
按字符数 固定长度切分 长文档

分段参数

分段长度: 500-1000 字符
分段重叠: 50-100 字符
# 重叠可以避免关键信息被切断

步骤三:索引设置

选择向量数据库:

数据库 特点
Weaviate 默认,功能全面
Qdrant 高性能,支持过滤
Milvus 大规模场景
Chroma 轻量级,适合开发

选择 Embedding 模型:

模型 特点
OpenAI text-embedding-3 效果好,需付费
通义千问 Embedding 中文效果好
本地模型 免费,隐私保护

知识库配置详解

检索模式

Dify 支持三种检索模式:

1. 向量检索

原理: 将问题转为向量,找最相似的文档分段
优点: 语义理解能力强
缺点: 可能遗漏精确匹配
适用: 语义化问题

2. 全文检索

原理: 传统关键词搜索
优点: 精确匹配
缺点: 缺乏语义理解
适用: 精确查找

3. 混合检索

原理: 结合向量检索和全文检索
优点: 兼顾语义和精确
缺点: 计算量稍大
适用: 大多数场景(推荐)

Top K 设置

Top K: 3-5
# 返回最相关的 K 个分段
# 太少可能遗漏信息
# 太多可能引入噪音

相似度阈值

Score 阈值: 0.5-0.7
# 只返回相似度高于阈值的结果
# 过滤不相关内容

重排序(Rerank)

开启重排序可以提升检索质量:

Rerank 模型: cohere-rerank 或 bge-rerank
流程: 检索 → 重排序 → 返回最优结果

在应用中使用知识库

聊天助手关联知识库

  1. 进入应用编排页面
  2. 在「上下文」部分点击「添加」
  3. 选择知识库
  4. 配置检索参数

提示词中引用知识库

你是一个专业的客服助手。

请根据以下参考资料回答用户问题:

{{#knowledge#}}

如果参考资料中没有相关信息,请诚实告知。

用户问题:{{query}}

工作流中使用知识检索

在工作流中添加「知识检索」节点:

开始(问题) → [知识检索] → [LLM生成回答] → 结束

配置知识检索节点:

知识库: 选择知识库
查询变量: {{query}}
返回数量: 3
输出变量: retrieval_result

知识库管理

文档管理

操作:
  - 更新文档:重新上传或同步
  - 删除文档:移除不需要的文档
  - 禁用文档:临时停用但不删除
  - 查看分段:检查文档分段效果

命中统计

查看哪些文档被频繁检索:

统计维度:
  - 文档命中次数
  - 分段命中次数
  - 检索质量评分

批量操作

# 通过 API 批量导入
curl -X POST 'https://api.dify.ai/v1/datasets/{dataset_id}/document/create_by_text' \
  -H 'Authorization: Bearer {api_key}' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "产品手册",
    "text": "文档内容...",
    "indexing_technique": "high_quality"
  }'

高级功能

父子分段

将文档分为父分段(大块)和子分段(小块):

检索流程:
  1. 用子分段进行精确检索
  2. 返回对应的父分段作为上下文
优点: 提供更完整的上下文

结构化数据

处理 CSV、Excel 等结构化数据:

配置:
  - 指定列作为检索内容
  - 指定列作为元数据
  - 支持过滤查询

实时更新

通过 API 实时更新知识库:

import requests

# 添加新文档
requests.post(
    "https://api.dify.ai/v1/datasets/{dataset_id}/document/create_by_text",
    headers={"Authorization": "Bearer {api_key}"},
    json={
        "name": "新文档",
        "text": "文档内容",
        "indexing_technique": "high_quality"
    }
)

# 更新文档
requests.post(
    "https://api.dify.ai/v1/datasets/{dataset_id}/documents/{doc_id}/update_by_text",
    headers={"Authorization": "Bearer {api_key}"},
    json={"text": "更新后的内容"}
)

最佳实践

1. 文档准备

  • 清理无关内容(页眉页脚、广告等)
  • 统一文档格式
  • 添加清晰的标题和结构

2. 分段优化

  • 根据文档类型选择分段策略
  • 测试不同分段长度
  • 检查分段是否完整

3. 检索调优

  • 使用混合检索
  • 开启重排序
  • 调整 Top K 和阈值

4. 持续改进

  • 分析检索日志
  • 收集用户反馈
  • 优化文档内容

常见问题

Q: 检索结果不准确?

A: 尝试以下方法: 1. 使用混合检索 + 重排序 2. 调整分段长度 3. 优化文档内容 4. 检查 Embedding 模型

Q: 知识库更新后,检索结果没变?

A: 等待索引更新完成,或手动触发重新索引。

Q: 支持多大规模的知识库?

A: 取决于向量数据库配置,Weaviate 默认支持百万级文档。

小结

本章介绍了 Dify 的知识库和 RAG 功能。通过知识库,可以让 AI 基于你的专属知识回答问题。下一章,我们将学习工作流的高级功能。