feat: improve assistant knowledge import and database compatibility

This commit is contained in:
吉鑫升 committed 2026-09-02 17:55:17 +08:00
1 parent fbd8dec48f
commit 6b724bd00d
51 files changed
+4393 -1021

No files matched your search

@@ -1,8 +1,10 @@
# 技能归纳、WeKnora 普通知识库与助手知识库:实现设计
本文档用于指导大模型或开发者实现知识库体系改造。整体包含两条线:一条是“将一个或多个技能归纳到一个或多个目标知识库”;另一条是新增一个自研的全局助手知识库,用于承接 WeKnora 已处理、已向量化后的 Wiki、实体和关系数据,也支持技能和管理员本地数据直接导入,并做统一实体对齐、Wiki 展示和版本管理。
本文档用于指导大模型或开发者实现知识库体系改造。整体包含两条线:一条是“将一个或多个技能归纳到一个 WeKnora Wiki 普通知识库”;另一条是新增自研助手知识库体系。助手知识库像普通知识库一样可以创建多个库,同时系统内置一个全局大库,用于统计全库数据、承接所有 WeKnora 导入沉淀、做全局实体对齐、Wiki 展示和导入审计。
本文档中,目标知识库既可以是 WeKnora 普通知识库,也可以是自研助手知识库。普通知识库负责向量化、检索、Wiki 和图谱;助手知识库负责全局知识梳理、实体对齐、Wiki 展示、搜索和版本管理。
本文档中,技能归纳目标只能是 WeKnora Wiki 普通知识库;助手知识库不接收技能直接归纳,也不接收任意本地文件。普通知识库负责向量化、检索、Wiki 和图谱;助手知识库负责自研存储、WeKnora 导入、实体对齐、Wiki 展示、搜索和导入审计。无论 WeKnora 数据导入到哪个助手知识库,最终都必须沉淀一份到系统全局大库。
> 最终约束:如果本文历史章节与本节冲突,以本节和“2. 当前边界”中的约束为准。
## 1. 背景与目标
@@ -14,57 +16,59 @@
本次要新增一条管理员工作流:
管理员在“技能管理”页面选择多个技能,再选择一个或多个目标知识库,点击归纳。系统将每个技能作为独立来源读取、解析、抽取和归纳,把结果写入对应知识库,并在技能列表和技能详情中展示“该技能已被哪些知识库归纳”。
管理员在“技能管理”页面选择多个技能,再选择一个目标 WeKnora Wiki 普通知识库,点击归纳。系统将每个技能作为独立来源读取、解析、抽取和归纳,把结果写入对应 WeKnora 知识库,并在技能列表和技能详情中展示“该技能已被哪些知识库归纳”。如果需要归纳到多个普通知识库,通过多次操作完成。
用户已确认的业务约束:
- 一次操作可以选择多个技能,也可以选择多个目标知识库;系统按 `技能 x 目标知识库` 生成处理矩阵。
- 一次操作可以选择多个技能,但只能选择一个目标 WeKnora Wiki 普通知识库。
- 同一个技能可以在不同时间归纳到多个知识库,所以最终关系是技能与知识库多对多。
- V1 支持归纳到多种目标:Wiki WeKnora、非 Wiki WeKnora、FAQ 知识库、系统会话存档知识库、只读知识库,以及自研助手知识库。
- 多知识库归纳通过多次操作完成;每次操作形成一批 `技能 x 单目标知识库` 任务。
- V1 只支持归纳到可写 WeKnora Wiki 普通知识库;不支持非 Wiki、FAQ、系统会话存档、只读知识库作为技能归纳目标。
- 技能归纳时只抽取数据、业务说明、实体、概念、对象、事件、关系等知识;Python、TypeScript、Shell 等代码和脚本类文件完全排除,不读取注释、不抽取函数、不上传、不进入 prompt。
- 技能里的 Markdown、业务数据文件、表格、PDF、Office、图片等要纳入处理范围。
- 需要同步三类内容:原始资料、归纳后的 Wiki、实体与关系。
- 关系来源包括 Markdown 自然语言描述、目录和文件引用、模型自动推断。
- 允许模型推断关系,同时前端需要提供逐条实体/关系预览审核能力。
- 支持手动重新归纳,也支持自动文件监听、定时后台同步和技能变更后的自动远程写入。
- 允许模型推断关系,但前端不提供逐条实体/关系预览审核。
- 支持管理员手动点击“重新归纳”;不新增自动文件监听、定时后台同步或技能变更自动远程写入。
- 解除关联时弹窗让用户选择:保留知识库内容,或删除该技能贡献的内容。
- 权限仅管理员。
- 总技能数约 200 个,需要支持批量进度、后台执行、失败重试。
- 同一目标知识库内,不同技能抽取出的同一实体需要合并。
- 重归纳时先生成新版本,成功后再替换旧版本;失败时旧版本继续可用。
- 新增知识库类型区分:普通知识库是 WeKnora,助手知识库是自研存储。
- 助手知识库只有一个全局大库,建议命名为“知识梳理”,所有用户可见。
- 助手知识库支持创建多个库;其中有且只有一个系统全局大库,建议命名为“知识梳理总库”,所有用户可见。
- 助手知识库只提供 Wiki 页面展示、搜索和数据导入;不落到 WeKnora。
- 助手知识库数据来源包括 WeKnora 导出、技能直接归纳、管理员本地文件导入。
- WeKnora 已向量化和处理完成的 Wiki、文档、实体、关系、图谱数据默认沉淀到助手知识库。
- 普通知识库需要提供导出或“导入到助手知识库”的功能,把 WeKnora 里已经处理好的数据导入助手知识库;导出数据需要包含 Wiki、文档、chunk、实体、关系、图谱。
- 即使没有配置 WeKnora,也要默认展示助手知识库的创建或初始化入口。
- 助手知识库数据来源只能是 WeKnora 导出包或从某个 WeKnora 知识库触发导入。
- WeKnora 已向量化和处理完成的 Wiki、文档、实体、关系、图谱数据默认沉淀到助手知识库;如果导入的是某个自建助手库,也必须同步沉淀到全局大库。
- 普通知识库需要提供导出或“导入到助手知识库”的功能,把 WeKnora 里已经处理好的数据导入指定助手知识库;导出数据需要包含 Wiki、文档、chunk、实体、关系、图谱。
- 即使没有配置 WeKnora 地址,也要默认展示助手知识库列表和创建入口,而不是展示空的普通知识库页面。
- 管理员可切换知识库产品版本:`v1` / `v2`,默认 `v1`。
- 助手知识库普通用户只读,管理员可导入、编辑、删除、查看版本和回滚 Wiki 页面。
## 2. 必须支持的扩展能力
## 2. 当前边界
以下能力原先按非目标处理,最新需求已确认全部要支持。实现时必须把它们作为正式目标,并加上必要的权限、状态和审计护栏。
以下能力明确不做,开发实现和验收必须按这些边界收敛:
- 支持一次选择多个目标知识库。一个归纳任务可包含多个技能和多个目标,后端按矩阵拆分 item。
- 支持非 Wiki 知识库、FAQ 知识库、系统会话存档知识库、只读知识库作为目标。不同目标使用不同写入 adapter;只读目标使用本地 sidecar 投影和待推送状态。
- 支持直接写 WeKnora 的 Neo4j 或底层图数据库,但必须通过受控 graph writer、显式配置开关、事务和审计,不允许 LLM 生成任意 Cypher 直接执行。
- 支持自动文件监听、定时后台同步、技能变更自动远程写入。自动写入仍必须走 staged 版本和失败保留旧版本机制。
- 前端提供逐条实体/关系预览审核,管理员可批准、拒绝、编辑、批量处理。
- 前端和 API 暴露远端 WeKnora ID,并可作为跨系统业务 key 使用;本地仍保留 surrogate id 以保证数据库关系稳定。
- 支持技能直接归纳到助手知识库,不必先经过 WeKnora。
- 支持管理员向助手知识库导入任意本地文件,导入前必须做文件类型、安全扫描和敏感信息阻断。
- 助手知识库 V1 支持 Wiki 页面版本管理、版本对比、发布、回滚和导入审计。
- 不支持一次选择多个目标知识库。多知识库归纳通过多次操作完成。
- 不支持非 Wiki 知识库、FAQ 知识库、系统会话存档知识库、只读知识库作为技能归纳目标。
- 不直接写 WeKnora 的 Neo4j 或底层图数据库。
- 不新增自动文件监听、定时后台同步或技能变更自动远程写入。
- 不在前端提供逐条实体/关系预览审核。
- 不把远端 WeKnora 内部 ID 暴露为前端业务主键。
- 不支持技能直接归纳到助手知识库。技能先进入 WeKnora 普通知识库,再由 WeKnora 导出沉淀到助手知识库。
- 不支持管理员向助手知识库导入任意本地文件;手动导入也必须是 WeKnora 导出包或从某个 WeKnora 知识库触发。
- 助手知识库 V1 不做页面版本管理,只保留当前合并后的 Wiki 状态和导入审计记录。
## 3. 术语
| 术语 | 含义 |
| --- | --- |
| 技能 | DeerFlow 技能目录,通常包含 `SKILL.md`、代码、配置、示例、文档、数据文件等。 |
| 目标知识库 | 管理员选择的一个或多个知识库,可以是 WeKnora 普通知识库,也可以是自研助手知识库。 |
| 目标知识库 | 管理员选择的一个 WeKnora Wiki 普通知识库。助手知识库不是技能归纳目标。 |
| 普通知识库 | WeKnora 知识库,负责向量化、Wiki、文档检索和图谱能力。 |
| 助手知识库 | DeerFlow 自研知识库,只维护一个全局大库,用于 Wiki 展示、搜索、WeKnora 导入、技能直接导入、本地文件导入和实体对齐。 |
| 知识梳理底库 | 助手知识库的默认全局库名,所有用户可见,普通用户只读。 |
| 助手知识库 | DeerFlow 自研知识库类型,支持创建多个库,用于 Wiki 展示、搜索、WeKnora 导入和实体对齐。 |
| 知识梳理总库 | 助手知识库体系中的系统全局大库,有且只有一个,自动统计和沉淀所有助手库与普通知识库导入数据,做全局实体对齐。 |
| 自建助手库 | 管理员创建的普通助手知识库,类似普通知识库列表中的一个库,可导入 WeKnora 普通知识库导出数据。 |
| 产品版本 | 知识库产品形态开关。`v1` 默认为普通知识库体验,`v2` 默认为助手知识库体验。 |
| WeKnora 导出包 | 从普通知识库导出的已处理知识集合,包含 Wiki 页面、文档、chunk、实体、关系、图谱等。 |
| 绑定 | 一个技能与一个目标知识库之间的持久关联。`skill_name + target_type + target_id` 唯一。 |
@@ -81,37 +85,35 @@
```mermaid
flowchart LR
A[管理员选择多个技能] --> B[选择一个或多个目标知识库]
B --> C[创建归纳任务矩阵]
A[管理员选择多个技能] --> B[选择一个 WeKnora Wiki 目标知识库]
B --> C[创建归纳任务]
C --> D[逐技能扫描与解析]
D --> E[生成技能快照]
E --> F[LLM 归纳 Wiki 与关系抽取]
F --> R[前端实体/关系预览审核]
R --> G[按目标知识库合并实体/关系]
G --> H[写入 WeKnora 或本地助手库]
G --> I[写入 Wiki/FAQ/会话存档/sidecar]
G --> J[写入 WeKnora GraphRAG 或 Neo4j]
F --> G[按目标 WeKnora Wiki 合并实体/关系]
G --> H[写入 WeKnora 原始资料与 Wiki]
G --> I[写入关系投影文档]
H --> K[校验远端写入]
I --> K
J --> K
K --> L[本地原子激活新版本]
L --> M[技能页展示已归纳知识库]
K --> N[WeKnora 导出已处理数据]
N --> O[沉淀到助手知识库]
O --> P[全局实体对齐]
P --> Q[知识梳理 Wiki 展示与搜索]
N --> O[导入指定助手知识库]
O --> P[同步沉淀到知识梳理总库]
P --> Q[全局实体对齐]
Q --> S[总库 Wiki 展示与搜索]
```
关键原则:
- DeerFlow 本地数据库保存权威绑定关系、版本状态、来源贡献和远端 artifact 映射。
- WeKnora 保存可检索知识内容,包括原文、Wiki 页面、FAQ、会话存档、关系投影文档和图谱。
- 对 WeKnora 图谱能力采取能力探测和分层写入:优先使用 WeKnora API;需要底层图写入时,使用受控 Neo4j graph writer。
- 不直接写 WeKnora 底层图数据库;关系以 WeKnora API 能力和关系投影文档承接。
- 重归纳使用 staged artifact,远端写入和校验成功后,本地才激活新版本。
- 删除或解除关联只影响该技能在目标知识库中的贡献,不误删其他技能共享的实体和关系。
- 助手知识库只有一个全局库,可以接收技能直接归纳、WeKnora 导出和管理员本地文件导入。
- WeKnora 的已处理结果默认进入助手知识库,由助手底库做全局实体对齐、Wiki 展示、搜索和版本管理。
- 未配置 WeKnora 时,仍展示助手知识库创建或初始化能力;与 WeKnora 相关的归纳和导入动作置灰或隐藏。
- 助手知识库可以创建多个库;系统全局大库只有一个,负责汇总全库数据和做跨库实体对齐。
- WeKnora 的已处理结果可以导入指定助手知识库;无论是否指定自建助手库,都必须同步沉淀到知识梳理总库。
- 未配置 WeKnora 地址时,默认进入助手知识库页面,展示助手知识库列表、创建入口和知识梳理总库;与 WeKnora 相关的导出导入动作置灰或隐藏。
## 5. 现有代码落点
@@ -193,6 +195,14 @@ items = selected_skills x selected_targets
每个 item 对应一个 `binding`,一个技能归纳到三个目标知识库,就生成三个 binding。父 job 负责展示整体进度,item 独立成功、失败、取消和重试。
当目标是自建助手库时,item 写入顺序是:
```text
写入目标助手库 -> 生成目标库 Wiki/实体/关系 -> 创建总库沉淀任务 -> 总库实体对齐和统计
```
总库沉淀失败不能让目标助手库写入结果消失,但 item 必须标记为 `partial_failed`,并允许单独重试“沉淀到总库”。
目标知识库需要通过 adapter 写入:
| 目标类型 | 写入策略 | Wiki | 关系/图谱 |
@@ -202,7 +212,7 @@ items = selected_skills x selected_targets
| WeKnora FAQ 知识库 | 把归纳结果转换为 FAQ 条目、来源文档和关系摘要 | 不写或只写 sidecar Wiki | 关系作为 FAQ metadata、projection 文档和图谱边 |
| 系统会话存档知识库 | 把技能归纳结果作为系统会话归档条目写入 | sidecar Wiki 展示 | 关系作为归档 metadata 和图谱边 |
| 只读 WeKnora 知识库 | 不修改远端原库;写本地 sidecar artifact,并生成待推送状态 | sidecar Wiki 展示 | sidecar graph + 待推送 Neo4j plan |
| 助手知识库 | 写入自研底库、实体对齐、生成 Wiki 页面版本 | 写自研 Wiki | 写自研实体/关系表 |
| 助手知识库 | 写入指定助手库、实体对齐、生成 Wiki 页面版本;同时异步沉淀到知识梳理总库 | 写自研 Wiki | 写自研实体/关系表;总库做跨库实体对齐 |
只读目标说明: