多层级失败重试机制
Q:介绍下整体的失败重试机制——node、RAG 链、tools 分别怎么做?
来源:字节Agent开发一面(某大厂)
新手答:“统一加个重试装饰器,失败了重试 3 次。”
高手答:
不同层的重试策略完全不同,因为它们的失败模式和代价不同。
工具层重试:
- 策略:指数退避(1s → 2s → 4s),最多 3 次
- 特殊处理:区分瞬时错误(网络超时、限流 429)和永久错误(404、参数错误)。永久错误不重试,直接上报
- 重试前改参数:如果工具返回“参数不合法”,让 LLM 重新生成参数再调用,而不是用相同参数重试
RAG 链重试:
- 策略:重试不是“再搜一遍”——是换检索策略
- 第一次失败(召回为空):Query 重写后重试
- 第二次失败:降低相似度阈值,或切换到 BM25 关键词检索
- 第三次失败:返回空结果 + 提示“未找到相关知识”,让 LLM 基于自身知识回答并标注“未经知识库验证”
Node 层重试:
- 策略:整个节点重跑,但带上上次失败的 observation
- Prompt 注入失败上下文:“上一次执行失败,原因是 XXX,请换一种方式”
- 最多重试 2 次,之后进入 fallback 节点或跳过
关键:重试不是“再来一次”,而是“换一种方式再来”。
差距在哪:面试官要看你理解”盲目重试比不重试更危险”——相同参数重试 3 次只是浪费 token 和时间。每层的重试必须改变策略(换参数、换检索方式、换 Prompt),否则就是死循环。