Skip to content

热重载

PRX 支持在不重启守护进程的情况下动态更新部分配置项。配置变更通过原子存储(ArcSwap)生效,无需加锁,对运行中的请求无影响。

触发方式

CLI 命令

bash
prx config reload

Agent 工具调用

PRX 内置 config_reload 工具,Agent 可以在对话中自动触发配置重载:

用户: 把温度调到 0.3
Agent: [调用 config_reload 工具]
       配置已重载,temperature: 0.70 -> 0.30

工作流程

修改 config.toml → 触发 reload → 读取并解析文件
  → 校验 TOML 格式 → 对比差异 → 原子更新内存中的配置
  → 返回变更列表

可热重载的配置项

以下配置修改后,执行 prx config reload 即可立即生效,无需重启:

模型参数

配置项说明
default_temperature模型温度参数

Agent 运行时 ([agent])

配置项说明
agent.max_tool_iterations单轮最大工具调用迭代数
agent.max_history_messages上下文中保留的最大历史消息数
agent.parallel_tools是否启用并行工具执行
agent.compact_context是否启用上下文压缩
agent.read_only_tool_concurrency_window只读工具并发窗口大小
agent.read_only_tool_timeout_secs只读工具超时时间
agent.priority_scheduling_enabled优先级调度开关
agent.low_priority_tools低优先级工具列表
agent.concurrency_kill_switch_force_serial并发紧急熔断开关
agent.concurrency_rollout_stage并发滚动发布阶段
agent.concurrency_rollout_sample_percent滚动发布采样百分比
agent.concurrency_rollout_channels滚动发布渠道列表
agent.concurrency_auto_rollback_enabled自动回滚开关
agent.concurrency_rollback_timeout_rate_threshold超时率回滚阈值
agent.concurrency_rollback_cancel_rate_threshold取消率回滚阈值
agent.concurrency_rollback_error_rate_threshold错误率回滚阈值

心跳 ([heartbeat])

配置项说明
heartbeat.enabled心跳检测开关
heartbeat.interval_minutes心跳间隔(分钟)

定时任务 ([cron])

配置项说明
cron.enabled定时任务开关
cron.max_run_history最大运行历史记录数
配置项说明
web_search.enabled网页搜索工具开关
web_search.max_results每次搜索最大结果数

需要重启的配置项

以下配置修改后必须重启 PRX 才能生效:

提供商与认证

配置项原因
api_keyAPI 客户端在启动时初始化
api_urlBase URL 绑定到 HTTP 客户端
default_provider提供商实例在启动时创建
default_model模型选择与提供商实例绑定

消息渠道

配置项原因
channels_config.*渠道连接(WebSocket、轮询)在启动时建立

所有渠道(Telegram、Discord、Slack、Signal、WhatsApp、Matrix、iMessage、Lark、DingTalk 等)的配置变更都需要重启。

记忆与存储

配置项原因
memory.backend后端切换需要重新初始化数据库连接
memory.acl_enabledACL 状态在启动时加载,热重载时会忽略此变更
storage.*存储提供商在启动时初始化

安全策略

配置项原因
autonomy.*安全策略在启动时编译

网关绑定

配置项原因
gateway.hostTCP 监听地址在启动时绑定
gateway.portTCP 监听端口在启动时绑定

网关绑定地址和端口无法热重载

修改 gateway.hostgateway.port 后必须完全重启 PRX。这是因为 TCP 监听器在进程启动时绑定,无法在运行时更换。

重载行为细节

原子更新

PRX 使用 ArcSwap 进行无锁原子配置更新。重载过程中:

  1. 异步读取并解析 config.toml
  2. 逐字段对比新旧配置
  3. 保留运行时路径(config_pathworkspace_dir
  4. 通过 arc_swap::ArcSwap::store() 原子替换
  5. 正在进行的请求继续使用旧配置引用,新请求使用新配置

变更报告

重载完成后,PRX 会报告所有检测到的变更:

Config reloaded from `/home/user/.openprx/config.toml`.

Changes applied:
  - temperature: 0.70 -> 0.30
  - agent.max_tool_iterations: 50 -> 100
  - web_search.enabled: false -> true

如果没有检测到可热重载的变更,会提示:

Config reloaded from `/home/user/.openprx/config.toml` -- no hot-reloadable changes detected.

错误处理

  • 文件不存在:返回错误提示,保持当前配置不变
  • TOML 语法错误:返回解析错误信息,保持当前配置不变
  • 配置路径为空:返回错误,提示配置路径未设置

重载失败不会影响正在运行的服务,当前配置保持不变。

典型使用场景

动态调整模型温度

bash
# 编辑配置
sed -i 's/default_temperature = 0.7/default_temperature = 0.3/' ~/.openprx/config.toml

# 热重载
prx config reload

紧急关闭并行工具

如果并行工具执行导致问题,可以通过热重载立即关闭:

toml
# config.toml
[agent]
parallel_tools = false
concurrency_kill_switch_force_serial = true
bash
prx config reload

调整搜索结果数量

toml
# config.toml
[web_search]
max_results = 10
bash
prx config reload

Released under the Apache-2.0 License.