企业版特性
企业版功能
相关源文件
本章引用的主要源码文件:
.github/CODEOWNERS.vscode/launch.jsonAGENTS.mdCLAUDE.mdbackend/ee/onyx/background/celery/apps/heavy.pybackend/ee/onyx/background/celery/tasks/ttl_management/tasks.pybackend/ee/onyx/background/celery/tasks/usage_reporting/tasks.pybackend/ee/onyx/configs/app_configs.pybackend/ee/onyx/db/query_history.pybackend/ee/onyx/db/scim.pybackend/ee/onyx/db/usage_export.pybackend/ee/onyx/feature_flags/__init__.pybackend/ee/onyx/feature_flags/factory.pybackend/ee/onyx/feature_flags/posthog_provider.pybackend/ee/onyx/server/billing/api.pybackend/ee/onyx/server/billing/models.pybackend/ee/onyx/server/billing/service.pybackend/ee/onyx/server/license/api.pybackend/ee/onyx/server/middleware/tenant_tracking.pybackend/ee/onyx/server/query_history/api.pybackend/ee/onyx/server/reporting/usage_export_api.pybackend/ee/onyx/server/reporting/usage_export_generation.pybackend/ee/onyx/server/reporting/usage_export_models.pybackend/ee/onyx/server/scim/api.pybackend/ee/onyx/server/scim/models.pybackend/ee/onyx/server/scim/patch.pybackend/ee/onyx/server/scim/providers/__init__.pybackend/ee/onyx/server/scim/providers/base.pybackend/ee/onyx/server/scim/providers/okta.pybackend/ee/onyx/server/settings/__init__.pybackend/ee/onyx/server/tenants/api.pybackend/ee/onyx/server/tenants/billing.pybackend/ee/onyx/server/tenants/billing_api.pybackend/ee/onyx/server/tenants/models.pybackend/ee/onyx/server/tenants/product_gating.pybackend/ee/onyx/server/tenants/proxy.pybackend/ee/onyx/utils/posthog_client.pybackend/ee/onyx/utils/telemetry.pybackend/onyx/db/seeding/chat_history_seeding.pybackend/onyx/error_handling/__init__.pybackend/onyx/error_handling/error_codes.pybackend/onyx/error_handling/exceptions.pybackend/onyx/feature_flags/__init__.pybackend/onyx/feature_flags/factory.pybackend/onyx/feature_flags/flags.pybackend/onyx/feature_flags/interface.pybackend/onyx/file_store/postgres_file_store.pybackend/onyx/hooks/executor.pybackend/onyx/server/features/build/.gitignorebackend/scripts/chat_history_seeding.pybackend/tests/external_dependency_unit/db/test_usage_export_pairing.pybackend/tests/external_dependency_unit/feature_flags/__init__.pybackend/tests/integration/tests/query_history/test_usage_reports.pybackend/tests/integration/tests/reporting/test_usage_export_api.pybackend/tests/unit/ee/onyx/server/billing/test_billing_api.pybackend/tests/unit/ee/onyx/server/billing/test_billing_service.pybackend/tests/unit/ee/onyx/server/license/test_api.pybackend/tests/unit/ee/onyx/server/tenants/test_billing_api.pybackend/tests/unit/ee/onyx/server/tenants/test_product_gating.pybackend/tests/unit/ee/onyx/server/tenants/test_proxy.pybackend/tests/unit/onyx/connectors/confluence/test_rate_limit_handler.pybackend/tests/unit/onyx/db/test_scim_dal.pybackend/tests/unit/onyx/error_handling/test_exceptions.pybackend/tests/unit/onyx/file_store/test_delete_file.pybackend/tests/unit/onyx/server/__init__.pybackend/tests/unit/onyx/server/scim/__init__.pybackend/tests/unit/onyx/server/scim/conftest.pybackend/tests/unit/onyx/server/scim/test_group_endpoints.pybackend/tests/unit/onyx/server/scim/test_patch.pybackend/tests/unit/onyx/server/scim/test_providers.pybackend/tests/unit/onyx/server/scim/test_user_endpoints.pybackend/tests/unit/onyx/utils/test_telemetry.pyweb/lib/opal/src/icons/arrow-up-circle.tsxweb/lib/opal/src/icons/organization.tsxweb/src/app/admin/billing/BillingDetailsView.tsxweb/src/app/admin/billing/CheckoutView.tsxweb/src/app/admin/billing/LicenseActivationCard.tsxweb/src/app/admin/billing/page.tsxweb/src/app/admin/groups/create/page.tsxweb/src/app/ee/admin/groups/create/page.tsxweb/src/components/GatedContentWrapper.tsxweb/src/components/PageSelector.tsxweb/src/lib/billing/interfaces.tsweb/src/lib/billing/svc.test.tsweb/src/lib/billing/svc.tsweb/src/refresh-components/inputs/InputNumber.tsxweb/src/refresh-pages/admin/GroupsPage/SharedGroupResources/ResourceContent.tsxweb/src/refresh-pages/admin/GroupsPage/SharedGroupResources/index.tsxweb/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。
目录结构:
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/- 企业版计费和许可证管理 UIweb/src/app/admin/billing/page.tsx:90。
来源:backend/ee/onyx/configs/app_configs.py:1-142,AGENTS.md:158,backend/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_gating | backend/ee/onyx/server/tenants/product_gating.py:26 | 将特定租户的 ApplicationStatus 存储在设置和 Redis 中。 |
update_tenant_gating | backend/ee/onyx/server/tenants/product_gating.py:16 | 维护 Redis 中的 GATED_TENANTS_KEY 集合,以实现快速查找。 |
is_tenant_gated | backend/ee/onyx/server/tenants/product_gating.py:70 | O(1) 时间复杂度检查,判断租户 ID 是否存在于门控集合中。 |
overwrite_full_gated_set | backend/ee/onyx/server/tenants/product_gating.py:45 | 批量操作,用于从控制平面同步整个门控租户集合。 |
来源:backend/ee/onyx/server/tenants/product_gating.py:16-74,backend/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:
- 自托管:使用本地许可证密钥。可以通过云数据平面代理申领许可证,也可以为离线环境手动上传
backend/ee/onyx/server/license/api.py:109-186。 - 云(多租户):通过控制平面管理许可,并通过 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:将 Stripesession_id兑换为签名的许可证密钥backend/ee/onyx/server/license/api.py:109。POST /admin/billing/checkout-session:生成 Stripe 结账 URLbackend/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。
来源:backend/ee/onyx/configs/app_configs.py:133-135,backend/ee/onyx/server/license/api.py:63-186,backend/ee/onyx/server/tenants/billing_api.py:125-168,web/src/app/admin/billing/page.tsx:90-151
权限同步系统
企业版为各种数据源提供自动权限同步。这确保了 Onyx 中的 ACL(访问控制列表)与源系统保持一致。
同步频率
频率通过 backend/ee/onyx/configs/app_configs.py 中的环境变量以秒为单位配置。
| 源 | 文档同步频率(默认) | 组同步频率(默认) |
|---|---|---|
| Confluence | 30 分钟 24-26 | 30 分钟 20-22 |
| JIRA | 30 分钟 40-42 | 30 分钟 44-46 |
| Google Drive | 不适用 | 5 分钟 52-54 |
| GitHub | 5 分钟 61-63 | 5 分钟 65-67 |
| Slack | 5 分钟 73-75 | 不适用 |
| Teams | 5 分钟 84-86 | 不适用 |
| SharePoint | 30 分钟 92-94 | 5 分钟 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 架构
关键组件
- 服务发现:
/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-639,backend/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-64,backend/ee/onyx/utils/posthog_client.py:1-47