DSH 插件:把工具结果按轮归档并从对话上下文中清除以减少 Token 消耗;模型可用 read_tool_result_log 按轮次或时间自主取回原文。
跨轮对话,如果像这样清除掉工具结果的上下文,除了让 Agent 分析前一轮对话错误原因有影响之外,还会有什么影响?
DSH 插件:把工具结果按轮归档并从对话上下文中清除以减少 Token 消耗;模型可用 read_tool_result_log 按轮次或时间自主取回原文。
跨轮对话,如果像这样清除掉工具结果的上下文,除了让 Agent 分析前一轮对话错误原因有影响之外,还会有什么影响?
1
aimuz 3h 28m ago
缓存也没了,这个更贵吧😀
|
2
chenluo0429 3h 7m ago via Android
相当于每一轮启动前都对上一轮进行了一次特殊的压缩。
1. 缓存部分失效,每一轮都会触发一次缓存重建。这里有两类,如果像 ds 这种缓存很便宜的,但是缓存时间长,就要为上一轮对话重建缓存,增加成本。如果是 claude 这种短缓存的话,上上一轮的缓存大概率失效了,这里要重建全部缓存。 2. 关键事实丢失。tool result 不是都是冗余的,某些 tool result 包含关键信息,是不可丢失的。这里也会有两种情况,一种是模型不取回旧结果,用有损信息决策。另一种是模型取回,消耗更多的轮次和 token 成本。 |
3
codehz 2h 59m ago
我记得 dsh 本来就有清理工具调用结果的机制吧。。。
|
4
marsg OP @chenluo0429 补充一个信息:目前观测下来,助手消息占比 20 ~ 30%,工具结果占比 70%,在多轮对话情况下,每一轮对话都存在多步思考-调用,大多数情况在会存在 8 ~ 15 步,70%的工具结果的 Token 用量会膨胀。而删除工具结果的情况下,每一轮都会根据重建缓存,经过 10 轮对话,KV10 包含命中的 KV9 + 未命中的上一轮助手消息。如果单纯一两轮对话,确实会更贵,但如果是多轮对话,是否消耗更多 Token 还需要测定,应该会有一个临界点。
|
5
marsg OP 第一轮结束:S U1 A1 T0 (固定覆盖文字)
第二轮请求:S U1 A1 T0 U2 A2 T0 第三轮请求:S U1 A1 T0 U2 A2 T0 U3 A3 T0 第四轮请求:S U1 A1 T0 U2 A2 T0 U3 A3 T0 U4 A4 T0 |