[错误]: 使用子代理时提示缓存不起作用 (当存在动态指令时,例如 websearch)
作者: rba100创建于 2026年9月17日更新于 2026年9月17日
标签🐛 bug
发生了什么事?
□人类写作
使用 Anthropic 即时缓存功能的子剂运行,实际上无法正确缓存输入,这意味着每个工具结果都会被重新以出价对不断增长的投入进行充电. 代码假设会有一个用户信息,它可以预先与动态部分相接,但子代理唯一用户信息是外代理撰写的初始信息.
9个平行的副剂使339 Sonnet的电话 花了我40美元 这比预期要高一点
下面是Fable的分析。
□ 为你的AI写作
当稳定指令和动态指令同时存在时,可在src/agents/AgentContext.ts中构建系统:
- 将动态文本移动到最后一个人类消息索引(GetPromptCacheDynamicTailIndex)所插入的人类信息中。
- 仅标出该索引前的信件( 添加 StablePromptCacheMarkers) 。
- 跳过 TailCache Control 是因为 动态Tail. long! == 第 0.
子剂唯一的人类信息是指数0的任务. 因此,稳定的前缀是空的,没有标记消息,尾端标记被跳过. 同样的空隙会影响主代理器在一转弯内的工具回路,因为最新的用户消息后的一切都是无标记的.
于3.7.19提出,主要内容不变。
拟议固定
在构建正体后,如果插入了动态尾巴而正体中没有任何消息带有缓存标记,则呼叫添加TailCache Control(body,ttl). 这使得请求保持在Anthropic的"四分点"限制范围内,因为正是在这种情况下没有使用这些槽的前缀标记.
一个更充分的变体:总是将一个尾端标记和盖子前缀标记放在一个上,所以在每次运行时都会缓存最新的用户转弯后的工具循环.
QQ 版本信息
f0dfeed2b0d26708029ce040d01ac2e649ec6f0 (中文(简体) ).
- 重现步骤
- Anthropic提供商, teleCache: true (默认).
- 具有非空系统的代理迅速并启用网络搜索。 网络搜索在附加 instruction中增加了一个时间戳行,因此动态Instruction是非空的. 任何其它动态指令源也触发了它.
- 建立外部剂使它成为孤立的子剂,并让它绕过工具呼叫。
观察用法:缓存 creat input tokens为0,而缓存 read input tokens是每次调用时的小常数.
你看到什么浏览器 问题吗?
无回复( N)
QQ 相关日志输出
贝壳 无相关日志
QQ 屏幕截图
无回复( N)
行为守则
- 我同意遵守这个项目的行为守则内容来源: danny-avila/LibreChat