长文本检索返回很多片段时,不能把串联文本按长度一刀切。可以按确定顺序选择完整片段,放不下的记录ID,避免引用被截成半句。
需要限制RAG证据长度的开发者。本文使用 Python 3.11 或以上版本的标准库,先验证一组人工构造的小样本。AI 负责提出实现或解释差异,结果由本地检查决定;这里没有把模型回答当成真实运行结果。

按预算打包完整证据段前,先定规则
本例预算按Unicode字符计数,只演示装箱逻辑,不作为模型Token额度。实际请求还包括系统提示、历史消息与输出预留。
每个片段都有来源ID,串联分隔符也计入预算。片段过长直接记录excluded,本文不自动摘要替代原证据。
顺序来自上游已确定排名,策略采用先到先选,并不保证最大信息量;可与任务相关性和来源多样性另作比较。
给 AI 的输入要包含什么
把下面这份输入说明和你的实际样本一起交给可用的 AI 编程助手。示例只含虚构数据;对真实材料先去除账号凭据和个人信息。
把检索片段按原排名整段装入字符预算,分隔符换行计1,保留selected/excluded IDs;不切断片段,不把字符当Token。给三段长度3/5/2,预算8,确认可回查排除项。
要求模型保留检查条件,并把它认为缺少的业务定义列出来。若回答改变了输入字段、忽略异常分支或直接删除原材料,先要求修正,再运行。提示词的作用是缩小任务范围,验收仍以代码和数据为准。
保存并运行最小验证程序
下方程序把关键规则和验证用例放在同一个可复跑示例中,便于先理解输入如何变成输出,再用它检查 AI 给出的实现。
新建一个空目录,把下面代码保存为 check.py,在该目录打开终端,运行 python -X utf8 check.py。代码自带示例输入,不需要安装第三方库。
chunks=[('a','甲乙丙'),('b','一二三四五'),('c','天地')]
def pack(chunks,budget):
selected=[];excluded=[];used=0
for cid,text in chunks:
needed=len(text)+(1 if selected else 0)
if used+needed<=budget:
selected.append((cid,text));used+=needed
else: excluded.append(cid)
return selected,excluded,used
selected,excluded,used=pack(chunks,8)
assert [cid for cid,_ in selected]==['a','c'] and excluded==['b']
assert used==6
print('selected',[cid for cid,_ in selected],'excluded',excluded,'chars',used)
怎样判断结果符合要求
选择a和c,排除b,总字符6包含一个换行。剩余空间不意味着可以截取b半段作为同一个证据引用。
下方是这份最小示例在本地执行得到的输出。它验证示例程序与断言的关系,不代表任何 AI 模型一次就能生成同样代码,也不构成性能或生产可靠性结论。
selected ['a', 'c'] excluded ['b'] chars 6
当前策略会跳过中间长片段后继续考虑短片段,需在系统规则中写清。
没有选中关键证据时,模型可能无法回答,应检查证据覆盖而不只检查长度。
哪些失败必须停下来处理
真实Token计数需匹配模型Tokenizer;字符上限不保证请求不超窗口。
摘要会改变原文字段,若启用必须保留原文映射与事实核验,不能悄悄替换。
接入自己的任务前再核对一次
保存候选、选择与排除列表,问题回答失败时能区分检索失败还是预算丢证据。
把预算不足案例加入固定测试,要求模型说明依据不足或转人工。
资料与适用范围
字符串长度可作为演示字符预算;真实模型上下文要使用对应Tokenizer与总请求结构计算。以下链接核对于 2026-10-03;运行环境及额外依赖按本文前述说明。
相关基础可阅读 ChatGPT 面对超长文本怎么回答?分段编号、证据表与跨段核对。本文的重点是按预算打包完整证据段,可以把两项检查作为不同步骤保留。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33454.html