跳转到主要内容
RAG 引擎(KnowledgeEngine)组件允许插件为 LangBot 提供完整的知识库索引与检索能力。用户在 LangBot 中创建知识库时,可以选择由插件提供的 RAG 引擎来管理文档的摄取、检索和删除。或通过插件桥接来自 Dify、RAGFlow、FastGPT 等业内先进知识库服务。

添加 RAG 引擎组件

单个插件中能添加任意数量的 RAG 引擎,请在插件目录执行命令 lbp comp KnowledgeEngine,并根据提示输入 RAG 引擎的配置。
现在即会在 components/knowledge_engine/ 目录下生成 simple_rag.yamlsimple_rag.py 文件,.yaml 定义了 RAG 引擎的基础信息和配置 Schema,.py 是该引擎的处理程序:

清单文件:RAG 引擎

配置项格式可参考:插件清单配置项格式

creation_schema 与 retrieval_schema

与旧版 KnowledgeRetriever 组件使用单一 spec.config 不同,KnowledgeEngine 使用两个独立的 Schema:
  • creation_schema:用户创建知识库时填写的参数,会在摄取和检索时通过 creation_settings 传入插件。
  • retrieval_schema:用户在检索知识库时可调整的参数,通过 retrieval_settings 传入插件。

能力声明

KnowledgeEngine 可以声明自身支持的能力,LangBot 会根据能力声明决定 UI 展示和可用操作:
可用的能力常量:
其他检索行为(如重排序、混合搜索等)由插件的 retrieval_schema 控制,不需要能力标志。

插件处理

默认会生成如下代码(components/knowledge_engine/<引擎名称>.py),您需要实现 ingestretrievedelete_document 三个核心方法。完整代码可在 langbot-plugin-demoSimpleKnowledgeEngine 中找到。

生命周期钩子

KnowledgeEngine 提供两个生命周期钩子,会在知识库创建和删除时被调用:

文档摄取

ingest 方法在用户上传文档到知识库时被调用:
IngestionContext 包含以下信息:
FileObject 包含文件元信息:
IngestionResult 应返回摄取结果:

知识检索

retrieve 方法在知识库被查询时调用:
RetrievalContext 包含以下信息:
LangBot 宿主会在传入 retrieval_settings 前自动注入 top_k 默认值(默认为 5),插件可通过 context.retrieval_settings.get('top_k', 5) 获取。filters 字段包含从 retrieval_settings 中提取的 Chroma 风格 where 过滤条件。当调用方在检索设置中提供 filters(例如按时间范围、文件类型或自定义元数据字段过滤文档)时,宿主会填充此字段,插件可据此在检索时进行过滤。如果未提供过滤条件,此字段为空 dict。
RetrievalResponse 应返回检索结果:
RetrievalResultEntry 表示单个检索结果:

文档删除

delete_document 方法在用户从知识库删除文档时调用:

宿主 RAG API

KnowledgeEngine 组件可以通过 self.plugin 调用 LangBot 宿主提供的 RAG 相关 API,包括嵌入模型调用、向量数据库操作和文件读取。

调用嵌入模型

向量写入

向量搜索

vector_search 返回的每个结果为 dict,包含 id(向量 ID)、score(距离分数)和 metadata(写入时附带的元数据)三个字段。如果需要在检索结果中返回文本内容,请在摄取阶段将文本存入 metadata 中。

向量删除

filters 参数支持 Chroma 风格的 where 语法进行元数据过滤。多个顶层键之间为 AND 关系。支持的运算符:$eq$ne$gt$gte$lt$lte$in$nin。示例:{"file_id": {"$eq": "abc"}}注意: Chroma、Qdrant 和 SeekDB 存储完整的元数据,可以对任意字段进行过滤。Milvus 和 pgvector 仅存储 textfile_idchunk_uuid,对其他字段的过滤将被静默忽略。

测试 RAG 引擎

创建完成后,在插件目录执行命令 lbp run,启动调试。然后在 LangBot 中:
  1. 进入”知识库”页面
  2. 点击”创建知识库”
  3. 选择您的插件提供的 RAG 引擎,并根据引擎的 creation_schema 填写配置
  4. 创建成功后,可上传文档测试摄取能力(如引擎声明了 DOC_INGESTION 能力)
  5. 在流水线中绑定该知识库,测试检索能力