跳到主要内容

外部 Wiki 同步

通过外部 Wiki 连接器,可以将 Wiki.js 页面、GitLab 仓库文件或 GitLab 项目 Wiki 页面绑定到知识库。绑定后的内容会转换为普通知识文档并参与通用 RAG 检索, 系统还会定时检查远端版本,在内容变化后自动更新正文和索引。

支持的连接器

连接器可导入内容添加资料时选择访问凭据
Wiki.jsWiki.js 页面页面或目录Wiki.js API Key
GitLab RepoGitLab 仓库中的支持文件仓库、分支和文件GitLab AppKey / Access Token
GitLab WikiGitLab 项目的 Wiki 页面仓库和 Wiki 页面GitLab AppKey / Access Token

Wiki.js 当前支持 2.x,最低版本 2.5.0。Wiki.js 3.x 及 2.5.0 之前的版本不在当前兼容范围内。

GitLab Repo 支持以下文件扩展名:

pdf, doc, docx, ppt, pptx, xls, xlsx, csv, txt, md, markdown

目录仅用于浏览文件,不会作为文档导入。空文件、不支持的文件类型以及超过知识库 上传大小限制的文件不能绑定。Git LFS 指针文件也不能绑定,因为仓库 API 返回内容 不包含指针引用的实际二进制文件。


工作方式

外部 Wiki 功能由三部分组成:

组成位置说明
连接管理设置 → 集成 → 外部 Wiki保存连接器类型、站点地址和加密凭据
资料绑定知识库 → 添加文档 → 外部 Wiki选择远端页面或文件,每项生成一篇同步文档
定时同步后台定时任务比较远端版本,仅更新发生变化的文档

与一次性网页导入不同,外部 Wiki 是持续绑定关系。再次绑定相同连接、仓库、 分支和资源时会复用已有文档,不会生成重复条目。

导入完成后使用知识库的通用索引和检索能力,不需要为 Wiki.js 或 GitLab 配置专用检索 Skill。


前置条件

通用条件

  • Wegent 后端能够访问目标 Wiki.js 或 GitLab 地址。
  • 当前用户拥有目标知识库的编辑权限。
  • 目标连接可以使用 HTTP 或 HTTPS;站点地址必须是后端实际能够连接的地址。

Wiki.js

  • Wiki.js 版本为 2.5.0 或更高的 2.x。
  • Admin → API 创建 API Key,其权限组包含:
    • read:pages
    • read:source
    • manage:pages,或包含 delete:pages 的权限组

GitLab Repo 和 GitLab Wiki

  • 准备能够读取目标项目的 GitLab Access Token。产品界面中称为 GitLab AppKey / Access Token
  • 推荐最小权限为 read_api
  • Token 对目标项目具有读取权限。GitLab Repo 还需要读取仓库、分支和文件; GitLab Wiki 需要读取项目 Wiki。
  • 可以使用 GitLab.com 或自建 GitLab,站点地址可为 HTTP 或 HTTPS。

凭据通过 PRIVATE-TOKEN 请求头发送,并加密存储在服务端;不会拼接到 URL 或显示在知识文档中。


配置外部 Wiki 连接

  1. 进入 设置 → 集成,找到 外部 Wiki
  2. 点击 新连接
  3. 填写连接名称并选择连接器类型。
  4. 根据连接器填写站点地址和凭据。
  5. 点击 测试连通
  6. 测试成功后点击 保存

配置 Wiki.js

  • 连接器类型Wiki.js
  • 站点地址:Wiki 根地址,例如 https://wiki.example.com,不要附加 /graphql
  • API Key:Wiki.js 后台创建的 API Key
  • 默认语言(可选):多语言站点用于路径解析,例如 zh

连接测试会检查页面列表、页面解析和正文读取,而不只是网络连通性。

配置 GitLab Repo

  • 连接器类型GitLab Repo
  • 站点地址:GitLab 根地址,例如 https://gitlab.example.comhttp://gitlab.internal,不要附加 /api/v4
  • API Key:GitLab AppKey / Access Token

连接测试会调用 GitLab API 获取当前 Token 可访问的项目。测试成功但没有项目时, 界面会提示当前 AppKey 没有可访问项目。

配置 GitLab Wiki

  • 连接器类型GitLab Wiki
  • 站点地址:GitLab 根地址,不要附加 /api/v4
  • API Key:GitLab AppKey / Access Token

