agentic_huge_data_base / wiki
页面 Onyx · 12.1 企业版特性·DeepWiki 中文全文译文

12.1 · 企业版特性(Enterprise Edition Features)

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

项目Onyx 章节12.1 状态全文译文 模块界面与交互、测试、发布与运维、接口与服务契约、系统架构
源码线索
  • .github/CODEOWNERS
  • .vscode/launch.json
  • AGENTS.md
  • CLAUDE.md
  • backend/ee/onyx/background/celery/apps/heavy.py
  • backend/ee/onyx/background/celery/tasks/ttl_management/tasks.py
  • backend/ee/onyx/background/celery/tasks/usage_reporting/tasks.py
  • backend/ee/onyx/configs/app_configs.py
  • backend/ee/onyx/db/query_history.py
  • backend/ee/onyx/db/scim.py
模块标签
  • 界面与交互
  • 测试、发布与运维
  • 接口与服务契约
  • 系统架构
  • 模型调用与提供方适配

章节正文

企业版特性

企业版功能

相关源文件

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

  • .github/CODEOWNERS
  • .vscode/launch.json
  • AGENTS.md
  • CLAUDE.md
  • backend/ee/onyx/background/celery/apps/heavy.py
  • backend/ee/onyx/background/celery/tasks/ttl_management/tasks.py
  • backend/ee/onyx/background/celery/tasks/usage_reporting/tasks.py
  • backend/ee/onyx/configs/app_configs.py
  • backend/ee/onyx/db/query_history.py
  • backend/ee/onyx/db/scim.py
  • backend/ee/onyx/db/usage_export.py
  • backend/ee/onyx/feature_flags/__init__.py
  • backend/ee/onyx/feature_flags/factory.py
  • backend/ee/onyx/feature_flags/posthog_provider.py
  • backend/ee/onyx/server/billing/api.py
  • backend/ee/onyx/server/billing/models.py
  • backend/ee/onyx/server/billing/service.py
  • backend/ee/onyx/server/license/api.py
  • backend/ee/onyx/server/middleware/tenant_tracking.py
  • backend/ee/onyx/server/query_history/api.py
  • backend/ee/onyx/server/reporting/usage_export_api.py
  • backend/ee/onyx/server/reporting/usage_export_generation.py
  • backend/ee/onyx/server/reporting/usage_export_models.py
  • backend/ee/onyx/server/scim/api.py
  • backend/ee/onyx/server/scim/models.py
  • backend/ee/onyx/server/scim/patch.py
  • backend/ee/onyx/server/scim/providers/__init__.py
  • backend/ee/onyx/server/scim/providers/base.py
  • backend/ee/onyx/server/scim/providers/okta.py
  • backend/ee/onyx/server/settings/__init__.py
  • backend/ee/onyx/server/tenants/api.py
  • backend/ee/onyx/server/tenants/billing.py
  • backend/ee/onyx/server/tenants/billing_api.py
  • backend/ee/onyx/server/tenants/models.py
  • backend/ee/onyx/server/tenants/product_gating.py
  • backend/ee/onyx/server/tenants/proxy.py
  • backend/ee/onyx/utils/posthog_client.py
  • backend/ee/onyx/utils/telemetry.py
  • backend/onyx/db/seeding/chat_history_seeding.py
  • backend/onyx/error_handling/__init__.py
  • backend/onyx/error_handling/error_codes.py
  • backend/onyx/error_handling/exceptions.py
  • backend/onyx/feature_flags/__init__.py
  • backend/onyx/feature_flags/factory.py
  • backend/onyx/feature_flags/flags.py
  • backend/onyx/feature_flags/interface.py
  • backend/onyx/file_store/postgres_file_store.py
  • backend/onyx/hooks/executor.py
  • backend/onyx/server/features/build/.gitignore
  • backend/scripts/chat_history_seeding.py
  • backend/tests/external_dependency_unit/db/test_usage_export_pairing.py
  • backend/tests/external_dependency_unit/feature_flags/__init__.py
  • backend/tests/integration/tests/query_history/test_usage_reports.py
  • backend/tests/integration/tests/reporting/test_usage_export_api.py
  • backend/tests/unit/ee/onyx/server/billing/test_billing_api.py
  • backend/tests/unit/ee/onyx/server/billing/test_billing_service.py
  • backend/tests/unit/ee/onyx/server/license/test_api.py
  • backend/tests/unit/ee/onyx/server/tenants/test_billing_api.py
  • backend/tests/unit/ee/onyx/server/tenants/test_product_gating.py
  • backend/tests/unit/ee/onyx/server/tenants/test_proxy.py
  • backend/tests/unit/onyx/connectors/confluence/test_rate_limit_handler.py
  • backend/tests/unit/onyx/db/test_scim_dal.py
  • backend/tests/unit/onyx/error_handling/test_exceptions.py
  • backend/tests/unit/onyx/file_store/test_delete_file.py
  • backend/tests/unit/onyx/server/__init__.py
  • backend/tests/unit/onyx/server/scim/__init__.py
  • backend/tests/unit/onyx/server/scim/conftest.py
  • backend/tests/unit/onyx/server/scim/test_group_endpoints.py
  • backend/tests/unit/onyx/server/scim/test_patch.py
  • backend/tests/unit/onyx/server/scim/test_providers.py
  • backend/tests/unit/onyx/server/scim/test_user_endpoints.py
  • backend/tests/unit/onyx/utils/test_telemetry.py
  • web/lib/opal/src/icons/arrow-up-circle.tsx
  • web/lib/opal/src/icons/organization.tsx
  • web/src/app/admin/billing/BillingDetailsView.tsx
  • web/src/app/admin/billing/CheckoutView.tsx
  • web/src/app/admin/billing/LicenseActivationCard.tsx
  • web/src/app/admin/billing/page.tsx
  • web/src/app/admin/groups/create/page.tsx
  • web/src/app/ee/admin/groups/create/page.tsx
  • web/src/components/GatedContentWrapper.tsx
  • web/src/components/PageSelector.tsx
  • web/src/lib/billing/interfaces.ts
  • web/src/lib/billing/svc.test.ts
  • web/src/lib/billing/svc.ts
  • web/src/refresh-components/inputs/InputNumber.tsx
  • web/src/refresh-pages/admin/GroupsPage/SharedGroupResources/ResourceContent.tsx
  • web/src/refresh-pages/admin/GroupsPage/SharedGroupResources/index.tsx
  • web/src/refresh-pages/admin/GroupsPage/shared.tsx

