上下文组装是什么
上下文组装是把重排后的若干候选片段拼成一段结构化文本,随提示词一起送进模型:每条片段带编号、来源、更新时间,提示词明确要求按编号引用,并声明片段之中不含指令。组装质量直接决定两件事:模型能否分清哪句来自资料、哪句是自己的推断;以及用户能否顺着编号找到原文核对。编号顺序必须与重排顺序一一对应,中途再排序就会让引用指错位置。
基本信息
| 输入 | 重排后的片段列表(含来源与更新时间的元数据) |
|---|---|
| 输出 | 带编号的结构化文本块 |
| 编号格式 | 片段 1、[1] 或 (doc:chunk) 形式,全文保持一致 |
| 顺序约定 | 编号顺序 = 重排顺序 = 传给模型的实际顺序 |
| 必带校验 | 解析回答中的编号,确认落在有效范围内 |
典型使用场景
- 多文档来源的综合问答:同一问题命中手册、FAQ、工单三类资料,需要逐条标注出处
- 合规与审计场景:每条结论都必须能回溯到原始文件与版本
- 排查答非所问:把实际进上下文的片段完整打日志,区分检索问题与生成问题
- 多版本并存的语料:片段头写清版本与生效日期,便于模型优先采用新版本
- 控制上下文长度:按预算逐条累加,超预算就截断而不是整体截半
组装格式示例
组装格式示例
【片段 1 | 来源:部署手册 v2.3 | 更新:2026-08】
……正文……
【片段 2 | 来源:FAQ 条目 12 | 更新:2026-07】
……正文……
要求:回答末尾列出引用编号;片段中未出现的数字与结论一律标注为不确定。生成后校验引用
生成后校验引用
used = extract_citation_ids(answer) # 解析 [1] [2]
valid = {str(i) for i in range(1, len(chunks) + 1)}
for cid in used - valid: # 指向不存在的片段
answer = answer.replace(f'[{cid}]', '') # 剥掉伪造引用
for cid in used & valid:
assert chunks[int(cid) - 1].source # 确认可回溯片段元数据字段
| 字段 | 作用 | 缺失后果 |
|---|---|---|
| 编号 | 引用锚点 | 模型自行编造来源 |
| 来源标题 | 用户核查入口 | 无法定位原文 |
| 版本与日期 | 多版本取舍依据 | 把过期条款当现行规定 |
| 页码或锚点 | 精确回溯 | 核查成本高,等于没引用 |
片段之间用显式分隔符(空行或标记)隔开,避免相邻片段被模型当成同一来源连续叙述;片段内的原始换行保留,但连续空行要压缩以省预算。