召回、重排与上下文预算:练习答案
参考实现
复用正文 ranked、pack,追加:
python
large = {'id': 'z', 'parent': 'p9', 'tokens': 20, 'text': '很长的资料'}
result, used = pack([large] + ranked, 11)
assert [x['id'] for x in result] == ['a', 'c']
assert used == 11不能装入第一项不意味着后面都不能装入;break 会误把空证据交给生成器。若第一项确是不可缺少的安全限制,则不能静默跳过,应改成结构化失败或重新切分;这是算法外的证据完整性约束。
返回题目。
链路变体
正文已有遗漏source反例;版本过滤要在构造docs/ids/vectors之前做,完整可应用替换为:
python
records=[{'id':'s1','text':'Returns within seven days.','active':True},
{'id':'s2','text':'Opened items cannot be returned.','active':True},
{'id':'s4','text':'Opened items may be returned.','active':False}]
docs={r['id']:r['text'] for r in records if r['active']}
assert 's4' not in docs保持后续编码和检索流程不变;单独 assert 's4' not in evidence。仅在最后展示时隐藏s4太晚,生成器可能已经读取并采信了旧条款。