Skip to content

召回、重排与上下文预算:练习答案 ​

参考实现 ​

复用正文 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太晚,生成器可能已经读取并采信了旧条款。

用心记录每一步成长