本文档记录了 Onyx 中可用的企业版(EE)功能。这些功能受 ENABLE_PAID_ENTERPRISE_EDITION_FEATURES 标志控制,并且需要有效的许可证。有关标准部署配置,请参见 2.1。有关身份验证配置,请参见 9.1。有关多租户数据库架构的详细信息,请参见 9.2

企业版功能包括多租户部署、高级权限同步、许可证执行、席位管理、云身份验证、SCIM 配置、计费/许可、查询历史分析和自定义选项。这些功能主要位于 ee/ 目录结构中。

功能标志与目录结构

企业版功能由 ENABLE_PAID_ENTERPRISE_EDITION_FEATURES 环境变量控制。启用后,应用程序通过 global_version.set_ee() 将版本设置为 EE。

Onyx · 功能标志与目录结构 · 图 1
Onyx · 功能标志与目录结构 · 图 1

目录结构

  • backend/ee/ - 所有企业版 Python 代码 AGENTS.md:158
  • backend/ee/onyx/configs/app_configs.py - EE 特定的配置,用于权限同步频率和许可 backend/ee/onyx/configs/app_configs.py:1-142
  • backend/ee/onyx/server/tenants/ - 多租户管理、配置和计费端点 backend/ee/onyx/server/tenants/billing_api.py:59
  • web/src/app/admin/billing/ - 企业版计费和许可证管理 UI web/src/app/admin/billing/page.tsx:90

来源:backend/ee/onyx/configs/app_configs.py:1-142AGENTS.md:158backend/ee/onyx/server/tenants/billing_api.py:59

多租户架构

多租户系统使单个 Onyx 部署能够服务多个隔离的组织(租户)。每个租户获得一个专用的 PostgreSQL 模式,以实现完全的数据隔离。该系统由 MULTI_TENANT 标志控制。

上下文管理: 系统使用 CURRENT_TENANT_ID_CONTEXTVAR 在请求处理期间将数据库会话限定到正确的模式 backend/ee/onyx/server/tenants/billing_api.py:54

租户产品门控

在多租户云部署中,可以根据租户的订阅状态对租户进行"门控"(限制访问)。

函数文件描述
store_product_gatingbackend/ee/onyx/server/tenants/product_gating.py:26将特定租户的 ApplicationStatus 存储在设置和 Redis 中。
update_tenant_gatingbackend/ee/onyx/server/tenants/product_gating.py:16维护 Redis 中的 GATED_TENANTS_KEY 集合,以实现快速查找。
is_tenant_gatedbackend/ee/onyx/server/tenants/product_gating.py:70O(1) 时间复杂度检查,判断租户 ID 是否存在于门控集合中。
overwrite_full_gated_setbackend/ee/onyx/server/tenants/product_gating.py:45批量操作,用于从控制平面同步整个门控租户集合。

来源:backend/ee/onyx/server/tenants/product_gating.py:16-74backend/ee/onyx/server/tenants/billing_api.py:54-55

计费和许可证管理

企业版包括许可证执行和基于席位的限制。如果 LICENSE_ENFORCEMENT_ENABLED 设置为 true,系统将阻止对门控或过期许可证的 API 访问 backend/ee/onyx/configs/app_configs.py:133-135

自托管与云许可