GitLab Wiki 与 GitLab Repo 可以使用同一个 GitLab 实例和 Token,但它们是两个 独立连接,添加资料时展示的资源类型不同。

连接管理注意事项

  • 仅修改连接名称、启用状态等非目标字段时,API Key 留空表示保留原凭据; 修改站点地址或连接器时必须重新输入 API Key,系统不会把旧凭据发送到新目标。
  • 停用连接后,系统停止远端读取和同步;最近一次成功同步的本地正文和索引仍可使用。
  • 删除连接前必须先解除引用该连接的全部同步文档。
  • 连接器类型决定已绑定资源的身份和解析方式。需要切换类型时,建议新建连接并重新绑定, 不要把已有连接直接改成另一种连接器。

添加 Wiki.js 页面

  1. 打开目标知识库,点击 添加文档 → 外部 Wiki
  2. 选择 Wiki.js 连接。
  3. 在页面树中选择需要绑定的页面。
  4. 点击 绑定选中

页面选择器支持按标题或路径搜索、全选、取消全选和目录选择。当站点页面数超过 服务端浏览上限时,会显示截断提示并加载最近更新的页面。


添加 GitLab Repo 文件

  1. 打开目标知识库,点击 添加文档 → 外部 Wiki
  2. 选择 GitLab Repo 连接。
  3. 仓库 下拉框选择目标项目。
  4. 分支 下拉框选择目标分支。默认优先选择项目默认分支。
  5. 展开目录并勾选需要同步的文件。
  6. 点击 绑定选中

文件选择器只允许选择受支持的文件类型。目录用于逐层浏览,不能作为知识文档导入。 绑定身份包含连接、仓库、分支和文件路径,因此:

  • 同一路径在不同分支中是不同的同步文档。
  • 文件改名会被视为旧文件删除和新文件出现,需要重新绑定新路径。
  • 切换项目或分支后,选择器会清除上一范围中的临时选择。

绑定后系统下载文件原始内容,复用知识库现有的附件解析、转换和索引流程。


添加 GitLab Wiki 页面

  1. 打开目标知识库,点击 添加文档 → 外部 Wiki
  2. 选择 GitLab Wiki 连接。
  3. 仓库 下拉框选择目标项目。
  4. 在 Wiki 页面列表中选择需要同步的页面。
  5. 点击 绑定选中

GitLab Wiki 页面属于项目,不需要选择分支。页面会按其格式转换为 Markdown、 AsciiDoc 或文本后进入知识库索引流程。

如果项目没有启用 Wiki、Wiki 为空,或者 Token 无权读取 Wiki,页面列表将为空 或显示对应错误。


绑定结果和文档展示

结果说明
已绑定 N 个新资源已创建同步文档,后台开始读取和索引
已重新同步 N 个已存在的资源触发了正文刷新
正在处理中,本次跳过文档仍处于转换或索引流程,没有重复派发任务

知识库文档列表会同时显示:

  • 文件类型,例如 MDPDF
  • 连接器类型和图标,例如 wikijsgitlab-repogitlab-wiki
  • 最近一次成功完成索引的时间。

添加文档 → 外部 Wiki → 已绑定文档 中,每条文档也会显示自己的连接器 名称和图标。切换当前连接不会改变其他已绑定文档的连接器标识。


定时同步机制

定时同步默认关闭。设置 EXTERNAL_DOC_SYNC_ENABLED=true 后,后台默认每天 UTC 19:00(北京时间次日凌晨 3:00)执行巡检。该开关不影响手动导入和手动同步。

每次巡检会:

  1. 分批扫描所有已绑定的外部 Wiki 文档。
  2. 按连接和资源范围调用对应连接器。
  3. 比较远端版本、已下载正文版本和已建立索引版本。
  4. 仅为发生变化或索引缺失的文档派发任务。

不同连接器使用不同的远端版本依据:

连接器版本依据
Wiki.js页面 updatedAt
GitLab Repo文件 Blob ID
GitLab Wiki页面标题、格式和正文计算出的内容哈希
远端状态系统行为
版本无变化且索引正常不更新文档
远端内容变化重新下载正文并重建索引
正文已是最新但索引缺失使用现有正文重建索引
页面或文件已删除标记源文档不存在,保留最近一次成功索引
仓库或分支不可访问标记同步失败,保留现有内容
连接不可用、权限失败或限流标记同步失败,后续巡检自动重试

