class Nucleon: """原子核: 材料元数据""" def __init__(self, ident: str, payload: dict, metadata: dict = {}): """初始化原子核 (记忆内容) Args: ident: 唯一标识符 payload: 记忆内容信息 metadata: 可选元数据信息 """ self.metadata = metadata self.payload = payload self.ident = ident def __getitem__(self, key): if key == "ident": return self.ident if key in self.payload: return self.payload[key] else: raise KeyError(f"Key '{key}' not found in payload.") def __iter__(self): yield from self.payload.keys() def __len__(self): return len(self.payload) def __hash__(self): return hash(self.ident) def do_eval(self): """ 执行并以结果替换当前单元的所有 eval 语句 TODO: 带有限制的 eval, 异步/多线程执行避免堵塞 """ # eval 环境设置 def eval_with_env(s: str): try: nucleon = self ret = str(eval(s)) except Exception as e: ret = f"此 eval 实例发生错误: {e}" return ret def traverse(data, modifier): if isinstance(data, dict): for key, value in data.items(): data[key] = traverse(value, modifier) return data elif isinstance(data, list): for i, item in enumerate(data): data[i] = traverse(item, modifier) return data elif isinstance(data, tuple): return tuple(traverse(item, modifier) for item in data) else: if isinstance(data, str): if data.startswith("eval:"): return modifier(data[5:]) return data traverse(self.payload, eval_with_env) traverse(self.metadata, eval_with_env) @staticmethod def placeholder(): """生成一个占位原子核""" return Nucleon("核子对象样例内容", {})