agentic_huge_data_base / wiki
页面 Onyx · 3.1 连接器框架总览·DeepWiki 中文全文译文

3.1 · 连接器框架总览(Connector Framework Overview)

企业连接器与统一搜索 · 聚焦本章的模块关系、源码依据与实现要点。

项目Onyx 章节3.1 状态全文译文 模块界面与交互、认证、权限与安全、文档对象与元数据、检索、召回与索引
源码线索
  • backend/ee/onyx/connectors/perm_sync_valid.py
  • backend/ee/onyx/external_permissions/confluence/constants.py
  • backend/ee/onyx/external_permissions/confluence/group_sync.py
  • backend/ee/onyx/external_permissions/confluence/space_access.py
  • backend/onyx/background/indexing/checkpointing_utils.py
  • backend/onyx/connectors/confluence/connector.py
  • backend/onyx/connectors/confluence/onyx_confluence.py
  • backend/onyx/connectors/confluence/utils.py
  • backend/onyx/connectors/connector_runner.py
  • backend/onyx/connectors/factory.py
模块标签
  • 界面与交互
  • 认证、权限与安全
  • 文档对象与元数据
  • 检索、召回与索引
  • 配置治理

章节正文

连接器框架总览

连接器框架概述

相关源文件

本章引用的主要源码文件:

  • backend/ee/onyx/connectors/perm_sync_valid.py
  • backend/ee/onyx/external_permissions/confluence/constants.py
  • backend/ee/onyx/external_permissions/confluence/group_sync.py
  • backend/ee/onyx/external_permissions/confluence/space_access.py
  • backend/onyx/background/indexing/checkpointing_utils.py
  • backend/onyx/connectors/confluence/connector.py
  • backend/onyx/connectors/confluence/onyx_confluence.py
  • backend/onyx/connectors/confluence/utils.py
  • backend/onyx/connectors/connector_runner.py
  • backend/onyx/connectors/factory.py
  • backend/onyx/connectors/interfaces.py
  • backend/onyx/connectors/mock_connector/connector.py
  • backend/onyx/connectors/zendesk/connector.py
  • backend/tests/daily/connectors/google_drive/test_resolver.py
  • backend/tests/daily/connectors/zendesk/test_zendesk_connector.py
  • backend/tests/daily/connectors/zendesk/test_zendesk_data.json
  • backend/tests/unit/ee/onyx/external_permissions/confluence/test_space_access.py
  • backend/tests/unit/onyx/connectors/confluence/test_confluence_checkpointing.py
  • backend/tests/unit/onyx/connectors/confluence/test_onyx_confluence.py
  • backend/tests/unit/onyx/connectors/utils.py
  • backend/tests/unit/onyx/connectors/zendesk/test_zendesk_checkpointing.py
  • backend/tests/unit/onyx/connectors/zendesk/test_zendesk_rate_limit.py
  • backend/tests/unit/onyx/server/test_upload_files.py
  • [web/src/app/admin/connectors/[connector]/AddConnectorPage.tsx](web/src/app/admin/connectors/[connector]/AddConnectorPage.tsx)
  • [web/src/app/admin/connectors/[connector]/pages/Advanced.tsx](web/src/app/admin/connectors/[connector]/pages/Advanced.tsx)
  • [web/src/app/admin/connectors/[connector]/pages/ConnectorInput/FileInput.tsx](web/src/app/admin/connectors/[connector]/pages/ConnectorInput/FileInput.tsx)
  • [web/src/app/admin/connectors/[connector]/pages/DynamicConnectorCreationForm.tsx](web/src/app/admin/connectors/[connector]/pages/DynamicConnectorCreationForm.tsx)
  • [web/src/app/admin/connectors/[connector]/pages/utils/google_site.ts](web/src/app/admin/connectors/[connector]/pages/utils/google_site.ts)
  • web/src/app/admin/indexing/status/CCPairIndexingStatusTable.tsx
  • web/src/app/admin/layout.tsx
  • web/src/components/admin/connectors/AccessTypeForm.tsx
  • web/src/components/admin/connectors/AccessTypeGroupSelector.tsx
  • web/src/components/icons/icons.tsx
  • web/src/lib/connectors/connectors.tsx
  • web/src/lib/connectors/credentials.ts
  • web/src/lib/sources.ts
  • web/src/lib/types.ts

