docs: design external knowledge providers

This commit is contained in:
mesalogo
2026-09-03 16:29:51 +08:00
parent 6586192222
commit 468cf0483f
6 changed files with 1808 additions and 2 deletions
@@ -0,0 +1,401 @@
# 外部知识库 UI 设计
## 文档信息
| 项目 | 内容 |
| --- | --- |
| 状态 | 设计稿 |
| 版本 | 0.1 |
| 日期 | 2026-09-03 |
| 产品需求 | [外部知识库接入 PRD](./external-knowledge-prd.md) |
| 行为规则 | [外部知识库逻辑设计](./external-knowledge-logic-design.md) |
| 全局规范 | [GoodBuddy UI 设计系统](../../../UI-DESIGN.md) |
## 1. 信息架构
外部知识库不增加左侧主导航和知识库一级页签。现有知识库页面结构保持:
```text
知识库
├─ 页面标题区
│ ├─ 管理外部实例
│ └─ 新建知识库
├─ 知识库列表
└─ 当前知识库详情
```
“管理外部实例”管理可复用连接;“新建知识库”负责创建本地知识库或添加一个远端绑定。
## 2. 页面标题区
常规宽度:
```text
知识库 [管理外部实例] [新建知识库]
导入、检索并维护本地和企业现有知识
范围:全局
```
- “新建知识库”保持主按钮。
- “管理外部实例”是带服务器图标的次按钮。
- 沿用知识库页面的全局 `ScopeBadge`,创建和管理外部连接时持续可见。
- 按钮使用文字和图标,不增加只含缩写的厂商快捷入口。
- 窄窗口下两个按钮换到标题下方,保持同一行;空间不足时各占一半宽度。
对应:`EK-FR-01`。
## 3. 知识库列表
本地和外部知识库保留在同一主列表。条目采用现有列表密度,不增加卡片墙。
```text
研发规范
RAGFlow · 研发知识平台 · 远端可检索
产品资料
本地 · 12 个来源 · 全文与向量可用
```
### 3.1 外部条目字段
- GoodBuddy 显示名称。
- Provider 图标或文字徽标。
- 外部实例名称。
- “远端可检索”、认证失效、目标不存在等准确状态。
- 最近一次成功检索时间;从未检索时显示“尚未检索”。
外部条目不显示来源数量、同步进度、向量覆盖率、本地图谱或导入失败数。
### 3.2 列表筛选
现有搜索同时匹配 GoodBuddy 名称、远端名称、Provider 和实例名称。来源筛选使用菜单:
```text
全部来源
本地
Dify
FastGPT
RAGFlow
```
筛选不是新的页面页签。
## 4. 管理外部实例
点击“管理外部实例”打开大尺寸 Modal。Modal 使用标题、可滚动内容和固定操作区,遵循
全局焦点陷阱、Escape、背景隔离和焦点恢复规则。
```text
┌──────────────────────────────────────────────────────────────┐
│ 外部实例 [添加实例] [×] │
│ 管理 Dify、FastGPT 和 RAGFlow 的连接 │
├──────────────────────────────────────────────────────────────┤
│ 名称 Provider 服务地址 状态 操作 │
│ 研发知识平台 RAGFlow ragflow.example 正常 ⋯ │
│ 客服知识平台 FastGPT fastgpt.example 认证失效 ⋯ │
└──────────────────────────────────────────────────────────────┘
```
### 4.1 实例行
显示:
- 名称、Provider、脱敏后的主机名、状态。
- 已绑定知识库数量。
- 最近测试时间。
- 行尾菜单:测试连接、编辑、停用或启用、删除。
服务地址可以显示 scheme、host 和非默认端口,不显示路径中的敏感信息、查询或凭据。
### 4.2 空状态
```text
尚未配置外部实例
添加企业现有的 Dify、FastGPT 或 RAGFlow 服务。
[添加实例]
```
筛选无结果和加载失败使用不同 `EmptyState` 变体。
## 5. 添加和编辑实例
实例表单在管理 Modal 内切换为编辑面板,不叠加第二层 Modal。
```text
添加外部实例
实例名称 [研发知识平台 ]
Provider [RAGFlow ▾]
服务地址 [https://ragflow.example ]
认证方式 API Key
API Key [•••••••••••••••• ]
凭据状态 尚未保存
连接测试
服务连接 未测试
身份认证 未测试
知识库列表 未测试
检索接口 绑定知识库时验证
[取消] [测试连接] [保存实例]
```
### 5.1 字段行为
- Provider 使用原生 Select;编辑已被绑定的实例时不可切换 Provider。
- 服务地址只接受完整 HTTP(S) 地址。字段下方说明其受全局内网兼容模式影响。
- API Key 使用密码输入和显示/隐藏图标。明文会在当前表单和保存 IPC 中短暂存在;编辑时
留空表示保留,不使用占位假密钥。
- 已保存凭据旁提供“替换凭据”和“清除凭据”,清除属于需要确认的操作。
- 地址使用 HTTP,或连接测试依赖放宽证书校验时,在测试和保存操作旁持续显示传输风险。
用户必须针对当前地址确认后才能保存;地址变化会清除该确认。
- “测试连接”不保存草稿;测试期间按钮显示进度并提供取消。
- 保存成功进入应用通知,Modal 返回实例列表并聚焦对应行。
### 5.2 测试结果
分项状态使用图标、文字和说明,不只依靠颜色:
```text
服务连接 通过 183 ms
身份认证 通过
知识库列表 受限 当前凭据不能读取列表,可手工填写知识库 ID
检索接口 待验证 添加知识库时执行
```
长错误折叠显示,正文经过脱敏。失败后保留全部草稿和 API Key 输入。
FastGPT 实例额外显示:`检索会计入该实例的 API 使用记录,并可能产生 Embedding 或
Rerank 用量。`
## 6. 新建知识库向导
扩展现有页面内 `CreateLibraryWizard`,不改为新的全屏页面或 Modal。
### 6.1 类型选择
表单第一项使用单选卡片或共享 SegmentedControl:
```text
知识库类型
[本地] [Dify] [FastGPT] [RAGFlow]
```
只有选择本地时显示现有存储模式、图谱和本地说明。外部类型选中后显示两栏配置。
### 6.2 外部类型两栏布局
```text
┌──────────────────────────────┬──────────────────────────────┐
│ 知识库来源 │ 检索配置 │
│ │ │
│ Provider RAGFlow │ 通用配置 │
│ 外部实例 [研发平台 ▾] │ 返回片段数 [ 6 ] │
│ 远端知识库 [研发规范 ▾] │ 请求超时 [15 秒] │
│ [↻] │ 单片段上限 [4000] │
│ [手工填写知识库 ID] │ │
│ │ RAGFlow 配置 │
│ 显示名称 [研发规范 ]│ 相似度阈值 [0.20] │
│ 远端名称 研发规范 │ 向量相似度权重 [0.30] │
│ 远端 ID 7f31…c902 │ KNN Top K [1024] │
│ 测试查询 [部署网络要求 ]│ 图谱检索 [开关] │
│ │ Knowledge Compilation [开关]│
├──────────────────────────────┴──────────────────────────────┤
│ 将向研发知识平台发送测试查询。不会上传文件或完整会话。 │
│ [取消] [测试检索] [添加知识库] │
└─────────────────────────────────────────────────────────────┘
```
测试查询由用户填写,不自动生成,也不取用当前会话内容。“添加知识库”在真实检索请求
成功前禁用;成功返回零条结果仍可添加,但界面显示“检索成功,未找到匹配片段”。验证结果
在底部说明区展示,不用成功 Alert 撑高表单。
添加成功后沿用本地知识库行为,把新绑定加入当前聊天选择,不重新启用其他已取消知识库。
### 6.3 目录下拉框
- 选择实例后自动打开加载状态,不要求再点击“读取”。
- 使用可搜索 Select,选项显示名称、远端短 ID 和可用状态。
- 右侧刷新使用刷新图标按钮,Tooltip 为“刷新知识库列表”。
- 加载时保持控件稳定尺寸,显示“正在读取知识库…”。
- 目录为空显示“当前实例没有可访问的知识库”。
- 403 或不支持列表时显示原因和“手工填写知识库 ID”。
- 列表失败后显示“重试”,不自动切换到手工模式。
### 6.4 手工模式
```text
远端知识库 ID [ ]
显示名称 [ ]
[验证知识库]
```
验证成功后显示远端名称和 Provider 返回的摘要。返回自动列表不会丢弃已输入 ID,切换前
如有未保存输入须确认。
## 7. 配置面板
右侧配置固定分为“通用配置”和“{Provider} 配置”,不创建嵌套卡片。高级字段可以使用
一个折叠区,但核心检索方式、阈值和 RAGFlow 图谱检索保持直接可见。
控件选择:
- 开关:图谱检索、Score 阈值启用、Rerank、使用 Dify 知识库默认配置。
- Select 或 SegmentedControl:少量固定检索方式。
- 数字输入或 Stepper:结果数、Token、Top K、超时。
- Slider 加数字输入:0 至 1 的阈值和权重,二者保持同步。
- Metadata 条件:初始版本不提供自由 JSON 编辑器。
字段显隐由 GoodBuddy 内置 Provider 描述和 Main 返回的能力状态共同决定。服务端返回的
任意字符串不得变成 HTML、控件标签或帮助链接。
### 7.1 RAGFlow 图谱文案
开关名称:`图谱检索`
说明:`检索远端知识库已经生成的图谱内容,不会创建或更新图谱。`
只有远端详情或受控探测表明图谱已经构建时,该开关才可用。证据缺失时显示“未确认远端
图谱状态”并禁用。Knowledge Compilation 单独显示为 `包含 Knowledge Compilation`,默认
关闭,不把它和旧 GraphRAG 合成同一开关。
## 8. 外部知识库详情
选中外部绑定后,现有详情区按来源类型裁剪:
```text
研发规范 RAGFlow · 远端检索
研发知识平台 / 远端知识库 7f31…c902
[概览] [检索配置] [检索测试]
```
### 8.1 概览
显示 Provider、实例、远端名称、远端 ID、连接状态、最近成功检索和数据位置。操作包括:
- 刷新远端信息。
- 更换远端知识库。
- 编辑 GoodBuddy 显示名称。
- 从 GoodBuddy 移除。
不显示导入文件、添加目录、添加网页、同步、分块、重建索引和本地图谱入口。
### 8.2 检索配置
复用创建向导右侧配置面板。存在失效字段时,页头显示“配置需要确认”,字段附近说明
Provider 版本变化,保存按钮保持禁用直到用户处理。
### 8.3 检索测试
复用现有检索测试工作台的查询、结果和焦点行为,但外部结果采用 Provider 诊断:
```text
RAGFlow · 研发知识平台
总耗时 642 ms · 返回 6 条 · 保留 6 条
1 部署规范.pdf
第四章 网络要求…
Provider 分数 0.82 · 文档 ID 98ab…
```
外部测试不显示 FTS/CJK/本地向量扫描等本地通道,也不提供依赖本地分块的“查看上下文”。
## 9. 聊天知识范围
现有多选列表保留一个选择面,只在每行增加来源:
```text
[✓] 产品资料 本地
[✓] 研发规范 RAGFlow · 研发知识平台
[ ] 客服知识 FastGPT · 客服平台
```
- 不按 Provider 创建多套选择器。
- 不可用绑定保留显示但禁用勾选,并给出认证失效或目标不存在原因。
- 当前会话已选绑定变为不可用时,不静默移除 ID;发送前提示该知识库本次无法检索。
## 10. 执行状态和引用
活动状态:
```text
正在检索“研发规范”
RAGFlow · 研发知识平台 · 已发送当前检索词
```
部分失败:
```text
已检索 3 个知识库,2 个成功,1 个超时
[查看详情]
```
引用:
```text
部署规范.pdf / 网络要求
研发规范 · RAGFlow · 研发知识平台
```
引用详情显示远端文档名、ID、片段、Provider 分数和实际返回的定位。未完成 URL 安全设计前,
不显示“打开远端来源”。
## 11. 删除确认
移除绑定:
```text
从 GoodBuddy 移除“研发规范”?
这会删除本机绑定和检索配置,不会删除 RAGFlow 中的知识库或文档。
[取消] [移除]
```
删除有绑定的实例:
```text
“研发知识平台”仍被 3 个知识库使用
删除实例会同时从 GoodBuddy 移除这些绑定。远端数据不会改变。
[取消] [查看知识库] [删除实例和本地绑定]
```
破坏性主操作使用 `danger-solid`,默认焦点放在“取消”。
## 12. 可访问性与响应式
- 常规宽度两栏使用稳定 Grid;小于 `960px` 时改为单栏,顺序为来源、通用配置、Provider 配置。
- 小于 `720px` 时外部实例表格转为单列列表,行操作保留菜单按钮和完整可访问名称。
- Modal、创建向导、下拉框和折叠区支持完整键盘操作。
- 异步列表和测试状态使用 `aria-live="polite"`;错误使用与字段关联的 `role="alert"`。
- 图标按钮必须提供 Tooltip 和 `aria-label`。
- 状态不只靠颜色;加载、成功、受限和失败均包含文字。
- 长实例名、地址、远端名称和 ID 使用单行省略,完整值可通过 Tooltip 或详情查看。
- 切换类型、实例或退出时存在有效草稿,应按全局离开保护规则确认。
## 13. 文案表
| 场景 | 文案 |
| --- | --- |
| 页面操作 | 管理外部实例 |
| 创建类型 | 本地 / Dify / FastGPT / RAGFlow |
| 创建主操作 | 添加知识库 |
| 列表加载 | 正在读取知识库… |
| 列表受限 | 当前凭据不能读取知识库列表,可手工填写知识库 ID。 |
| 远端状态 | 远端可检索 |
| 移除操作 | 从 GoodBuddy 移除 |
| 图谱开关 | 图谱检索 |
| 测试说明 | 测试只发送当前查询,不会调用 GoodBuddy 模型或修改远端内容。 |
产品文案不使用“同步外部知识库”“导入 Dify 知识库”或“创建远端知识库”,因为这些动作
都不是本功能的实际行为。
## 14. 需求追踪
| UI 区域 | 需求 | 场景 |
| --- | --- | --- |
| 页面标题与统一列表 | `EK-FR-01`、`EK-FR-10` | `EK-US-C1` |
| 外部实例管理与表单 | `EK-FR-02`、`EK-FR-03`、`EK-FR-15`、`EK-FR-16` | `EK-US-A1` 至 `EK-US-A3` |
| 新建知识库向导 | `EK-FR-04` 至 `EK-FR-09` | `EK-US-B1` 至 `EK-US-B4` |
| 外部详情与检索测试 | `EK-FR-12`、`EK-FR-13` | `EK-US-C3`、`EK-US-D1` 至 `EK-US-D4` |
| 聊天范围、状态和引用 | `EK-FR-11`、`EK-FR-12`、`EK-FR-14` | `EK-US-C1` 至 `EK-US-C4` |