后端核心系统
后端核心系统
相关源文件
本章引用的主要源码文件:
backend/alembic/versions/74379b447d4c_add_paste_as_tile_to_user.pybackend/ee/onyx/main.pybackend/ee/onyx/server/auth_check.pybackend/ee/onyx/server/enterprise_settings/api.pybackend/ee/onyx/server/enterprise_settings/store.pybackend/onyx/auth/schemas.pybackend/onyx/auth/users.pybackend/onyx/db/enums.pybackend/onyx/db/models.pybackend/onyx/db/user_preferences.pybackend/onyx/main.pybackend/onyx/server/auth_check.pybackend/onyx/server/manage/get_state.pybackend/onyx/server/manage/models.pybackend/onyx/server/manage/users.pybackend/onyx/server/runtime/onyx_runtime.pybackend/onyx/server/saml.pybackend/onyx/utils/file.pybackend/static/images/logo.pngbackend/tests/api/test_api.pybackend/tests/unit/onyx/auth/test_single_tenant_jwt_strategy.pybackend/tests/unit/onyx/server/scim/test_admin.pydeployment/aws_ecs_fargate/cloudformation/services/onyx_nginx_service_template.yamldeployment/aws_ecs_fargate/cloudformation/services/onyx_web_server_service_template.yamlweb/src/app/auth/saml/callback/route.tsweb/src/hooks/useTokenRefresh.test.tsxweb/src/hooks/useTokenRefresh.tsweb/src/lib/redirectSS.tsweb/src/providers/UserProvider.tsx
目的与范围
本文档涵盖 Onyx 的基础后端基础设施,包括配置系统、数据库引擎、API 服务器架构以及文档索引后端。这些核心系统提供了所有其他后端功能所依赖的基础层。
有关特定子系统的详细信息,请参阅以下子页面:
- 数据库模型与模式 —— SQLAlchemy 模型及其关系。
- API 服务器架构 —— FastAPI 结构与路由。
- 模型服务器 —— 推理与索引模型托管。
- 配置系统 —— 环境变量管理与校验。
- 文档搜索与索引后端 —— Vespa 和 OpenSearch 实现。
- 知识图谱系统 —— 实体提取与 Vespa 中的图谱存储。
系统架构总览
后端核心由多个相互连接的子系统组成,它们协同工作以提供 Onyx 平台。该架构采用多进程模型,各进程职责明确,并通过 Redis 和 PostgreSQL 进行协调。
自然语言到代码实体空间:系统总览
下图将高层系统组件映射到对应的代码实体和配置。
来源: backend/onyx/main.py:11-150, backend/onyx/db/engine/sql_engine.py:61-63, backend/onyx/db/models.py:118-125
配置系统
Onyx 后端使用基于环境变量的集中式配置系统。所有配置在应用启动时进行解析和校验。
关键配置组件
| 配置文件 | 用途 | 关键导出项 |
|---|---|---|
app_configs.py | 环境变量解析 | APP_HOST, AUTH_TYPE, POSTGRES_*, REDIS_* |
constants.py | 系统常量与枚举 | DocumentSource, MessageType, AuthType |
系统广泛使用 os.environ.get 来提供默认值,同时允许覆盖。例如,AUTH_TYPE 决定了整个应用使用的认证策略 backend/onyx/auth/users.py:88-88。
有关完整变量列表和校验逻辑,请参阅 配置系统。
来源: backend/onyx/auth/users.py:86-103, backend/onyx/configs/constants.py:50-53, backend/onyx/main.py:36-58
数据库与数据持久化
Onyx 使用 PostgreSQL 存储关系型数据(用户、会话、连接器配置),并使用专门的索引进行文档搜索。
数据库引擎与模型
SqlEngine 管理连接池。关系型数据通过 SQLAlchemy 的 Mapped 列和 relationship 定义进行映射 backend/onyx/db/models.py:38-41。敏感数据(如连接器凭证)使用 EncryptedString 和 EncryptedJson 类型存储,这些类型将值包装在 SensitiveValue 对象中 backend/onyx/db/models.py:122-161。
文档索引后端
Onyx 目前支持两种主要的文档存储和混合搜索后端:
- Vespa:默认的高性能向量和关键词搜索引擎。
- OpenSearch:备选后端,支持从 Vespa 迁移文档
backend/onyx/db/enums.py:249-254。
代码实体空间:用户与认证持久化
下图展示了用户数据和认证令牌在数据库中的结构。
来源: backend/onyx/db/models.py:126-129, backend/onyx/auth/users.py:62-62, backend/onyx/auth/users.py:119-122
有关模式定义的详细信息,请参阅 数据库模型与模式。有关搜索实现,请参阅 文档搜索与索引后端。
API 服务器架构
API 服务器基于 FastAPI 构建,是前端和外部集成的主要接口。
- 初始化:应用在
onyx.main:get_application中初始化,注册中间件(CORS、延迟日志记录)和异常处理器backend/onyx/main.py:155-200。 - 认证:集成
fastapi_users进行会话管理,并通过AUTH_TYPE支持多种后端(例如google_oauth、oidc、saml)backend/onyx/auth/users.py:88-88。 - 路由:路由按功能模块组织(例如
connector_router、persona_router、cc_pair_router),并添加APP_API_PREFIX前缀backend/onyx/main.py:68-150。 - 安全:所有私有路由通过
check_router_auth进行校验,确保它们包含用户依赖backend/onyx/server/auth_check.py:101-155。 - 企业扩展:企业版(EE)包装基础应用,添加多租户和高级分析路由
backend/ee/onyx/main.py:79-91。
有关完整路由表和中间件栈,请参阅 API 服务器架构。
来源: backend/onyx/main.py:1-150, backend/onyx/auth/users.py:109-156, backend/ee/onyx/main.py:129-161
模型服务器与推理
Onyx 将繁重的 AI 工作负载与核心 API 逻辑分离。
- 双服务器逻辑:系统可以区分用于推理(聊天)和索引(文档嵌入)的服务器。
- 推理模型:通过抽象接口处理,支持与 OpenAI、Anthropic 以及本地 Ollama 实例等提供商集成。
- 嵌入向量:文档使用本地缓存的模型转换为向量。
INDEXING_ONLY标志可以将模型服务器实例限制为仅处理文档嵌入。
有关模型部署和缓存的详细信息,请参阅 模型服务器。
来源: backend/onyx/configs/app_configs.py:42-42, backend/onyx/db/enums.py:163-174