Files
goodbuddy/docs/features/knowledge-base/external-knowledge-prd.md
T

14 KiB

外部知识库接入 PRD

文档信息

项目 内容
状态 设计稿
版本 0.1
日期 2026-09-03
适用产品 GoodBuddy 桌面端
关联逻辑 外部知识库逻辑设计
关联界面 外部知识库 UI 设计
技术设计 外部知识库技术设计

1. 背景

不少企业已经在内网部署 Dify、FastGPT 或 RAGFlow,并在其中维护制度、产品、研发 和客服知识。继续要求用户把相同资料导入 GoodBuddy,会产生重复存储、版本分叉和 额外维护成本。

GoodBuddy 需要把这些已有知识库加入当前知识库列表和聊天检索范围。外部系统只 承担知识存储与检索,问题理解、上下文组织、模型回答、Agent 和工具执行仍由 GoodBuddy 负责。

2. 产品决策

  1. 外部知识库属于现有“知识库”功能,不新增一级页面,也不放入全局设置中心。
  2. 知识库页面标题区增加“管理外部实例”;现有“新建知识库”向导增加知识库类型。
  3. 一个外部实例代表一个 Provider 服务地址和一组凭据,可绑定多个远端知识库。
  4. 一个外部知识库绑定在 GoodBuddy 中仍是一个 KnowledgeBase,可以进入现有聊天 范围、每次先检索、模型按需检索和检索测试流程。
  5. 外部知识库保持远端检索,不批量同步或本地索引远端文档、分块、向量和图谱,也不 显示“已同步”。实际进入回答的有界片段和引用随会话保存在本机,并遵循会话删除规则。
  6. Dify、FastGPT 和 RAGFlow 只使用知识库列表、详情和检索接口。App、Chat、 Assistant、Workflow 和 Agent API 均不接入。
  7. 用户点击“添加”只创建本地绑定,不在外部实例中创建知识库;移除绑定也不删除 远端知识库。
  8. 通用配置只包含跨 Provider 语义一致的选项。检索算法、阈值、重排和图谱开关 由 Provider 配置承担。
  9. Provider 专属字段由 GoodBuddy 内置适配器定义。外部服务器不能下发任意表单、 脚本或字段 Schema。
  10. API Key 在用户输入表单和受限 IPC 中短暂存在,由 Main 进程加密保存并用于请求; 保存后不回传 Renderer,也不进入 Runtime、日志、普通元数据和检索引用。

3. 目标

3.1 用户目标

  • 在知识库页面配置企业现有的 Dify、FastGPT 或 RAGFlow 实例。
  • 新建知识库时选择 Provider、实例和远端知识库,不手工复制资料。
  • 在同一知识库列表和聊天选择器中使用本地与外部知识库。
  • 按 Provider 能力调整检索参数,例如 RAGFlow 图谱检索。
  • 明确看到查询发送到哪个实例、检索是否成功以及引用来自哪里。
  • 连接失效后能更新凭据、重试或更换远端知识库,不丢失其他知识库配置。

3.2 产品目标

  • 保持现有知识库 ID 作为聊天和 Runtime 的统一授权单位。
  • 让三种 Provider 的结果进入同一有界证据与引用契约。
  • 保留每种 Provider 的有效检索能力,不用最低公共字段覆盖全部差异。
  • 将实例认证与知识库绑定分离,使一个实例可以服务多个绑定。
  • 对 Provider 版本差异、列表权限关闭和部分检索失败提供可诊断状态。

4. 非目标

本功能不包含:

  • 调用 Dify App、FastGPT 应用、RAGFlow Chat 或任何外部 Agent。
  • 使用外部系统生成最终回答或维护外部会话。
  • 在外部实例中创建、编辑、删除知识库、文档或分块。
  • 向外部实例上传文件、网页、剪贴板、完整会话或本地知识库内容。
  • 批量同步或本地索引外部文档、分块、Embedding、图谱或模型配置。回答实际引用的 有界片段仍会随会话保存在本机。
  • 跨实例复制、迁移或统一管理外部知识内容。
  • 企业 SSO、组织级凭据下发、文档级 ACL 映射或 ShareServer 管理策略。
  • 自定义脚本适配器和任意 HTTP 请求模板。兼容检索 API 需要独立设计。
  • 把不同 Provider 的原始分数解释成可直接比较的统一质量分数。

5. 核心对象

