「万物皆数。」——毕达哥拉斯
1. 为何需要统一哈希
HeavenBase 会从多种值类型派生 ID、分桶、缓存键与指纹——int、字符串、列表、字典、dataclass 行、Python 函数、capsule、MCP 工具等。若没有共享编码器层,每个调用点都会各自实现序列化规则:salt 包装标准摘要——MD5、SHA-256 与 CRC32。编码器在哈希前将常见 Python 值(含结构化对象与 callable)规范为确定性字符串;当多个逻辑部分应一起哈希时,hash_id(...) 是带命名空间的前门:
这些 helper 是确定性 utility 哈希,不是认证或密码存储原语。
2. 核心思想
HeavenBase 常需要行为像字符串的标识符,因为它们会流经 JSON、数据库行、object ID 与文件名。有时也受益于可解释为整数的值,用于排序、分桶或索引友好存储。md5hash(...) 与 crc32hash(...) 返回补零十进制字符串。这意味着它们可作为普通字符串 ID 使用,且等长值还可按整数表示排序。crc32hash(...) 默认长度为 10;md5hash(...) 默认长度为 42。
这尚未定为通用设计。可转为整数的字符串哈希是当前预发布阶段的实用兼容方案,并非声称每个外部 API 都应依赖这一精确表示。我们仍在探索兼顾稳定性与通用可用性的最佳方案。
3. 创建稳定 ID
md5hash(...) 以稳定 JSON 顺序序列化常见 Python 值,并返回补零十进制字符串。默认长度为 42,与 HeavenBase 标识符友好哈希宽度一致。
hash_id(...):
4. 分桶或排序值
当取模运算、确定性采样、稀疏权重或排序需要数值时,使用整数摘要。当方法属于运行时策略而非固定 ID 契约时,使用hash_int(...) 或 resolve_hash_int(...)。
resolve_hash_int(...) 接受 md5、sha256、crc32、安装 xxhash 包后可用的可选 xxhash64 / xxhash128,以及签名为 fn(obj, salt=None, sep="||") -> int 的 dotted callable。
crc32int(...) 是最便宜的标准库确定性选项,Sparse GRAM runtime 使用它生成 SQL 托管 SparseGramIndex 与显式兼容 gram backend 的 trigram 权重和 sparse-span 哈希。CRC32 碰撞只会扩大候选集,精确关键词验证会保护查询正确性。md5int(...) 仍适合本地 utility ID;当更宽摘要能更清楚表达意图时,使用 sha256int(...)。
持久化 identity 与 integrity 表面应固定使用显式 helper:现有 object ID 使用 hash_id(...) / md5hash(...),指纹与缓存正确性边界使用 sha256hash(...)。CRC32 是候选生成与确定性采样的默认策略,因为这些路径会精确验证或可接受样本选择变化。
5. 为较大载荷生成指纹
在 manifest、配置快照与完整性检查中使用sha256hash(...) 生成 hex 指纹。
这些 helper 是确定性 utility 哈希,不是认证或密码存储原语。