检测到更新时,任务日志会记录文档 ID、知识库 ID、文档名、连接器、连接 ID、 资源路径、前后版本和更新动作,不记录 API Key 或文档正文。

也可以在文档详情中手动执行 同步,立即重新获取远端内容。文档正在处理时, 系统会跳过重复任务。


源资源被删除或移动

远端页面或文件被删除后,系统不会自动删除本地知识文档,而是标记源资源不存在:

  • 最近一次成功同步的正文和索引继续保留,Agent 仍可检索历史内容。
  • 源资源恢复后,后续巡检会自动恢复同步。
  • 确认不再需要时,可以在已绑定文档列表中解除绑定。

GitLab Repo 文件改名或移动后,原路径按删除处理。新路径具有新的资源身份,需要 重新选择并绑定。

如果整个 GitLab 项目、分支或 Wiki 权限发生变化,系统会标记同步失败而不是删除 本地内容。权限恢复后会在后续巡检中重试。


管理操作

操作位置说明
查看绑定添加文档 → 外部 Wiki → 已绑定文档查看文档名称、连接器和同步状态
解除绑定已绑定文档 → 解除绑定删除本地同步文档及其索引
手动同步文档详情 → 同步立即拉取远端正文并重建索引
停用连接设置 → 集成 → 外部 Wiki停止远端读取和自动同步
删除连接设置 → 集成 → 外部 Wiki必须先解除所有引用文档

每个用户管理自己的外部 Wiki 连接。绑定和解除绑定需要目标知识库的编辑权限; 同步文档的可见性与知识库中的普通文档一致。


常见问题

Q:GitLab 连接成功,但没有可选仓库?

确认 Token 具有 read_api 权限,并且 Token 所属用户或访问令牌能够读取目标项目。 项目列表只展示当前 Token 可访问的项目。

Q:GitLab Repo 中看不到某个文件?

确认选择了正确的仓库和分支,并检查文件扩展名是否在支持列表中。目录、空文件、 无扩展名文件和超出知识库上传大小限制的文件不能导入。

Q:GitLab Wiki 为什么不需要选择分支?

GitLab 项目 Wiki 由独立的 Wiki API 管理,不按代码仓库分支选择。

Q:是否支持 HTTP 或内网 GitLab?

支持。系统不限制 GitLab 必须使用 HTTPS,也不限制特定域名或网段;只要 Wegent 后端能够连接该地址并且 Token 有权限即可。

Q:远端更新后多久同步?

最迟在下一次每日巡检同步。需要立即生效时,可以在文档详情中执行 同步

Q:文档一直显示“排队中”?

后台任务按队列执行。超过 30 分钟仍未变化时,可在详情中查看失败原因并重试。

Q:同一个资源可以绑定到多个知识库吗?

可以。每个知识库拥有独立的同步文档和索引。


服务端配置参考

环境变量默认值说明
EXTERNAL_DOC_SYNC_ENABLEDfalse外部文档定时同步开关
EXTERNAL_DOC_SYNC_CRON0 21 * * *巡检调度(UTC crontab)
EXTERNAL_DOC_SYNC_SCAN_BATCH_SIZE500每批扫描的本地文档数
EXTERNAL_DOC_SYNC_RUN_MAX_DOCUMENTS10000单次运行最多处理文档数
EXTERNAL_DOC_SYNC_TIME_BUDGET_SECONDS2700单次运行时间预算(秒)
WIKI_SYNC_REMOTE_BATCH_SIZE500每批远端资源探测上限
WIKI_TREE_MAX_PAGES5000Wiki.js 页面选择器的加载上限
MAX_UPLOAD_FILE_SIZE_MB100GitLab Repo 等知识文档的单文件大小上限
REPOSITORY_READ_TIMEOUT_SECONDS15GitLab API 单次读取超时(秒)
EXTERNAL_WIKI_DOWNLOAD_TIMEOUT_SECONDS300单个 GitLab 文件或 Wiki 页面下载超时
KNOWLEDGE_ATTACHMENT_ORPHAN_RETENTION_HOURS24孤儿附件删除前的安全保留时间
KNOWLEDGE_ATTACHMENT_ORPHAN_SCAN_BATCH_SIZE200每轮孤儿附件扫描上限
KNOWLEDGE_ATTACHMENT_ORPHAN_SCAN_INTERVAL_SECONDS3600孤儿附件扫描间隔(秒)

🔗 相关文档