GLM-Legal 多轮法律咨询丢事实——是上下文窗口还是提示词没锁住? / 用事实清单复现

文章导读
多轮法律咨询里事实被说错或被漏掉,通常不是单一原因。可行的排查顺序是:先把现象钉在会话记录上,看第一次改写或遗漏发生在第几轮、属于哪类事实;再用同一份事实清单每轮原样重贴,看错误是否稳定复现;最后才去调上下文长度或改提示词。跳过前两步直接加长上下文或换模型,往往既没定位问题,也看不出改动有没有生效。以下做法只依赖会话记录、请求日志和可重复的提问,不依赖任何内部指标。
📋 目录
  1. 壹 在会话记录里标出第一次给出的事实和后续被模型改写的点
  2. 贰 把事实拆成当事人、时间、金额、行为、诉求
  3. 叁 用固定事实清单重问,观察模型是否丢项或改项
  4. 肆 区分上下文长度限制与提示词未锁定事实
  5. 伍 整理一份多轮法律咨询的事实核对模板
A A

多轮法律咨询里事实被说错或被漏掉,通常不是单一原因。可行的排查顺序是:先把现象钉在会话记录上,看第一次改写或遗漏发生在第几轮、属于哪类事实;再用同一份事实清单每轮原样重贴,看错误是否稳定复现;最后才去调上下文长度或改提示词。跳过前两步直接加长上下文或换模型,往往既没定位问题,也看不出改动有没有生效。以下做法只依赖会话记录、请求日志和可重复的提问,不依赖任何内部指标。

先看差异位置,再看重贴清单后的稳定性,最后才动上下文或提示词。错误只出现在长会话后段、缩短轮次后消失,多半与上下文截断或注意力分散有关;在第 2 到 3 轮、上下文很短时也照错,通常是指令里没把事实写成不可改写的约束项。两种判断都需要用同一份事实清单重复验证,且结论只对该接入方式和该提示词版本成立,换环境要重新确认。

在会话记录里标出第一次给出的事实和后续被模型改写的点

先把整段咨询会话按轮次导出。多数接入方式会在请求日志或 messages 数组里保留每一轮的原文,取最近一次出问题的会话即可。然后逐轮填一张对照表,表格只做一件事:标出模型第一次改写或漏掉事实的位置。下面的格式示例中数值为占位,需替换成你自己的会话记录。

轮次用户给出的原始事实模型后续复述差异标记
第 1 轮借款时间、出借人、金额——锚点(原始事实,不可动)
第 2 轮还款方式复述金额与时间无差异
第 3 轮补充担保人时间被改成另一个月份C(改项)
第 5 轮追问诉讼时效未再提担保人L(漏项)

差异标记建议只保留四类:漏项 L、改项 C、增项 A、顺序错位 O。标完通常能看出问题集中在哪类。改项集中在时间、金额这类高辨识度字段,一般先怀疑提示词没有把事实列为禁止改写的约束;从某一轮起早期事实整体消失,同时日志里实际发出的 messages 总长度接近模型上限,则优先怀疑截断。查看请求日志时要注意接入层是否在发送前做过裁剪,不同网关对超长 messages 的处理策略不一样,需要结合环境确认是报错还是静默截头。

把事实拆成当事人、时间、金额、行为、诉求

提示词锁不住事实,常常是因为事实本身没有被写成可核对的结构。把案件事实拆成五类,每项给唯一标识,后面每轮重问时就能逐项对差,而不是靠肉眼比对整段叙述。

类别标识示例记录内容来源轮次可核对形式
当事人P-01 / P-02出借人、借款人、担保人第 1、3 轮名称原样,不改称谓
时间T-01 / T-02借款日、约定还款日第 1 轮完整年月日
金额M-01本金、已还金额第 1、2 轮数字加币种
行为A-01交付方式、催告动作第 2 轮动作加对象
诉求D-01请求返还本息、主张时效中断第 5 轮一句话,不带推断

把这张表以结构化文本放进提示词,比写成一段自然语言更稳,因为标识可以被要求原样复述:

