外观
retry
支持指数退避、抖动、选择性重试和错误反馈的重试工具。
基本用法
typescript
import { retry } from '@multi-agent/agent-kit'
const result = await retry(
() => fetchData(),
{
maxRetries: 3,
baseDelay: 1000,
maxDelay: 10000,
}
)选择性重试
只重试特定类型的错误:
typescript
const result = await retry(
() => fetchData(),
{
maxRetries: 3,
baseDelay: 1000,
maxDelay: 10000,
shouldRetry: (error) => error.message.includes('timeout'),
onRetry: (error, attempt, delay) => {
console.log(`重试 ${attempt}/3,延迟 ${delay}ms`)
}
}
)错误反馈(用于 LLM)
将错误转换为反馈消息,传递给下次调用:
typescript
const result = await retry(
(feedback) => callLLMWithStructuredOutput(schema, feedback),
{
maxRetries: 3,
baseDelay: 2000,
maxDelay: 30000,
transformError: (error) => {
if (error.lc_error_code === 'OUTPUT_PARSING_FAILURE') {
return `上次输出格式错误:${error.message}\n请严格按照 schema 定义返回 JSON。`
}
return undefined // 其他错误不提供反馈
},
onRetry: (error, attempt, delay, feedback) => {
console.log(`格式错误,重试 ${attempt}/3`)
if (feedback) {
console.log(`反馈给 LLM: ${feedback}`)
}
}
}
)调用顺序:
- 第 1 次:
fn(undefined) - 第 2 次:
fn(transformError(error1)) - 第 3 次:
fn(transformError(error2))
配置选项
typescript
interface RetryConfig<TError = Error> {
maxRetries: number // 最大重试次数(不包含首次尝试)
baseDelay: number // 基础延迟(毫秒)
maxDelay: number // 最大延迟(毫秒)
shouldRetry?: (error: TError, attempt: number) => boolean
transformError?: (error: TError, attempt: number) => string | undefined
onRetry?: (error: TError, attempt: number, delay: number, feedback?: string) => void
}react vs retry
| 特性 | retry | react |
|---|---|---|
| 适用场景 | 临时故障(网络超时等) | 需要自我修正的场景(LLM 决策错误等) |
| 操作方式 | 相同操作重复执行 | 根据错误反馈调整决策 |
| 反馈机制 | 简单的字符串反馈 | 结构化的错误对象传递给 reason |
| 决策控制 | 无 | 完整的 reason → act → observe 循环 |
选择建议:
- 调用外部 API、网络请求 → 使用
retry - LLM 决策、Agent 选择 → 使用 react