AI 数据实验得到一个结果后,要能确认使用的是哪份输入、哪段代码和哪些依赖。下面保存一个本地运行记录:依赖版本、Python 版本、输入文件哈希和脚本哈希。它帮助你识别环境变化,但不保证模型结果必然完全可重复。
环境与运行方法
本文代码在 Windows、Python 3.11 的本地独立环境执行通过。以下数据全部为人为构造的教学样本,不是客户数据,也不是业务效果测试。

新建一个空目录,在终端执行安装命令,把后面的完整代码保存为 demo.py,再执行 python demo.py。文件输出均保存在运行目录,请先在空目录练习。
python -m pip install numpy==2.4.6 pandas==3.0.6 scikit-learn==1.9.1
把数据、脚本和依赖放在同一份记录里
示例在当前练习目录创建一份两行数据,再计算 SHA-256。每次重跑相同字节的文件,哈希应一致;只改一字节也会改变内容指纹。记录 Python 版本、系统和 numpy、pandas、scikit-learn 的已安装版本,用于核对基础环境。
这张清单只记录所列包,不等于完整依赖锁文件。正式实验还应保存模型文件版本、随机种子、完整依赖和运行参数,若使用 GPU 则记录驱动及相关运行库。可用相同环境描述重建后再检查预测输出。
先验证指纹,再讨论结果复现
读取文件用 bytes 模式,不把编码转换或换行标准化隐藏在哈希函数中。输入文件和脚本路径分别记录,避免把一份输入的指纹误当成整个实验的指纹。
代码会给原字节附加一个换行并计算另一个哈希,只在内存中比较,不改输入文件。第二次运行脚本时可把新旧 JSON 中的输入和脚本哈希逐项比对;如果任一不同,应先解释变更,不把结果差异归因于模型本身。
可复制的完整代码
import hashlib, json, platform
from pathlib import Path
from importlib.metadata import version
data = Path("environment_toy.csv")
data.write_text("id,value\n1,10\n2,20\n", encoding="utf8")
def digest(path):
return hashlib.sha256(path.read_bytes()).hexdigest()
record = {"python": platform.python_version(), "system": platform.system(),
"packages": {name: version(name) for name in ["numpy", "pandas", "scikit-learn"]},
"input": {"path": str(data), "sha256": digest(data)},
"script": {"path": Path(__file__).name, "sha256": digest(Path(__file__))}}
assert digest(data) == record["input"]["sha256"]
modified = hashlib.sha256(data.read_bytes() + b"\n").hexdigest()
assert modified != record["input"]["sha256"]
Path("run_environment.json").write_text(json.dumps(record, ensure_ascii=False, indent=2), encoding="utf8")
print("packages", record["packages"])
print("same_bytes_same_hash", True)
print("changed_bytes_different_hash", True)
print("saved run_environment.json")
运行结果与核对方法
下面是本文教学代码在上述本地环境中的实际输出。浮点数末位可能随依赖版本变化。
packages {'numpy': '2.4.6', 'pandas': '3.0.6', 'scikit-learn': '1.9.1'}
same_bytes_same_hash True
changed_bytes_different_hash True
saved run_environment.json
打开 run_environment.json,核对 packages、input.sha256 和 script.sha256 都有值。保存这份记录后再次运行并比较两项指纹;输入和脚本都相同时,再比较依赖版本与模型输出,定位变化发生在哪个环节。
使用边界与常见问题
示例只为本地教学数据保存环境记录,没有训练业务模型,也未锁定所有间接依赖或 GPU 环境。相同文件指纹不能证明算法确定性;仍要控制随机性并验证实际输出。
只保存 pip freeze 就够吗?
依赖清单没有数据、模型与脚本的内容指纹,也没有随机种子和运行参数。它可作为环境记录的一部分,不能替代完整的实验材料。
官方资料
接口与参数依据以下官方资料核对(2026年10月1日)。示例验证只覆盖本文输入和步骤。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30261.html