失败归因与证据保真
学习目标与因果链
评估记录不能只保存最终答案。将失败拆成 retrieval、citation、tool、generation 四类,并保存每类所需证据,才能知道下一次改动应该作用在哪一层。 先运行确定性夹具,再替换为真实存储、远程服务或评估数据;夹具通过只说明控制流成立。
首次可运行实验
python
def classify(case):
if not case["retrieved"]: return "retrieval"
if not case["cited"]: return "citation"
if not case["tool_ok"]: return "tool"
if not case["answer_ok"]: return "generation"
return "pass"
cases = [
{"retrieved":False,"cited":False,"tool_ok":True,"answer_ok":False},
{"retrieved":True,"cited":False,"tool_ok":True,"answer_ok":False},
{"retrieved":True,"cited":True,"tool_ok":False,"answer_ok":False},
]
assert [classify(c) for c in cases] == ["retrieval","citation","tool"]
print([classify(c) for c in cases])观察输出中的状态、版本或失败原因。把失败当作一等结果记录,不能用“模型说完成”替代状态证据。
失败变体与边界
答案应为每个样本补齐 query、候选文档、引用跨度、工具事件和最终输出;若缺任一证据,标记为不可归因,而不是猜测模型失败。
独立练习
扩展实验,至少加入一次进程重启、重复事件或权限变化,并写出输入、预期状态、实际输出和未覆盖边界。答案见本章答案。
章节总结
本章把一个容易被概念掩盖的生产边界变成可重复实验;下一章继续使用本章的状态和证据字段。