第 12 讲:配置系统与多环境支持

OpenHands 源码解析 · 第 12 讲

OpenHands 源码解析系列 第 12 讲:配置系统与多环境支持 基于 OpenHands 源码 · 2026-08-08 配置系统概览 OpenHands 的配置系统是一个分层架构,从环境变量到 Pydantic 模型,再到抽象存储接口,覆盖了从开发到生产、从 OSS 到 SaaS 的全部场景。本讲深入剖析配置加载链路、多环境适配策略以及设置管理的核心设计。 一、AppServerConfig:配置的核心模型 OpenHands V1 架构中,所有服务器级配置收敛于 AppServerConfig 类。它继承自 OpenHandsModel (SDK 提供的 Pydantic 基类),通过 Pydantic 的 Field 与 default_factory 机制实现灵活的环境感知默认值。 📄 openhands/app_server/config.py (第 191-237 行) class AppServerConfig(OpenHandsModel): persistence_dir: Path = Field(default_factory=get_default_persistence_dir) file_store: FileStore = Field(default_factory=_get_default_file_store) web_url: str | None = Field( default_factory=get_default_web_url, description='The URL where OpenHands is running', ) permitted_cors_origins: list[str] = Field( default_factory=get_default_permitted_cors_origins, description='Additional permitted CORS origins...', ) openhands_provider_base_url: str | None = Field( default_factory=get_openhands_provider_base_url, ) tavily_api_key: str | None = Field( default_factory=get_default_tavily_api_key, ) # Dependency Injection Injectors llm_model: LLMModelServiceInjector | None = None event: EventServiceInjector | None = None event_callback: EventCallbackServiceInjector | None = None sandbox: SandboxServiceInjector | None = None sandbox_spec: SandboxSpecServiceInjector | None = None app_conversation_info: AppConversationInfoServiceInjector | None = None app_conversation_start_task: AppConversationStartTaskServiceInjector | None = None app_conversation: AppConversationServiceInjector | None = None pending_message: PendingMessageServiceInjector | None = None user: UserContextInjector | None = None jwt: JwtServiceInjector | None = None httpx: HttpxClientInjector = Field(default_factory=HttpxClientInjector) db_session: DbSessionInjector = Field( default_factor…

阅读全文:OpenHands 源码解析 第 12 讲