连接器框架为将外部数据源集成到 Onyx 提供了架构基础。它定义了一个基于插件的系统,支持多种入库模式、用于动态实例化的工厂模式,以及一个统一的 ValidSources 注册表,作为 60 多个受支持数据源的唯一真实来源。

InputType 和连接器接口

ValidInputTypes 类型定义了决定连接器如何获取和同步数据的入库模式。这些类型直接映射到连接器类必须实现的特定后端接口。

InputType 到代码实体的映射

Onyx · InputType 和连接器接口 · 图 1
Onyx · InputType 和连接器接口 · 图 1

来源: backend/onyx/connectors/interfaces.py:43-156, web/src/lib/types.ts:168-172

InputType 描述
InputType用途连接器接口使用场景
load_state一次性批量数据导入LoadConnector网页抓取、文件上传、静态数据导入 backend/onyx/connectors/interfaces.py:118-122
poll增量同步PollConnectorCheckpointedConnector针对带有修改时间戳的数据源进行持续同步 backend/onyx/connectors/interfaces.py:125-130
event事件驱动的实时更新无(由工厂处理)基于 Webhook 的连接器、实时数据流 backend/onyx/connectors/factory.py:82-84
slim_retrieval联合搜索或仅 ID 同步SlimConnector查询时检索或仅元数据索引 backend/onyx/connectors/interfaces.py:134-142

前端通过 isLoadState 工具函数识别使用 load_state 模式的连接器:

export function isLoadState(connector_name: string): boolean {
  const loadStateConnectors = ["web", "xenforo", "file", "airtable"];
  if (loadStateConnectors.includes(connector_name)) {
    return true;
  }
  return false;
}

来源: web/src/lib/connectors/connectors.tsx:7-15

连接器工厂模式

连接器工厂根据 DocumentSourceInputType 动态加载并实例化连接器类。这使得系统可以扩展到数十个连接器,而不会导致核心应用程序启动时变得臃肿。

工厂执行流程

Onyx · 连接器工厂模式 · 图 2
Onyx · 连接器工厂模式 · 图 2

来源: backend/onyx/connectors/factory.py:34-138