对象 定义 用户可执行操作
外部实例 Provider、服务地址、凭据和已探测能力 添加、测试、编辑、停用、删除
外部知识库目录项 实例列表接口返回的远端知识库摘要 刷新、选择
外部知识库绑定 GoodBuddy 知识库与远端知识库的只读关联 添加、改名、配置、测试、移除
Provider 配置 适配器支持的检索参数 查看、修改、恢复默认
标准化检索结果 Provider 结果转换后的片段、来源和诊断 查看、引用、提供给 Runtime

6. 主要流程

6.1 管理外部实例

  1. 用户在知识库页面点击“管理外部实例”。
  2. 页面列出实例名称、Provider、服务地址、状态和已绑定知识库数量。
  3. 用户添加实例,填写名称、Provider、服务地址和 API Key。
  4. “测试连接”分别验证服务可达、认证、知识库列表和检索能力。
  5. 用户保存后,API Key 被加密保存,列表只显示凭据已配置。

列表接口不可用但已知远端知识库 ID 可检索时,实例可以保存为“需手工指定知识库”。 服务不可达或认证失败时不得保存为可用实例;用户可以保留表单并修正。

6.2 添加外部知识库

  1. 用户点击现有“新建知识库”。
  2. 在“知识库类型”中选择“本地”、Dify、FastGPT 或 RAGFlow。
  3. 选择外部类型后,左侧选择同 Provider 的外部实例。
  4. GoodBuddy 自动读取远端知识库列表,并填入可搜索下拉框。
  5. 列表权限不可用时,用户可以手工填写远端知识库 ID。
  6. 用户选择一个远端知识库,填写 GoodBuddy 显示名称。
  7. 右侧展示通用配置和当前 Provider 的专属配置。
  8. 用户填写测试查询并执行一次有界检索;请求成功后创建本地绑定,零结果不算失败。

添加完成后沿用现有知识库规则,把新绑定加入当前聊天选择,但不会重新启用用户此前 取消的其他知识库。

6.3 使用外部知识库

外部绑定出现在现有知识库列表和聊天知识范围中,持续显示 Provider 与实例名称。 检索请求只发送本次查询文本和该绑定已保存的检索配置。返回片段经过 Main 校验、 截断和标准化后,才作为不可信证据提供给 Runtime。

一次请求选择多个知识库时,本地与外部检索可以并行。单个外部知识库失败不扩大 检索范围,也不切换其他实例;其他知识库成功时可继续回答,并显示部分失败。

6.4 编辑和移除

  • 修改显示名称只影响 GoodBuddy 本地名称。
  • 修改 Provider 配置只影响后续检索,不写回远端知识库。
  • 更换远端知识库属于重新绑定,保存前必须重新测试。
  • 删除外部实例前必须处理其所有绑定:取消,或明确移除这些本地绑定。
  • 移除绑定只删除 GoodBuddy 中的绑定和检索配置,不调用远端删除接口。已经保存在历史 会话中的引用继续可读,但不再提供依赖当前实例的刷新操作。

7. 功能需求

EK-FR-01 知识库页面入口

知识库页面必须同时提供“管理外部实例”和“新建知识库”。外部实例管理不得迁移到 全局设置中心或创建新的一级导航。

EK-FR-02 实例配置

实例必须包含唯一 ID、显示名称、Provider、规范化服务地址、凭据状态、启停状态、 最近测试结果和适配器能力快照。用户可以使用 keep、replace、clear 语义更新凭据。

EK-FR-03 分项连接测试

连接测试必须区分服务可达、认证、列表读取和测试检索。新增实例尚未选择知识库时, 测试检索显示“绑定知识库时验证”,不能伪装成已通过。测试错误应包含可处理原因, 不得返回凭据、Authorization、完整响应正文或内部堆栈。

EK-FR-04 远端目录读取

选择实例后自动读取有界、可分页的远端知识库列表。列表支持加载、刷新、搜索、空结果、 权限不足和失败状态,且异步旧响应不得覆盖当前实例结果。

EK-FR-05 手工指定远端 ID

列表接口不受支持或没有权限时,允许手工填写远端知识库 ID 和显示名称。保存前必须通过 该 ID 的详情或检索验证;不能只验证字符串非空。

EK-FR-06 知识库类型

新建向导必须提供“本地”、Dify、FastGPT、RAGFlow 四种类型。本地类型保持现有创建、 存储模式、图谱和导入行为;外部类型不得显示本地分块、导入或索引设置。

EK-FR-07 两栏配置

