菜单

知识管理系统

相关源文件

目的与范围

知识管理系统是 Dify 的检索增强生成 (RAG) 实现,它使应用程序能够访问和利用外部知识源。该系统管理数据集(知识库),将文档处理成可搜索的片段,并为应用程序提供查找相关信息的能力。

本文档涵盖数据集管理、文档索引和知识检索工作流。有关知识如何与特定应用程序类型集成的信息,请参阅应用程序管理。有关使用知识检索的工作流执行系统的详细信息,请参阅工作流引擎

系统架构

知识管理系统构建于几个关键组件之上,这些组件负责从文档摄用到知识检索的完整生命周期。

核心架构概述

来源:api/services/dataset_service.py77-555 api/controllers/service_api/dataset/dataset.py33-71 api/core/indexing_runner.py44-100 api/core/rag/retrieval/dataset_retrieval.py72-282

数据模型关系

来源:models/dataset.py api/services/dataset_service.py30-43

数据集生命周期管理

数据集创建和配置

数据集通过 DatasetService.create_empty_dataset() 方法创建,该方法支持两种主要类型:

  • 供应商数据集:传统的基于文件的知识库
  • 外部数据集:与外部知识 API 集成

来源:api/controllers/service_api/dataset/dataset.py73-151 api/services/dataset_service.py165-237

索引技术

Dify 支持两种主要的索引技术,可在数据集级别进行配置:

技术描述存储用例
high_quality使用嵌入模型的向量嵌入向量数据库语义搜索,质量更佳
economy基于关键字的倒排索引PostgreSQL/Jieba精确匹配,成本更低

来源:api/services/dataset_service.py183-197 web/app/(commonLayout)/datasets/template/template.en.mdx56-59

文档处理流程

文档摄入工作流

来源:api/core/indexing_runner.py49-100 api/core/indexing_runner.py334-413 api/core/indexing_runner.py514-589

文档处理规则

文档处理由 DatasetProcessRule 对象控制,这些对象定义了:

  • 预处理规则:文本清理操作,例如删除多余空格或 URL
  • 分段规则:文档如何拆分为块(分隔符、max_tokens、chunk_overlap)
  • 模式automaticcustomhierarchical 处理

来源:api/services/dataset_service.py138-154 api/services/entities/knowledge_entities/knowledge_entities.py58-80

后台处理任务

文档索引通过 Celery 任务异步处理

任务目的触发器
document_indexing_task处理新文档文档上传
document_indexing_update_task重新处理修改过的文档文档更新
deal_dataset_vector_index_task添加/删除向量索引索引技术更改
clean_dataset_task清理已删除的数据集数据集删除

来源:api/tasks/document_indexing_task.py15-74 api/tasks/deal_dataset_vector_index_task.py15-32

知识检索系统

检索方法和策略

检索系统支持多种搜索策略,可组合使用

来源:api/core/rag/datasource/retrieval_service.py35-120 api/core/rag/retrieval/dataset_retrieval.py403-465

工作流中的知识检索

知识检索通过 KnowledgeRetrievalNode 集成到工作流系统中。

来源: api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py73-138 api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py140-326

命中测试和质量评估

系统通过 HitTestingService 提供命中测试能力,以评估检索质量

  • 使用测试查询查询数据集
  • 分析检索得分和相关性
  • 支持内部和外部知识源
  • 元数据过滤集成,用于精确测试

来源: api/services/hit_testing_service.py24-89 api/services/hit_testing_service.py92-125

API 接口

数据集管理 API

知识管理系统公开 REST API,用于完整的数据集生命周期管理

端点方法目的
/datasetsGET列出数据集并支持过滤和分页
/datasetsPOST创建空数据集
/datasets/{dataset_id}GET获取数据集详情
/datasets/{dataset_id}PATCH更新数据集配置
/datasets/{dataset_id}DELETE删除数据集

来源: api/controllers/service_api/dataset/dataset.py36-71 web/app/(commonLayout)/datasets/template/template.en.mdx299-404

文档管理 API

文档操作支持多种输入格式和处理配置

端点方法目的
/datasets/{dataset_id}/document/create-by-textPOST从文本创建文档
/datasets/{dataset_id}/document/create-by-filePOST通过文件上传创建文档
/datasets/{dataset_id}/documents/{document_id}/update-by-textPOST用文本更新文档
/datasets/{dataset_id}/documents/{document_id}/update-by-filePOST用文件更新文档

来源: api/controllers/service_api/dataset/document.py33-95 web/app/(commonLayout)/datasets/template/template.en.mdx30-164

片段管理 API

对文档片段进行细粒度控制,以满足高级用例需求

  • 创建、读取、更新、删除单个片段
  • 批量处理多个片段
  • 支持父子层级结构
  • 子块管理,用于层级索引

来源: api/controllers/service_api/dataset/segment.py33-139 api/controllers/service_api/dataset/segment.py141-209

集成点

应用集成

知识库通过 AppDatasetJoin 模型与应用程序集成,支持

  • 每个应用程序有多个数据集
  • 应用程序级别的检索配置
  • 响应中的引用和来源归属
  • 使用情况跟踪和分析

来源: api/services/dataset_service.py465-469 api/services/dataset_service.py519-525

外部知识源

系统支持通过

  • ExternalDatasetService 进行 API 集成
  • 自定义检索参数和元数据过滤
  • 与内部知识源统一的接口
  • 外部提供者管理和身份验证

来源: api/services/dataset_service.py223-234 api/core/rag/retrieval/dataset_retrieval.py332-351

工具集成

知识检索可作为代理应用程序的工具

  • 用于单个数据集查询的 DatasetRetrieverTool
  • 用于多数据集场景的 DatasetMultiRetrieverTool
  • 与工作流工具调用的集成
  • 用于使用情况跟踪的回调处理器

来源: api/core/tools/utils/dataset_retriever/dataset_retriever_tool.py32-56 api/core/callback_handler/index_tool_callback_handler.py17-94