许可逻辑因部署类型而异 backend/ee/onyx/server/license/api.py:9-11

  1. 自托管:使用本地许可证密钥。可以通过云数据平面代理申领许可证,也可以为离线环境手动上传 backend/ee/onyx/server/license/api.py:109-186
  2. 云(多租户):通过控制平面管理许可,并通过 Redis 门控强制执行 backend/ee/onyx/server/tenants/billing_api.py:1-17
计费 API 端点

计费 API 为两种部署类型提供统一的访问:

  • GET /admin/billing/license:检索许可证状态、席位使用情况和过期日期 backend/ee/onyx/server/license/api.py:63
  • POST /admin/billing/license/claim:将 Stripe session_id 兑换为签名的许可证密钥 backend/ee/onyx/server/license/api.py:109
  • POST /admin/billing/checkout-session:生成 Stripe 结账 URL backend/ee/onyx/server/tenants/billing_api.py:147
  • POST /admin/billing/portal-session:生成 Stripe 客户门户 URL,用于订阅管理 backend/ee/onyx/server/tenants/billing_api.py:125
前端实现

计费仪表盘(/admin/billing)管理订阅状态之间的转换 web/src/app/admin/billing/page.tsx:90

Onyx · 前端实现 · 图 2
Onyx · 前端实现 · 图 2

来源:backend/ee/onyx/configs/app_configs.py:133-135backend/ee/onyx/server/license/api.py:63-186backend/ee/onyx/server/tenants/billing_api.py:125-168web/src/app/admin/billing/page.tsx:90-151

权限同步系统

企业版为各种数据源提供自动权限同步。这确保了 Onyx 中的 ACL(访问控制列表)与源系统保持一致。

同步频率

频率通过 backend/ee/onyx/configs/app_configs.py 中的环境变量以秒为单位配置。

文档同步频率(默认)组同步频率(默认)
Confluence30 分钟 24-2630 分钟 20-22
JIRA30 分钟 40-4230 分钟 44-46
Google Drive不适用5 分钟 52-54
GitHub5 分钟 61-635 分钟 65-67
Slack5 分钟 73-75不适用
Teams5 分钟 84-86不适用
SharePoint30 分钟 92-945 分钟 97-99

工作器配置: 系统使用 NUM_PERMISSION_WORKERS(默认值:2)来处理这些后台同步任务 backend/ee/onyx/configs/app_configs.py:77

来源:backend/ee/onyx/configs/app_configs.py:11-100

SCIM 配置

SCIM(跨域身份管理系统)2.0 配置允许 Okta 和 Azure AD 等身份提供商(IdP)自动管理用户和组。

SCIM 架构
Onyx · SCIM 架构 · 图 3
Onyx · SCIM 架构 · 图 3
关键组件
  • 服务发现/ServiceProviderConfig/Schemas 等无需身份验证的端点向 IdP 通告功能 backend/ee/onyx/server/scim/api.py:141-180
  • 用户/组 CRUD:用于管理资源的经过身份验证的端点 backend/ee/onyx/server/scim/api.py:190-639
  • 席位锁定:使用 PostgreSQL 建议锁(pg_advisory_xact_lock)确保在并发配置请求期间不会超过席位限制 backend/ee/onyx/server/scim/api.py:78-88
  • 补丁支持:实现 PATCH 操作,用于对用户和组属性进行部分更新 backend/ee/onyx/server/scim/api.py:358, 597

来源:backend/ee/onyx/server/scim/api.py:78-639backend/ee/onyx/server/scim/auth.py:20-33

查询历史分析

企业版提供详细的查询历史和使用分析,可通过管理面板访问。

后端处理

查询历史 API(/admin/chat-session-history)允许管理员查看和导出整个组织的聊天会话 backend/ee/onyx/server/query_history/api.py:199

  • 匿名化:支持 QueryHistoryType.ANONYMIZED,其中用户电子邮件被屏蔽 backend/ee/onyx/server/query_history/api.py:60, 168
  • 快照:将内部 ChatSession 模型转换为 ChatSessionSnapshot 对象,用于报告,包括消息历史记录和助手详细信息 backend/ee/onyx/server/query_history/api.py:126-157
  • CSV 导出:通过 Celery 任务异步导出历史记录 backend/ee/onyx/server/query_history/api.py:15-16

来源:backend/ee/onyx/server/query_history/api.py:15-196

分析和遥测

企业版通过 PostHog 为多租户云环境提供增强的遥测功能。

  • 客户端 IP 丰富:将客户端 IP 合并到 PostHog 事件中作为 $ip,以实现 GeoIP 丰富,同时将 PII 排除在应用程序日志之外 backend/ee/onyx/utils/telemetry.py:10-26
  • 事件捕获event_telemetry 函数捕获事件并立即刷新以确保送达 backend/ee/onyx/utils/telemetry.py:29-48
  • 用户识别identify_user 使用丰富的属性创建或更新 PostHog 人员档案 backend/ee/onyx/utils/telemetry.py:50-64

来源:backend/ee/onyx/utils/telemetry.py:10-64backend/ee/onyx/utils/posthog_client.py:1-47