llm-retry
单头文件C++库,提供重试(with_retry)、故障转移(with_failover)和熔断器(CircuitBreaker)功能,用于LLM API调用等场景。
时间轴 (近 90 天)
在100个并发调用、令牌桶容量20、每秒补充10个令牌的测试中,llm-retry默认配置(3次重试、指数退避、±10%抖动)导致64个调用彻底失败。
在相同测试中,默认配置下36个成功请求导致服务端额外拒绝了255次请求,请求放大倍数为2.55倍。
llm-retry是一个单头文件C++库,提供with_retry、with_failover和CircuitBreaker功能。
将llm-retry的max_attempts提升到8次后,100个调用全部通过,但耗时16.6秒,是理论下限的两倍多,且发送了375次请求。
±10%抖动导致所有在0秒失败的客户端等待450-550毫秒,80个重试挤在同一100毫秒窗口内到达,形成波次,无法有效打散重试时间。
LlM-retry的LLMError类型没有retry-after字段。
llm-retry的默认retry_on_http_codes列表中不包含529(overloaded_error)和408(请求超时),导致这些错误从不重试。
llm-retry的with_failover功能将400错误(如提示词过长、JSON格式错误)静默重试到备用模型,掩盖错误,导致质量下降无人察觉。
全部知识事实 (8)
在100个并发调用、令牌桶容量20、每秒补充10个令牌的测试中,llm-retry默认配置(3次重试、指数退避、±10%抖动)导致64个调用彻底失败。
50%待验证在相同测试中,默认配置下36个成功请求导致服务端额外拒绝了255次请求,请求放大倍数为2.55倍。
50%待验证llm-retry是一个单头文件C++库,提供with_retry、with_failover和CircuitBreaker功能。
50%待验证将llm-retry的max_attempts提升到8次后,100个调用全部通过,但耗时16.6秒,是理论下限的两倍多,且发送了375次请求。
50%待验证±10%抖动导致所有在0秒失败的客户端等待450-550毫秒,80个重试挤在同一100毫秒窗口内到达,形成波次,无法有效打散重试时间。
50%待验证LlM-retry的LLMError类型没有retry-after字段。
50%待验证llm-retry的默认retry_on_http_codes列表中不包含529(overloaded_error)和408(请求超时),导致这些错误从不重试。
50%待验证llm-retry的with_failover功能将400错误(如提示词过长、JSON格式错误)静默重试到备用模型,掩盖错误,导致质量下降无人察觉。
50%