{
  "facts": [
    {"id": "P-01", "type": "party", "value": "出借人姓名", "source_turn": 1},
    {"id": "T-01", "type": "time", "value": "借款日(完整年月日)", "source_turn": 1},
    {"id": "M-01", "type": "amount", "value": "本金金额与币种", "source_turn": 1},
    {"id": "A-01", "type": "act", "value": "交付方式", "source_turn": 2},
    {"id": "D-01", "type": "demand", "value": "当事人诉求", "source_turn": 5}
  ],
  "rules": [
    "以上事实只读:不得改写、不得补全、不得推定",
    "缺口记为未知,不要用合理推测填充",
    "回答末尾按 id 逐项复述所依据的事实"
  ]
}

替换项是 facts 里的 value 与 source_turn,rules 可保留。这段结构放在 system 或每轮用户消息开头都行,关键是位置固定,便于比较不同位置的差异。

用固定事实清单重问,观察模型是否丢项或改项

复现方式很简单:每轮提问都把同一份事实清单原样粘贴在最前面,问题本身换不同问法,连续跑三轮以上。粘贴动作不要省略,哪怕上一轮已经贴过——省略之后就无法区分是模型忘了还是上下文被裁掉了。

GLM-Legal 多轮法律咨询丢事实——是上下文窗口还是提示词没锁住? / 用事实清单复现
请只依据下列事实回答,事实为只读,不得改写或补全。

[事实清单]
P-01 当事人:…
T-01 时间:…(完整年月日)
M-01 金额:…
A-01 行为:…
D-01 诉求:…

[问题]
按上述事实说明诉讼时效的起算点。

[输出要求]
1) 先列出你使用到的 fact id;
2) 再给分析;
3) 若某项事实缺失,写“未知”,不要推定。

每轮把模型输出的 fact id 和对应内容抄进记录表,与事实清单逐项比对。判断稳定还是偶发的标准是:同一清单、同一问法重复多次,错误始终落在同一个 id 且改法一致,属于稳定问题,值得改提示词或改检索;每次错的 id 都不一样,先怀疑采样随机性,以及历史轮次里混进了与本问无关的叙述带偏了判断。这一步的验证方式是看记录表里同一个 id 的复述是否前后一致,风险边界是:即使多轮都不错,也不代表换问法后仍不错,问法本身就是变量。

区分上下文长度限制与提示词未锁定事实

到这一步再做对照实验。每次只改一个变量,改完用同一份事实清单重跑,记录错误是否消失。

变化项观察点倾向判断
只保留最近两三轮加事实清单改项、漏项明显减少或消失与上下文相关,早期信息被稀释或截断
轮次不变,把事实清单和只读规则写进 system错误消失且多轮保持提示词未锁定事实,约束缺位
每轮重贴清单,system 不变错误减少但仍有个别改项两种因素叠加,先修提示词再压轮次
三项都做过,错误依旧同一 id 反复被两种说法交替事实本身存在歧义或前后表述冲突,回到第 2 步重拆

操作上建议固定参数再比:温度、top_p、是否流式都保持一致,否则差异无法归因。若怀疑截断,去看请求日志里实际发出的 messages 字符或 token 数与模型上限的距离,而不是看本地拼好的完整文本长度,两者常常不一样。反过来,如果缩短轮次后错误消失,但也同时改了提示词,这个对照就作废了,需要重跑一次只改一项。

整理一份多轮法律咨询的事实核对模板

把前面几步合成一张可复用的核对表,每次遇到丢事实的会话就照着填。表分三块:事实清单、轮次记录、判断结论。

[一] 事实清单
id | 类别 | 内容(原文照抄) | 来源轮次 | 备注
P-01 | 当事人 | … | 1 |
T-01 | 时间   | … | 1 |
M-01 | 金额   | … | 1 |
A-01 | 行为   | … | 2 |
D-01 | 诉求   | … | 5 |

[二] 轮次记录(每轮重贴清单后填写)
轮次 | 使用的 fact id | 模型复述是否一致 | 差异标记(L/C/A/O) | 备注
2    |                 | 是 / 否          |                  |
3    |                 |                  |                  |

[三] 判断结论
差异首次出现轮次:
错误是否稳定复现:
缩短轮次后是否改善:
system 内锁定事实后是否改善:
结论:上下文相关 / 提示词未锁定 / 两者叠加 / 事实本身有歧义
下一步动作与复查时间:

使用要点:差异标记只填 L、C、A、O 四种,避免描述性文字;结论栏必须写清依据是哪一次对照,否则下次复查无从比对。这张模板的价值在于让现象可复现、可比较,它不判断法律结论本身,事实的采信和主张仍要由经办人负责。