NocoBase 工作流 AI 知识库节点实战:用数据库事件触发器实现业务数据与知识库的增删改同步
【免费下载链接】nocobaseNocoBase is an open-source AI + no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase
导读
本文讲解 NocoBase 中「AI 知识库节点」的完整用法:通过「Collection event」数据库事件触发器监听业务表的增、删、改事件,配合「Create document / Update document / Delete document」三个异步节点,把业务数据实时同步到 AI 知识库;再通过「Retrieve document」节点把知识库片段检索出来,作为上下文喂给下游 AI 员工节点完成问答任务。读完本文,你将掌握一套可复制的「业务表 ⇄ 知识库」双向同步链路:数据入库即建文档、数据更新即覆盖文档、数据删除即清理文档,并理解Key字段在整个同步链路中的核心作用。本组文档对应插件为@nocobase/plugin-ai-knowledge-base,文章原始出处见 工作流 AI 知识库节点概述。
核心概念:AI 知识库节点是什么
AI 知识库节点是一组可以在工作流中直接操作知识库文档的节点,它让知识库内容不再是「手动上传、手动维护」的静态资产,而是可以跟随业务数据自动变化:
- 业务数据新增时,自动在知识库中创建一篇文档;
- 业务数据更新时,自动用最新内容覆盖知识库中的同一篇文档;
- 业务数据删除时,自动从知识库中删除对应文档;
- 需要问答时,用检索文档节点把知识库片段取出来交给 AI。
这样知识库内容始终与业务表保持一致,后续 AI 员工或其他流程就可以基于这些知识库文档提供检索、问答等能力。
这组节点都是异步节点:创建工作流时必须选择异步执行。所谓异步,是指节点提交后立即返回,真正的写库、分段、向量化在后台进行,因此节点执行完成 ≠ 文档立即可检索,需要等「Documents」列表中的「Status」变为Success后,再做分段检查或命中测试。
示例场景:Q&A 知识库同步
本文使用一个 Q&A 场景作为贯穿示例:后台维护标准答案,以及每条答案对应的常见问法。工作流把答案正文和关联问题一起同步到同一个目标知识库,后续 AI 员工或其他流程基于这些文档回答用户提问。
示例中涉及两张业务表:
| 数据表 | 作用 |
|---|---|
Answers | 保存可同步到知识库的答案内容,是知识库文档的来源表 |
Questions | 保存答案对应的常见问法,通过关系字段挂在答案下面 |
同步规则:
- 新增答案→ 创建知识库文档;
- 修改答案→ 更新知识库文档;
- 删除答案→ 删除知识库文档;
Questions不作为独立的知识库文档来源,它通过Answers.questions关系字段补充同一条答案可能对应的不同问法。
同步前需要先准备一个 Local 知识库,并配置好文件存储、向量数据库、LLM 服务和 Embedding model(相关配置见 知识库概述 和 向量数据库)。知识库名称可按环境自行设置,后续创建、更新、删除三条工作流只要选择同一个知识库即可。
Answers 表结构设计
Answers表主要使用三个字段:
| 字段 | 用途 |
|---|---|
Title | 作为知识库文档名称 |
Content | 作为知识库文档正文 |
questions | 关联到Questions表,补充相关问题 |
questions是一个一对多关系字段:源表是Answers,目标表是Questions,源键和目标键都使用ID,外键保存在Questions表中。
这个关系字段在创建和更新文档时会被预加载(Preload associations),从而把关联问题写入分段的「Related questions」,让一条答案不仅能通过正文被检索到,也能通过常见问法被检索到。
:::tip 如果你的知识库文档不需要相关问题,可以不配置类似questions的关系字段。只要有稳定的Key字段和正文内容,就可以完成创建、更新、删除同步。 :::
工作流分工:一条数据、三条链路
这组示例的核心是三条同步工作流,它们处理同一批Answers数据、写入同一个目标知识库:
| 场景 | 触发方式 | 使用节点 | 作用 |
|---|---|---|---|
| 新增答案 | Answers表After record added | 「Create document」 | 把新增答案写入 AI 知识库 |
| 更新答案 | Answers表After record updated | 「Update document」 | 用同一个Key更新知识库文档 |
| 删除答案 | Answers表After record deleted | 「Delete document」 | 用同一个Key删除知识库文档 |
其中Key是同步链路里最重要的字段。创建、更新、删除三个流程必须使用同一套Key规则,示例中直接使用Answers表记录 ID(Answers.ID)。这样无论数据在哪个环节变化,都能精确锁定知识库中的同一篇文档。
文本内容的入库与向量化
配置创建或更新文档节点时,如果「Document type」选择Text,工作流会先把「Content」中选择的文本字段保存成一份.txt文档,再写入目标知识库。随后知识库会按当前分段参数生成分段,并把启用中的分段及其关联问题一起向量化,存入知识库绑定的向量数据库。
这个过程以异步节点执行。节点完成不代表文档已经可以立即被检索,通常需要等「Documents」列表中的「Status」变为Success后,再做分段检查或命中测试。
创建文档:同步链路的起点
创建文档节点用于向 AI 知识库写入新文档。它监听Answers表的新增记录,把答案正文、文档名称、关联问题和稳定的Key一起写入目标知识库。完整说明见 创建文档。
配置触发器
新建异步工作流后,触发器选择「Collection event」,在触发器配置中:
- 「Collection」选择需要同步的数据表,比如
Main / Answers; - 「Trigger on」选择
After record added; - 如果文档需要带上关联表里的字段,在「Preload associations」里预加载关联字段(示例预加载
questions)。
配置创建文档节点
在触发器后添加「Create document」节点,关键配置项如下:
| 配置项 | 示例配置 | 说明 |
|---|---|---|
| 「Knowledge base」 | 目标知识库 | 选择概述中准备好的同一个 Local 知识库。工作流会在这个知识库的「Documents」列表中创建一篇文档,并进入后续分段和向量化流程。 |
| 「Split document」 | No | 控制是否把正文拆成多个分段。示例里一条答案本身就是完整回答,关闭拆分后,整篇文档会作为一个分段,更适合和「Related questions」一起命中同一条答案。 |
| 「Related questions」 | Answers.questions.content | 只有关闭「Split document」后才会生效。把常见问法写入当前分段的「Related questions」,它不会改写正文,但会参与检索,用来提升同义问法、常见问法的命中效果。 |
| 「Document type」 | Text | 使用文本字段创建知识库文档。如果业务表里保存的是附件或文件地址,再改用Attachment。 |
| 「Content」 | Answers.Content | 选择答案正文,作为知识库文档正文。后续在分段管理中看到的「Content」就来自这里。 |
| 「Key」 | Answers.ID | 设置知识库文档的唯一标识。示例使用Answers记录 ID,这样更新和删除工作流可以用同一个Key精确找到这篇文档。 |
| 「Name」 | Answers.Title | 设置知识库文档名称,方便在「Documents」列表中查看文档状态、进入分段管理和做命中测试。 |
:::warning 「Key」会作为后续更新和删除知识库文档的依据。创建、更新、删除三个工作流必须使用同一套 Key 规则,通常直接使用业务表记录 ID。
如果「Related questions」需要引用关联表字段,触发器里必须先配置「Preload associations」。否则节点执行时只能拿到当前Answers记录本身,拿不到关联的questions数据。 :::
更新文档:用同一个 Key 覆盖内容
更新文档节点用于更新 AI 知识库里已有的文档。它监听Answers表的更新记录,用和创建文档相同的Key找到目标知识库里的文档,并用最新字段内容重新写入。完整说明见 更新文档。
配置触发器
触发器选择「Collection event」,配置要点:
- 「Collection」选择需要监听的数据表,比如
Main / Answers; - 「Trigger on」选择
After record updated; - 「Changed fields」可按需限制触发字段,比如只监听标题或正文变化;不选择时,任意字段变化都会触发该工作流;
- 如果节点需要使用关联字段,在「Preload associations」里预加载。
配置更新文档节点
更新文档节点的参数和创建文档基本一致:继续选择同一个目标知识库、同样的分段方式、同样的正文和标题字段;如果需要同步关联问题,继续使用Answers.questions.content。
最需要注意的是「Key」是必填参数,且必须与创建文档节点完全一致。示例继续使用Answers.ID,节点才能找到同一篇知识库文档并覆盖它的内容。
:::warning 如果找不到对应Key的文档,更新会失败。配置前先确保创建文档工作流已经用同一个Key创建过文档。 :::
删除文档:清理已移除的数据
删除文档节点用于从 AI 知识库中删除指定文档。它监听Answers表的删除事件,用和创建文档相同的Key删除目标知识库里的对应文档,避免已经移除的数据继续被检索出来。完整说明见 删除文档。
配置触发器
触发器选择「Collection event」:
- 「Collection」选择需要监听的数据表,比如
Main / Answers; - 「Trigger on」选择
After record deleted。
删除文档只需要找到对应文档的Key,通常不需要预加载关联字段。
配置删除文档节点
删除文档节点只需要定位要删除的文档,不需要重新传入正文、标题或关联问题:
| 配置项 | 示例配置 | 说明 |
|---|---|---|
| 「Knowledge base」 | 目标知识库 | 选择和创建、更新文档节点相同的知识库。 |
| 「Key」 | Answers.ID | 选择和创建文档节点完全一致的字段,确保删除的是这条答案对应的知识库文档。 |
:::warning 删除节点不会根据标题或正文查找文档,只会根据「Knowledge base」和「Key」定位文档。创建、更新、删除三个流程里的Key必须一致。 :::
检索文档:把知识库片段交给 AI 员工
检索文档节点用于在工作流里搜索 AI 知识库,并返回匹配的文档片段。它适合放在 AI 员工节点之前:先用任务输入检索知识库,再把检索结果传给 AI 员工,作为任务处理的上下文。完整说明见 检索文档。
示例工作流监听Questions表的新增记录,把检索文本传给「Retrieve document」节点,再把检索结果交给下游「AI employee」节点处理任务。实际业务里,AI 员工生成的处理结果通常还需要保存起来,后面继续接数据库操作节点;示例为了聚焦检索节点,省略了保存结果的后续节点。
配置触发器
- 「Collection」选择检索文本来源表,比如
Main / Questions; - 「Trigger on」选择
After record added。
这样每新增一条输入记录,工作流就会自动进入检索和任务处理流程。
配置检索文档节点
在触发器后添加「Retrieve document」节点,建议把节点 key 改成容易引用的名称,比如retrieve_docs。关键配置项:
- 「Knowledge base」:选择一个或多个要检索的知识库;
- 「Input matching text」:选择检索文本字段;
- 「Top K」:设置最多返回的片段数量;
- 「Score」:设置最低相似度阈值。
节点执行后会返回一个文档片段数组,每个结果包含id、content、score、metadata字段,并按score从高到低排序。
传递给 AI 员工节点
在「AI employee」节点中,把检索结果写入提示词,示例里直接引用检索节点的输出:
Task input: {{$context.data.f_b2izf5j4xx0}} Knowledge base snippets: {{$jobsMapByNodeKey.retrieve_docs}} Use the snippets as context to complete the task. If the snippets are not enough, explain what information is missing.其中retrieve_docs是检索节点的 key。如果你的节点 key 不同,需要替换成实际 key。AI 员工节点的配置方式见 AI 员工节点配置。
:::tip 如果只想传递片段正文,可以在变量选择器中引用检索结果里的content字段。直接传整个结果数组则会同时带上score和metadata,便于 AI 判断片段来源和相关度。 :::
验证同步链路
配置完创建、更新、删除三条工作流后,可以用同一条Answers记录检查完整同步链路。
新增答案后,按下面的顺序检查:
- 进入目标知识库的「Documents」,确认新增文档已经出现,并且「Status」为
Success。详细用法见 知识库文档管理。 - 点击该文档的「Segments」,确认分段里的「Related questions」包含
Answers.questions里的常见问法。详细用法见 分段管理。 - 进入「Hit tests」,输入答案正文关键词或关联问题,确认可以命中刚同步的答案。详细用法见 命中测试。
新增同步正常后,继续修改这条Answers记录,确认目标知识库里的文档内容随之更新;最后删除这条记录,确认目标知识库里的对应文档被删除。
小结
本文以 Q&A 场景为例,完整覆盖了 NocoBase 工作流 AI 知识库节点的四条核心用法:
- Create document:新增业务数据时把内容、名称、
Key与关联问题写入知识库; - Update document:业务数据更新时用同一
Key覆盖知识库文档; - Delete document:业务数据删除时用同一
Key清理知识库文档; - Retrieve document:检索知识库片段,作为上下文传递给 AI 员工节点。
贯穿始终的设计准则是:同一目标知识库 + 同一套Key规则 + 触发器预加载关联字段。只要业务表有稳定的Key字段与正文内容,这套「创建 → 更新 → 删除 → 检索」的模式就可以平移到任何需要保持业务数据与知识库一致的真实场景中。由于节点均为异步执行,别忘了在验证时等待文档「Status」变为Success,再进入分段与命中测试环节。
【免费下载链接】nocobaseNocoBase is an open-source AI + no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考