402 lines
15 KiB
Markdown
402 lines
15 KiB
Markdown
# 外部知识库 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` |
|