添加 RAG 引擎组件
单个插件中能添加任意数量的 RAG 引擎,请在插件目录执行命令lbp comp KnowledgeEngine,并根据提示输入 RAG 引擎的配置。
components/knowledge_engine/ 目录下生成 simple_rag.yaml 和 simple_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),您需要实现 ingest、retrieve、delete_document 三个核心方法。完整代码可在 langbot-plugin-demo 的 SimpleKnowledgeEngine 中找到。
生命周期钩子
KnowledgeEngine 提供两个生命周期钩子,会在知识库创建和删除时被调用:文档摄取
ingest 方法在用户上传文档到知识库时被调用:
知识检索
retrieve 方法在知识库被查询时调用:
LangBot 宿主会在传入
retrieval_settings 前自动注入 top_k 默认值(默认为 5),插件可通过 context.retrieval_settings.get('top_k', 5) 获取。filters 字段包含从 retrieval_settings 中提取的 Chroma 风格 where 过滤条件。当调用方在检索设置中提供 filters(例如按时间范围、文件类型或自定义元数据字段过滤文档)时,宿主会填充此字段,插件可据此在检索时进行过滤。如果未提供过滤条件,此字段为空 dict。文档删除
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 仅存储 text、file_id 和 chunk_uuid,对其他字段的过滤将被静默忽略。测试 RAG 引擎
创建完成后,在插件目录执行命令lbp run,启动调试。然后在 LangBot 中:
- 进入”知识库”页面
- 点击”创建知识库”
- 选择您的插件提供的 RAG 引擎,并根据引擎的
creation_schema填写配置 - 创建成功后,可上传文档测试摄取能力(如引擎声明了
DOC_INGESTION能力) - 在流水线中绑定该知识库,测试检索能力
