裁剪 AI 对话历史时,怎样避免留下没有对应调用的工具结果

2026-10-24

按“只保留最后三条消息”裁剪历史,可能留下工具结果,却删掉产生它的调用。续请求时,模型看到一份没有来路的数据,协议关联也可能不成立。裁剪应按语义关系组选择,而不是把每条消息都视为可以独立删除的单位。

先检查原历史有没有坏关系

本文使用 function_call 与 function_call_output 的 call_id 建立关系。裁剪之前检查重复调用、孤立结果和缺失回填;原始数据已经损坏时先报告,不让裁剪逻辑顺手“修复”成看似完整的新历史。同一轮多个调用还可能与其他上下文有依赖,本文只演示最小调用结果闭包。

合成历史先有普通用户消息,再有调用 c1、其结果和一条普通说明,后面接调用 c2 及其结果。单纯取最后一条只留下 c2 的结果,预期闭包失败。按组保留 c2 的调用与结果,即使中间夹着普通消息,也必须一起选择或明确保留其必要上下文。

保留任一结果就保留对应调用

检查器从选中项收集调用集合,对每个结果要求其 call_id 在集合中,且调用位置在前。本文对完整关系组还要求已完成调用有对应结果,便于发现另一方向的丢失。实际接口是否允许待执行调用,应由当前请求阶段明确,不能把本文完整历史合同套给正在执行的快照。

附件交付分组后的保留索引、裁剪结果和条数截断反例。验证的是引用关系完整,没有计算真实 token,也没有声称某个裁剪比例保证任务效果。预算不足以容纳一个最小关系组时,应调整保留策略或上层任务,而不是硬删一半引用。

摘要与原始协议项职责不同

“工具查询已完成”这句摘要可以帮助理解,但不能自动代替仍被结果引用的原始调用项。摘要里的参数和结果也可能丢精度,因此应作为新的说明文本保存,并明确它来自压缩过程。不要沿用原 call_id 给摘要伪装成执行结果。

失败反例是先截断,再为每个孤立结果补一个空参数调用。它让结构检查通过,却编造了原轨迹。正确做法是回到原始存档恢复真实关联,或重新组织续请求使用的上下文,并记录哪些执行证据没有保留。

OpenAI 官方函数调用资料是关联结构的依据;本文的组裁剪属于客户端策略。若会话还包含推理项、图像或其他协议要求,应按官方约束扩大闭包范围,不能声称这个小示例涵盖所有会话状态。实际部署要在裁剪后、发送前再检查一次,避免后续摘要或过滤步骤重新破坏关联。

配套文件与依据

本文的合成输入和参考结果可下载独立样本 a029.json,离线检查器 a029.py与样本放在同一目录后运行。检查器不调用模型接口。 使用 Python 3.12 或兼容版本,将上述文件下载到同一目录,执行 python a029.py。

一手资料1。资料核对日期:2026-10-24。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。

加微信,把这一页存到手机上

扫码加站长企业微信,会自动把这一页的链接发给你,方便在手机上接着看。AI 落地卡住了,也可以直接问。

去留微信

留言讨论

评论发布后会被人工复核,违规内容将被删除。

    还没有人评论,来说说你的看法

    如果发表没有反应,可以前往联系我们告诉我们。

    这个页面有问题?

    提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。