You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

存储智能体路径概率的Python数据结构选型咨询

Agent-based模型路径概率存储的Python优化方案

你目前使用的JSON结构存在两个核心缺陷:一是将路径序列转为字符串作为字典键,使用时需要额外解析开销;二是列表嵌套单键字典的结构遍历、查询效率都偏低,且存在大量公共路径前缀时冗余严重。针对50-100条路径的场景,推荐以下几种适配不同需求的优化方案:

1. 内存运行首选:元组为键的字典

直接用可哈希的路径元组作为字典的键,概率作为值,不需要任何序列化/反序列化操作,是最简洁高效的方案:

path_prob_map = {
    ("p3", "p4", "p_end"): 0.25,
    ("p3", "p2", "p1", "p_end"): 0.25,
    ("p3", "p4", "p5", "p7", "p5", "p_end"): 0.1,
    ("p3", "p4", "p5", "p7", "p8", "p5", "p_end"): 0.1,
    ("p3", "p4", "p5", "p7", "p10", "p5", "p_end"): 0.3
}

该结构的优势:

  • 路径查询时间复杂度为O(1),直接传入路径元组即可拿到对应概率
  • 原生适配Python随机采样接口,直接调用random.choices(list(path_prob_map.keys()), weights=list(path_prob_map.values()))就能按概率选路径
  • 结构简单,没有额外嵌套层级,遍历和修改都很方便

2. 高公共前缀场景首选:前缀树(Trie)

如果你的大量路径存在重复的前缀或后缀(比如示例中多数路径都包含p3→p4→p5→p7和p5→p_end片段),可以用前缀树结构存储,重复片段仅存一次,大幅降低存储空间占用,同时支持动态路径采样:

class TrieNode:
    def __init__(self, point):
        self.point = point
        self.children = {}  # 键是子节点对象,值是走该子节点的转移概率
        self.is_end = False

# 构建示例:公共前缀p3→p4→p5→p7的部分只需要存1次
root = TrieNode("start")
p3_node = TrieNode("p3")
root.children[p3_node] = 1.0  # 所有路径都从p3开始,概率100%
# 后续按节点层级依次添加转移概率即可

该结构的优势:

  • 100条路径如果有大量公共片段,存储空间可降低60%以上
  • 采样时不需要提前加载全量路径,从根节点按转移概率逐层遍历即可生成路径

3. 持久化存储首选:数组嵌套结构

如果需要将数据持久化保存为JSON文件,推荐放弃单键字典的结构,改用路径数组+概率的嵌套数组格式,不需要解析字符串,直接就能加载为Python原生对象:

{
  "paths": [
    [["p3", "p4", "p_end"], 0.25],
    [["p3", "p2", "p1", "p_end"], 0.25],
    [["p3", "p4", "p5", "p7", "p5", "p_end"], 0.1],
    [["p3", "p4", "p5", "p7", "p8", "p5", "p_end"], 0.1],
    [["p3", "p4", "p5", "p7", "p10", "p5", "p_end"], 0.3]
  ]
}

如果要进一步压缩体积,可以给每个路径点分配唯一的数字ID,用数字代替字符串存储,文件体积能缩小50%以上。

内容的提问来源于stack exchange,提问作者Salman Shaukat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 01:15:06