一次尚可,两次可疑,三次就该把超参数做成数据。
1. 为何需要配置
没有配置管理器时,每个最终会调用模型、后端、提示、缓存、基准测试或文件辅助函数的包装层都必须接受并透传相同旋钮:CM_HVNB 把这些旋钮移入配置数据:
2. 核心思想:作用域层与应用覆盖
概括来说,HeavenBase 配置管理器使用 database backend 存储带作用域的 KV 字典。 作用域是命名的覆盖层。宽作用域持有共享默认值;窄作用域只覆盖差异部分。 例如,heavenbase.workspace.docs-demo 按以下顺序解析:
heavenbaseheavenbase.workspaceheavenbase.workspace.docs-demo
heavenbase.query.near.default_top_k,其余配置值会回退到更宽作用域,最终落到包默认模板。
作用域是应用代码唯一需要携带的东西。实际模型名、提供商默认值、后端路径、序列化默认值与提示语言可留在配置数据中,而不必穿过每个包装层。
3. 读取当前默认值
只需一个值时,从get(...) 开始:
load():
load() 返回副本。修改该字典不会写回配置存储。4. 将作用域用作上下文
代码块应读取作用域值时,将scoped(...) 用作上下文管理器:
5. 复用快照
高吞吐读取路径中,保留快照并复用:CM_HVNB.refresh()。
6. 编辑作用域层
配置写入会立即持久化。demo 与测试使用作用域层,以免惊动基础配置层:items[0]替换一项。items[]追加。items[2+]在索引 2 前插入。
unset(...) 写入 tombstone,使子作用域可隐藏从父作用域继承的值。字典可使用 __HB_OVERWRITE__ 替换父字典,而非递归合并。
7. 检查已存储层
需要父合并与插值前某作用域内原始层时,使用layer(...):
heavenbase.config.versioning.keep_last_k 为 10,因此普通编辑会保留近期历史而不会无限增长。
8. 使用资源与包路径
resource(...) 在可定位包时解析其 resources/ 目录下的文件。load_default() 返回用于初始化作用域的内存默认配置模板。
CM_HVNB.pj(...) 理解 HeavenBase 包别名,例如 %/ 表示包本地数据、&/ 表示包资源。普通调用方提供的路径请改用文件系统工具中的 pj(...)。详见文件系统。
9. 理解插值
OmegaConf 插值在编译快照时解析:${env:VAR}默认允许。${oc.env:VAR,default}通过 OmegaConf 工作。${cmd:...}默认禁用,需要显式策略覆盖。