关键工厂函数
  • identify_connector_class(source, input_type):获取某个数据源的类引用。它使用 _load_connector_class 来延迟导入模块,并将类缓存到 _connector_cachebackend/onyx/connectors/factory.py:92-102
  • instantiate_connector(...):主要入口点。它识别类、实例化该类,并处理凭证加载或提供者注入。它还会为文件持久化连接 raw_file_callback backend/onyx/connectors/factory.py:105-138
  • _validate_connector_supports_input_type(...):确保加载的类实现了 InputType 所需的接口(例如,当请求 POLL 时,检查连接器是否为 PollConnectorbackend/onyx/connectors/factory.py:58-90

ConnectionConfiguration 模式

前端使用声明式模式为每个连接器生成配置界面。这在 web/src/lib/connectors/connectors.tsx 中定义。

配置结构

ConnectionConfiguration 接口定义了连接器设置所需的字段,包括标准和高级设置:

export interface ConnectionConfiguration {
  description: string;
  subtext?: string;
  initialConnectorName?: string;
  values: (BooleanOption | ListOption | TextOption | NumberOption | SelectOption | MultiSelectOption | FileOption | TabOption)[];
  advanced_values: (BooleanOption | ListOption | TextOption | NumberOption | SelectOption | MultiSelectOption | FileOption | TabOption)[];
  overrideDefaultFreq?: number;
}

来源: web/src/lib/connectors/connectors.tsx:114-143

选项类型和数据流
选项类型接口用途
textTextOption用于 URL、ID 等的单行或文本区域输入 web/src/lib/connectors/connectors.tsx:67-72
selectSelectOption带有预定义 StringWithDescription 值的下拉菜单 web/src/lib/connectors/connectors.tsx:49-53
checkboxBooleanOption布尔切换开关 web/src/lib/connectors/connectors.tsx:79-82
tabTabOption复杂的分组配置(例如 GitHub 的"特定仓库"与"全部") web/src/lib/connectors/connectors.tsx:94-112
示例:GitHub 配置

GitHub 连接器配置使用 tab 选项在索引特定仓库或整个组织之间切换:

github: {
  description: "配置 GitHub 连接器",
  values: [
    { type: "text", label: "仓库所有者", name: "repo_owner", optional: false },
    {
      type: "tab",
      name: "github_mode",
      label: "我们应该从 GitHub 索引什么?",
      tabs: [
        { value: "repo", label: "特定仓库", fields: [...] },
        { value: "everything", label: "全部", fields: [...] }
      ]
    },
    // ...
  ]
}

来源: web/src/lib/connectors/connectors.tsx:184-248

凭证管理

凭证与连接器配置分离,以便在多个连接器实例之间重用。

凭证模板

credentialTemplates 对象定义了每个数据源所需凭证的 JSON 结构:

export const credentialTemplates: Record<ValidSources, any> = {
  github: { github_access_token: "" } as GithubCredentialJson,
  zendesk: {
    zendesk_subdomain: "",
    zendesk_email: "",
    zendesk_token: "",
  } as ZendeskCredentialJson,
  // ...
};

来源: web/src/lib/connectors/credentials.ts:284-315

多认证方式数据源

某些数据源(如 SharePoint 或 Google Drive)支持多种认证方式(例如,客户端密钥与证书,或 OAuth 与服务账号)。这通过模板中的 authMethods 来处理:

sharepoint: {
  sp_client_id: "",
  sp_directory_id: "",
  // ...
}

来源: web/src/lib/connectors/credentials.ts:210-216, web/src/lib/connectors/credentials.ts:325-354

数据源元数据

SOURCE_METADATA_MAP 为 UI 提供显示信息、图标和分类。

字段用途
icon数据源图标的 React 组件 web/src/lib/sources.ts:56
displayName用户友好的名称 web/src/lib/sources.ts:57
category分组(例如,Wiki、存储、消息) web/src/lib/sources.ts:58
federated布尔值,指示数据源是否支持无需索引的实时搜索 web/src/lib/sources.ts:62

来源: web/src/lib/sources.ts:55-72, web/src/lib/sources.ts:92-416

数据流:从 UI 到索引

  1. UI 配置:管理员从 SOURCE_METADATA_MAP 中选择一个数据源 web/src/lib/sources.ts:92
  2. 表单生成AddConnector 根据 connectorConfigs 渲染字段,并管理凭证链接 web/src/app/admin/connectors/[connector]/AddConnectorPage.tsx:129-182
  3. 持久化submitConnector 将配置发送到 /api/manage/admin/connector web/src/app/admin/connectors/[connector]/AddConnectorPage.tsx:75-127
  4. 实例化:后台工作进程调用 instantiate_connector() 来加载特定的类(例如 ConfluenceConnectorbackend/onyx/connectors/factory.py:105-138
  5. 校验:框架在开始工作前调用 validate_connector_settings(),并可选择性地调用 validate_perm_sync() backend/onyx/connectors/interfaces.py:71-90
  6. 入库:调用连接器的 poll_source()retrieve_all_slim_docs() 方法,生成 DocumentSlimDocumentHierarchyNode 对象 backend/onyx/connectors/interfaces.py:25-26

来源: backend/onyx/connectors/factory.py:105-138, backend/onyx/connectors/interfaces.py:71-90, web/src/app/admin/connectors/[connector]/AddConnectorPage.tsx:75-127