知识管理系统是 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/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 对象控制,这些对象定义了:
automatic、custom 或 hierarchical 处理来源: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
知识管理系统公开 REST API,用于完整的数据集生命周期管理
| 端点 | 方法 | 目的 |
|---|---|---|
/datasets | GET | 列出数据集并支持过滤和分页 |
/datasets | POST | 创建空数据集 |
/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
文档操作支持多种输入格式和处理配置
| 端点 | 方法 | 目的 |
|---|---|---|
/datasets/{dataset_id}/document/create-by-text | POST | 从文本创建文档 |
/datasets/{dataset_id}/document/create-by-file | POST | 通过文件上传创建文档 |
/datasets/{dataset_id}/documents/{document_id}/update-by-text | POST | 用文本更新文档 |
/datasets/{dataset_id}/documents/{document_id}/update-by-file | POST | 用文件更新文档 |
来源: api/controllers/service_api/dataset/document.py33-95 web/app/(commonLayout)/datasets/template/template.en.mdx30-164
对文档片段进行细粒度控制,以满足高级用例需求
来源: 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
知识检索可作为代理应用程序的工具
DatasetRetrieverToolDatasetMultiRetrieverTool来源: api/core/tools/utils/dataset_retriever/dataset_retriever_tool.py32-56 api/core/callback_handler/index_tool_callback_handler.py17-94