← 全部示例
// 生产控制
任务重试(指数退避)
演示任务配置上的 maxRetries、retryDelayMs 与 retryBackoff:任务失败时框架按指数退避自动重试;onProgress 回调会收到 task_retry 事件,便于实时记录重试。
01 运行
OMA API
OpenMultiAgent在仓库的克隆里运行这个文件:
npx tsx packages/core/examples/patterns/task-retry.ts
前置条件
- ANTHROPIC_API_KEY env var must be set.
OMA 与 provider 无关——这个示例按上面的 key 编写,但你也可以用 OpenAI、Gemini、Groq 等任意 provider 运行。 全部 provider →
展开完整同步源码 · 132 行
完整示例,从固定的 Framework commit 同步。
/*** Task Retry with Exponential Backoff** Demonstrates `maxRetries`, `retryDelayMs`, and `retryBackoff` on task config.* When a task fails, the framework automatically retries with exponential* backoff. The `onProgress` callback receives `task_retry` events so you can* log retry attempts in real time.** Scenario: a two-step pipeline where the first task (data fetch) is configured* to retry on failure, and the second task (analysis) depends on it.** Run:* npx tsx packages/core/examples/patterns/task-retry.ts** Prerequisites:* ANTHROPIC_API_KEY env var must be set.*/import { OpenMultiAgent } from '../../src/index.js'import type { AgentConfig, OrchestratorEvent } from '../../src/types.js'// ---------------------------------------------------------------------------// Agents// ---------------------------------------------------------------------------const fetcher: AgentConfig = {name: 'fetcher',model: 'claude-sonnet-4-6',systemPrompt: `You are a data-fetching agent. When given a topic, produce a shortJSON summary with 3-5 key facts. Output ONLY valid JSON, no markdown fences.Example: {"topic":"...", "facts":["fact1","fact2","fact3"]}`,maxTurns: 2,}const analyst: AgentConfig = {name: 'analyst',model: 'claude-sonnet-4-6',systemPrompt: `You are a data analyst. Read the fetched data from shared memoryand produce a brief analysis (3-4 sentences) highlighting trends or insights.`,maxTurns: 2,}// ---------------------------------------------------------------------------// Progress handler — watch for task_retry events// ---------------------------------------------------------------------------function handleProgress(event: OrchestratorEvent): void {const ts = new Date().toISOString().slice(11, 23)switch (event.type) {case 'task_start':console.log(`[${ts}] TASK START "${event.task}" (agent: ${event.agent})`)breakcase 'task_complete':console.log(`[${ts}] TASK DONE "${event.task}"`)breakcase 'task_retry': {const d = event.data as { attempt: number; maxAttempts: number; error: string; nextDelayMs: number }console.log(`[${ts}] TASK RETRY "${event.task}" — attempt ${d.attempt}/${d.maxAttempts}, next in ${d.nextDelayMs}ms`)console.log(` error: ${d.error.slice(0, 120)}`)break}case 'error':console.log(`[${ts}] ERROR "${event.task}" agent=${event.agent}`)break}}// ---------------------------------------------------------------------------// Orchestrator + team// ---------------------------------------------------------------------------const orchestrator = new OpenMultiAgent({defaultModel: 'claude-sonnet-4-6',onProgress: handleProgress,})const team = orchestrator.createTeam('retry-demo', {name: 'retry-demo',agents: [fetcher, analyst],sharedMemory: true,})// ---------------------------------------------------------------------------// Tasks — fetcher has retry config, analyst depends on it// ---------------------------------------------------------------------------const tasks = [{title: 'Fetch data',description: 'Fetch key facts about the adoption of TypeScript in open-source projects as of 2024. Output a JSON object with a "topic" and "facts" array.',assignee: 'fetcher',// Retry config: up to 2 retries, 500ms base delay, 2x backoff (500ms, 1000ms)maxRetries: 2,retryDelayMs: 500,retryBackoff: 2,},{title: 'Analyze data',description: 'Read the fetched data from shared memory and produce a 3-4 sentence analysis of TypeScript adoption trends.',assignee: 'analyst',dependsOn: ['Fetch data'],// No retry — if analysis fails, just report the error},]// ---------------------------------------------------------------------------// Run// ---------------------------------------------------------------------------console.log('Task Retry Example')console.log('='.repeat(60))console.log('Pipeline: fetch (with retry) → analyze')console.log(`Retry config: maxRetries=2, delay=500ms, backoff=2x`)console.log('='.repeat(60))console.log()const result = await orchestrator.runTasks(team, tasks)// ---------------------------------------------------------------------------// Summary// ---------------------------------------------------------------------------console.log('\n' + '='.repeat(60))console.log(`Overall success: ${result.success}`)console.log(`Tokens — input: ${result.totalTokenUsage.input_tokens}, output: ${result.totalTokenUsage.output_tokens}`)for (const [name, r] of result.agentResults) {const icon = r.success ? 'OK ' : 'FAIL'console.log(` [${icon}] ${name}`)console.log(` ${r.output.slice(0, 200)}`)}
// 企业服务
要把它用到生产环境?
open-multi-agent 采用 MIT 许可、可自行免费运行。当你需要在期限内交付、集成,或获得支持时,元定义科技(YuanASI)提供商业交付与支持。