外部类型的创建向导在常规宽度使用左右两栏。左侧负责 Provider、实例、远端知识库和 显示名称;右侧负责通用配置与 Provider 专属配置。窄窗口按来源、通用配置、专属配置 顺序堆叠。

EK-FR-08 通用配置

通用配置至少包含最终返回片段数、请求超时和单片段最大字符数。数值必须有固定范围, 由 Main 再次校验。Provider 的 Top K、Token 预算或 Page Size 不得冒充同一字段。

EK-FR-09 Provider 专属配置

Provider 配置使用受版本控制的判别联合。界面只展示当前适配器和已确认实例版本支持的字段; 不支持的已保存字段必须明确显示为失效配置并阻止静默提交。

EK-FR-10 统一知识库列表

外部绑定与本地知识库出现在同一列表,但必须显示 Provider、实例和“远端检索”状态。 外部绑定不得显示本地文档数、同步、分块、向量覆盖率或本地图谱状态。

EK-FR-11 统一检索范围

现有聊天知识范围、多选上限、auto 和 always 模式继续以 GoodBuddy 知识库 ID 工作。 Runtime 只能获得标准化后的有界证据,不能获得实例地址、API Key 或 Provider 原始响应。

EK-FR-12 引用来源

每条外部结果必须保留 Provider、实例 ID、远端知识库 ID、文档名称和片段。远端文档 ID、 远端片段 ID、页码、URL、分数及其他定位只在 Provider 实际返回时保存,不得补造。

EK-FR-13 检索测试

现有检索测试入口支持外部绑定。页面显示生效配置、总耗时、Provider 耗时、返回数量、 截断状态和脱敏错误。外部测试不创建聊天、调用 GoodBuddy LLM 或修改远端内容。

EK-FR-14 故障隔离

认证失败、超时、限流、目标删除、版本不兼容和响应无效必须分别报告。多知识库检索中, 单项失败不得改写为零结果,也不得阻止已成功证据进入回答。

EK-FR-15 生命周期边界

删除实例、移除绑定、清除凭据和更换远端目标必须经过明确确认。任何操作都不得调用 Provider 的远端创建、更新、上传或删除接口。

EK-FR-16 网络与数据说明

界面必须说明查询会发送到所选实例,并列出不会发送的内容。请求遵循用户配置的服务地址 和当前内网兼容模式,不自动切换地址、Provider 或公共云端点。HTTP 或放宽证书校验会 传输 API Key,测试和保存实例前必须显示风险并取得针对当前地址的明确确认。

8. Provider 初始范围

Provider 目录能力 检索能力 首批专属配置
Dify 知识库列表与详情 Dataset Retrieve 使用知识库默认配置,或完整覆盖检索方式、Top K、Score 阈值及 Rerank 模式
FastGPT 知识库层级列表与详情 Dataset Search Test 搜索模式、Token 上限、相似度、Rerank
RAGFlow Dataset 列表与详情 Retrieval 相似度、向量权重、KNN Top K、Rerank、图谱检索、Knowledge Compilation

“首批专属配置”表示适配器允许表达的字段,不保证每个实例版本都支持。具体显隐由能力 探测和逻辑设计共同决定。

9. 产品验收

  1. 用户可以在知识库页面完成三种 Provider 的实例添加、连接测试、编辑和删除。
  2. 每种 Provider 至少通过一个真实自部署实例完成列表读取、绑定和检索。
  3. 列表权限关闭时,可以通过手工 ID 添加并验证一个可检索知识库。
  4. 本地与外部知识库可以同时进入一次聊天检索,引用来源可区分。
  5. RAGFlow 支持时可以开启图谱检索;不支持时不发送该字段。
  6. 外部知识库详情不出现本地导入、同步、分块和索引操作。
  7. 删除绑定或实例不会改变远端知识库和文档。
  8. 保存完成后的 Renderer 状态、Runtime、SQLite 普通元数据、日志和错误中均找不到明文 API Key。
  9. 超时、401/403、404、429、5xx 和响应格式错误都有独立测试并显示准确状态。
  10. 中断、切换实例或关闭向导后,过期列表与测试响应不会写入当前表单。
  11. FastGPT 页面说明检索会记录远端 API 使用情况,并可能产生 Embedding 或 Rerank 用量。
  12. HTTP 或放宽证书校验的实例未经明确确认不能保存或发送 API Key。

10. 外部资料

以下链接用于核对初始适配范围,实施时仍须用受支持版本的真实实例和响应 fixture 验证: